ctGUI (Tabbed GUI auf Basis JvTabBar)

Rund um die LCL und andere Komponenten
wp_xyz
Beiträge: 5290
Registriert: Fr 8. Apr 2011, 09:01

Re: ctGUI (Tabbed GUI auf Basis JvTabBar)

Beitrag von wp_xyz »

charlytango hat geschrieben: So 5. Okt 2025, 10:30 Für mich übersetzt bedeuted deine Strategie dass vor dem Ansteuern eines neuen Tabs im OnTabSelecting Event nachgesehen wird ob das erlaubt ist und -- falls eine Pagelist zugeordnet ist -- auch in dieser im OnChange nachgefragt wird ob das passt.
Ja, so hatte ich mir das gedacht. Es könnte natürlich sein, dass OnChange etwas ganz anderes bedeuten soll als Wechsel der aktiven Seite, z.B. Seite umsortieren, Seite umbenennen, u.ä., aber diese Aktionen lösen kein TJvPageList.OnChange aus. Mir kommt es so vor, als sei dieses Event nicht vollständig implementiert worden.

charlytango
Beiträge: 1184
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: ctGUI (Tabbed GUI auf Basis JvTabBar)

Beitrag von charlytango »

wp_xyz hat geschrieben: Mo 6. Okt 2025, 12:01 Mir kommt es so vor, als sei dieses Event nicht vollständig implementiert worden.
den Eindruck habe ich irgendwie auch - nicht Fisch nicht Fleisch.

Ich konnte mit JvTabBar.OnTabSelecting das gewünschte Verhalten erzielen.
Nämlich aufgrund von Attributen auf der eingedockten Seite (zB Checkbox) das Verlassen der Seite zu verhindern.

Allerdings kommt es zu einem seltsamenVerhalten.
Beim ersten Wechselversuch klappt es wie geplant, wechselt man dann nochmal werden im TabBar die Captions vertauscht, was ich komisch finde. Ich check das nochmal und lass dir eine Version zukommen.

charlytango
Beiträge: 1184
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: ctGUI (Tabbed GUI auf Basis JvTabBar)

Beitrag von charlytango »

im Zip ist unter Demo-Fulldemo die Projektdatei.

Compiler Options - Custom Options - Defines:
LAZLOGGER

in ctgui_class gibt es ein Define USEONSELECTING mit dem man die ganze Logik zu OnSelecting abschalten kann. Dann verhält es sich wie erwartet.
***************

Nach Programmstart: Auf dem Tab "Shell_4" gibt es eine Checkbox "Can Change To Other Tab" mit der man das Verhalten des erlaubten Tabwechsels steuern kann.

Zu Shell_4 wechseln, uncheck - auf anderen Tab wechseln. das wird erwartungsgemäß mit showmessage verweigert.
Message wegklicken und nocjmal auf einen anderen tab drücken -- schell_4 folgt im Tab obwohl die Pagelist unverändert bleibt.
Das kann man gleich ein paar mal hintereinander machen, Shell_4 folgt dem Mauszeiger ;-)
Der TabBar scheint in irgend einem Move-Modus zu sein weil sich auch der Mauszeiger verändert ??

Tja....
Dateianhänge
ctgui_demo1.zip
(222.73 KiB) 61-mal heruntergeladen

charlytango
Beiträge: 1184
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: ctGUI (Tabbed GUI auf Basis JvTabBar)

Beitrag von charlytango »

offensichtlich interessiert das doch den einen oder anderen -- Feedback ist willkommen, Auch Funktionsvorschläge sofern ich sie irgendwie hin bekomme :-)

wp_xyz
Beiträge: 5290
Registriert: Fr 8. Apr 2011, 09:01

Re: ctGUI (Tabbed GUI auf Basis JvTabBar)

Beitrag von wp_xyz »

Man könnte in JvCustomTabBar.MouseDown prüfen, ob das Tab wirklich gewechsel wurde. Wenn nicht, wird MouseDown sofort verlassen, ohne weiteren Schaden anzurichten.

Code: Alles auswählen

procedure TJvCustomTabBar.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
var
  Tab: TJvTabBarItem;
  LastSelected: TJvTabBarItem;
begin
  if ScrollButtonsMouseDown(Button, Shift, X, Y) then
    Exit;

  if Button = mbLeft then
  begin
    FMouseDownClosingTab := nil;
    SetClosingTab(nil); // no tab should be closed

    LastSelected := SelectedTab;
    Tab := TabAt(X, Y);
    if Tab <> nil then
    begin
      SelectedTab := Tab;
      if SelectedTab <> Tab then      // <-- NEU
        exit;                         // <-- NEU
    end;

    if (Tab <> nil) and (Tab = SelectedTab) then    
    ....
Oder besser: Eine Statusvariable FTabChangeDisallowed einführen, die in SetSelectedTab gesetzt und im MouseDown analog geprüft wird.

wp_xyz
Beiträge: 5290
Registriert: Fr 8. Apr 2011, 09:01

Re: ctGUI (Tabbed GUI auf Basis JvTabBar)

Beitrag von wp_xyz »

wp_xyz hat geschrieben: Mo 6. Okt 2025, 20:35 Oder besser: Eine Statusvariable FTabChangeDisallowed einführen, die in SetSelectedTab gesetzt und im MouseDown analog geprüft wird.
In diesem Sinne habe ich das eben geändert und ins svn-Repository hochgeladen.

charlytango
Beiträge: 1184
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: ctGUI (Tabbed GUI auf Basis JvTabBar)

Beitrag von charlytango »

wp_xyz hat geschrieben: Mo 6. Okt 2025, 23:10
wp_xyz hat geschrieben: Mo 6. Okt 2025, 20:35 Oder besser: Eine Statusvariable FTabChangeDisallowed einführen, die in SetSelectedTab gesetzt und im MouseDown analog geprüft wird.
In diesem Sinne habe ich das eben geändert und ins svn-Repository hochgeladen.
Danke, aber...

habe ich das richtig verstanden dass es dann nur per Mausbedienung klappt und nicht per keyboard (selten aber noch aktuell)

wp_xyz
Beiträge: 5290
Registriert: Fr 8. Apr 2011, 09:01

Re: ctGUI (Tabbed GUI auf Basis JvTabBar)

Beitrag von wp_xyz »

charlytango hat geschrieben: Mo 6. Okt 2025, 23:52
wp_xyz hat geschrieben: Mo 6. Okt 2025, 23:10
wp_xyz hat geschrieben: Mo 6. Okt 2025, 20:35 Oder besser: Eine Statusvariable FTabChangeDisallowed einführen, die in SetSelectedTab gesetzt und im MouseDown analog geprüft wird.
In diesem Sinne habe ich das eben geändert und ins svn-Repository hochgeladen.
Danke, aber...

habe ich das richtig verstanden dass es dann nur per Mausbedienung klappt und nicht per keyboard (selten aber noch aktuell)
Das hatte ich extra noch geprüft, aber in diesen Units gibt es nirgendwo eine Code-Stelle mit dem Wort "Key" --> JvTabBar ist nur mit der Maus zu bedienen. Es wäre eine weitere Aufgabe, JvTabBar auf Tastaturbedienung umzubauen.

charlytango
Beiträge: 1184
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: ctGUI (Tabbed GUI auf Basis JvTabBar)

Beitrag von charlytango »

ahem... bist du sicher dass deine Änderung, die du im Forum avisiert hast, auch im sourceforge Repo gelandet ist?

Ich hab beim Download des snapshots die alte Version bekommen.

Die mit NEU markierten Zeilen waren nicht drin und FTabChangeDisallowed auch nicht??

kann auch gerne an mir liegen, mit diesen Versionierungstools stehe ich etwas auf Kriegsfuß

wp_xyz
Beiträge: 5290
Registriert: Fr 8. Apr 2011, 09:01

Re: ctGUI (Tabbed GUI auf Basis JvTabBar)

Beitrag von wp_xyz »

Ach ja: ich hatte mich im letzten Augenblick für einen anderen Namen entschieden: FSelectedTabHasChanged; deswegen hieß es oben auch "In diesem Sinne geändert"...

Antworten