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 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.
ctGUI (Tabbed GUI auf Basis JvTabBar)
Re: ctGUI (Tabbed GUI auf Basis JvTabBar)
-
- 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)
den Eindruck habe ich irgendwie auch - nicht Fisch nicht Fleisch.wp_xyz hat geschrieben: Mo 6. Okt 2025, 12:01 Mir kommt es so vor, als sei dieses Event nicht vollständig implementiert worden.
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.
-
- 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)
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....
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
-
- 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)
offensichtlich interessiert das doch den einen oder anderen -- Feedback ist willkommen, Auch Funktionsvorschläge sofern ich sie irgendwie hin bekomme 

Re: ctGUI (Tabbed GUI auf Basis JvTabBar)
Man könnte in JvCustomTabBar.MouseDown prüfen, ob das Tab wirklich gewechsel wurde. Wenn nicht, wird MouseDown sofort verlassen, ohne weiteren Schaden anzurichten.
Oder besser: Eine Statusvariable FTabChangeDisallowed einführen, die in SetSelectedTab gesetzt und im MouseDown analog geprüft wird.
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
....
Re: ctGUI (Tabbed GUI auf Basis JvTabBar)
In diesem Sinne habe ich das eben geändert und ins svn-Repository hochgeladen.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.
-
- 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)
Danke, aber...wp_xyz hat geschrieben: Mo 6. Okt 2025, 23:10In diesem Sinne habe ich das eben geändert und ins svn-Repository hochgeladen.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.
habe ich das richtig verstanden dass es dann nur per Mausbedienung klappt und nicht per keyboard (selten aber noch aktuell)
Re: ctGUI (Tabbed GUI auf Basis JvTabBar)
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 hat geschrieben: Mo 6. Okt 2025, 23:52Danke, aber...wp_xyz hat geschrieben: Mo 6. Okt 2025, 23:10In diesem Sinne habe ich das eben geändert und ins svn-Repository hochgeladen.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.
habe ich das richtig verstanden dass es dann nur per Mausbedienung klappt und nicht per keyboard (selten aber noch aktuell)
-
- 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)
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ß
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ß
Re: ctGUI (Tabbed GUI auf Basis JvTabBar)
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"...