Vorschläge fürn neues Tab/PageControl?
-
- Beiträge: 440
- Registriert: So 10. Dez 2006, 14:59
- OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
- CPU-Target: 64Bit
- Kontaktdaten:
Vorschläge fürn neues Tab/PageControl?
HI,
ich bin dabei ein neues Tab/PageControl zu entwickeln, nur was würdet ihr an einem neuen Besser machen bzw was stört euch an dem jezigen:
Mich stört es, dass es :
- kein Close Button bei den Tabs gibt
- keine Tab Events ( um zB mit dem Mittleren Taste der Maus den Button schließen kann, über man grade drüber ist ^^ )
- die Farben davon nicht ändern kann
- orientierung bei mehreren Tabs
ich denke ich werde mich an diese hier grob halten:
http://www.codeproject.com/KB/tabs/fire ... ntrol.aspx" onclick="window.open(this.href);return false;
http://www.codeproject.com/KB/miscctrl/ ... ntrol.aspx" onclick="window.open(this.href);return false;
http://www.codeproject.com/KB/cpp/MDITabControl.aspx" onclick="window.open(this.href);return false;
falls ihr noch mehr gute Beispiel oder Vorschläge habt, immer her damit ^^
Wer will könnte auch bei der Entwicklung mithelfen. Pluto macht schon mit ^^
Naja Gn8 @ aLL
ich bin dabei ein neues Tab/PageControl zu entwickeln, nur was würdet ihr an einem neuen Besser machen bzw was stört euch an dem jezigen:
Mich stört es, dass es :
- kein Close Button bei den Tabs gibt
- keine Tab Events ( um zB mit dem Mittleren Taste der Maus den Button schließen kann, über man grade drüber ist ^^ )
- die Farben davon nicht ändern kann
- orientierung bei mehreren Tabs
ich denke ich werde mich an diese hier grob halten:
http://www.codeproject.com/KB/tabs/fire ... ntrol.aspx" onclick="window.open(this.href);return false;
http://www.codeproject.com/KB/miscctrl/ ... ntrol.aspx" onclick="window.open(this.href);return false;
http://www.codeproject.com/KB/cpp/MDITabControl.aspx" onclick="window.open(this.href);return false;
falls ihr noch mehr gute Beispiel oder Vorschläge habt, immer her damit ^^
Wer will könnte auch bei der Entwicklung mithelfen. Pluto macht schon mit ^^
Naja Gn8 @ aLL
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Wie wär's mit TNotebook.Options? Im CCR heißt es- kein Close Button bei den Tabs gibt
jedoch funktioniert zumindest das nboShowCloseButtons unter Windows nicht.TNoteBookOption - Show the close button on a tab, allow multi-line tabs
Evtl. könntet ihr eine von den vorhandenen Klassen beerben

Was mich persönlich am meisten interessiert, wären die fehlenden Events. Die gibt es in der Tat nur für das ganze Control, nicht für eine einzelne Seite (bzw. deren zugehörigen Reiters). Diesbezüglich gibt es nur Events, die sich auf das wechseln der Seite beziehen.
MfG Die Socke
-
- Beiträge: 440
- Registriert: So 10. Dez 2006, 14:59
- OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
- CPU-Target: 64Bit
- Kontaktdaten:
Ja rate mal warum ich ne neue Componente dafür mache ^^, weil man auf diese Events nicht zu greifen kann , bzw doch aber dann müssteman erstmal tiefe WinAPI kenntnisse haben und diese habe ich nich ^^, und das mit dem erben einer vorhandenen klasse ist auch nich so leicht, wie soll man dann die close buttons positionieren wenn die buttons von der api ( glaube ich ) erstellt werden, bleibt für mich nur die wahl einer eigenen Komponente^^
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Hierfür gibt es bestimmte Botschaften aber schön ist diese Lösung natürlich nicht....Was mich persönlich am meisten interessiert, wären die fehlenden Events. Die gibt es in der Tat nur für das ganze Control, nicht für eine einzelne Seite (bzw. deren zugehörigen Reiters). Diesbezüglich gibt es nur Events, die sich auf das wechseln der Seite beziehen.
darum wollen wir ja verschiedene Events bereit stellen die auch auf dem Tab bezogen sind.
Das haben wir doch vor.... Die Komponente sollte von TCustomControll abgeleitet werden.Und warum nicht in die LCL intigrieren ?
Oder verstehe ich dich jetzt Falsch ? Oder meinst du das anders ?
Unser Ziel ist eigentlich eine PageControl zu schaffen was Unhabhänig vom verwendet ToolKit sein kann, aber dessen aussehen soll es natürlich auf Wunsch auch annehmen können.
Edit: Eugen die Links sind gut... daran könnten wir uns wirklich orientieren.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 440
- Registriert: So 10. Dez 2006, 14:59
- OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
- CPU-Target: 64Bit
- Kontaktdaten:
Denke mal damit meinst du eine vorhandene Klasse ...Christian hat geschrieben:Und warum nicht in die LCL intigrieren ?
wenn du so gute WinAPI skills hast dann könnteste ja auch diese MouseEvents einbauen ^^.EugenE hat geschrieben:Ja rate mal warum ich ne neue Componente dafür mache ^^, weil man auf diese Events nicht zu greifen kann , bzw doch aber dann müssteman erstmal tiefe WinAPI kenntnisse haben und diese habe ich nich ^^, und das mit dem erben einer vorhandenen klasse ist auch nich so leicht, wie soll man dann die close buttons positionieren wenn die buttons von der api ( glaube ich ) erstellt werden, bleibt für mich nur die wahl einer eigenen Komponente^^
Ich glaube TabControl oder PageControl hat die Eigenschaft und den Event OwnerDrawTabs oder so , welcher auch nicht ausgeführt wird ^^
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
WinAPI Skills hab ich nicht wirklich... das einzige, was ich damit je gemacht habe, war das extrahieren von Icons aus Executables und diese dann irgendwohin zeichnen
Ich hab mir gerade mal das TTabControl angeschaut... da gibt es:
jedoch wird keines der beiden Events ausgelöst (egal ob OwnerDraw true/false ist).
Nochmal zu den MouseEvents:
In der WinAPI wird bei den entsprechenden Aktionen durch den Benutzer werden doch Nachrichten an die entsprechenden Controls gesendet. Da Lazarus ja platformunabhängig sein soll, wurden hier hier die Windows-Messages durch Lazarus-Messages ersetzt (die wohl genau so bzw. so ähnlich funktionieren). jedoch ist mein Wissen auf diesem Gebiet begrenzt.
Jedenfalls kann man diese Nachrichten als Control empfangen und so die gewünschte Aktion ausführen. In unserem Falle wäre das bspw. aus den Koordinaten der Maus das entsprechende Tab auswählen und aktivieren.
soviel zu den nachrichten
MfG Die Socke
P.S: das einzige, was ich komponentenmäßig mal geschrieben habe, war ein Kalender aus nem StringGrid für Delphi 7^^
Ich hab mir gerade mal das TTabControl angeschaut... da gibt es:
Code: Alles auswählen
// von TCustomTabControl
published
property OnDrawTab: TDrawTabEvent read FOnDrawTab write FOnDrawTab;
property OwnerDraw: Boolean read GetOwnerDraw write SetOwnerDraw default False;
// von TCustomControl
public
property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;
Nochmal zu den MouseEvents:
In der WinAPI wird bei den entsprechenden Aktionen durch den Benutzer werden doch Nachrichten an die entsprechenden Controls gesendet. Da Lazarus ja platformunabhängig sein soll, wurden hier hier die Windows-Messages durch Lazarus-Messages ersetzt (die wohl genau so bzw. so ähnlich funktionieren). jedoch ist mein Wissen auf diesem Gebiet begrenzt.
Jedenfalls kann man diese Nachrichten als Control empfangen und so die gewünschte Aktion ausführen. In unserem Falle wäre das bspw. aus den Koordinaten der Maus das entsprechende Tab auswählen und aktivieren.
soviel zu den nachrichten
MfG Die Socke
P.S: das einzige, was ich komponentenmäßig mal geschrieben habe, war ein Kalender aus nem StringGrid für Delphi 7^^
- af0815
- Lazarusforum e. V.
- Beiträge: 6771
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Oder die Vorhande aufbohren, wenn es okay geht, so haben die Änderung eine Chance in Lazarus aufgenommen zu werden.EugenE hat geschrieben:Denke mal damit meinst du eine vorhandene Klasse ...Christian hat geschrieben:Und warum nicht in die LCL intigrieren ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
wie genau stellst du dir das vor af0815 ?
Ich habe mir aber auch schon hier Gedanken gemacht z.b. könnten wir ja auch recht einfach von TPageControl ableitet,
allerdings währe das dann auch wiederum eine neue Klasse/Komponente
Wir wollen letztendlich nur ein einziges PageControl verwenden nämlich unseres.
Das soll die vor und nachteile der anderen vereinen. Ich möchte schlielich jetzt nicht erst stunden lang suchen müssen welches nehme ich jetzt und nach einer Zeit erfahre ich oh das wahr das Falsche PageControl für das Vorhaben.
Ich denke wenn es weitere zusatzt Komponenten gibt es das schonmal nicht schlecht. So lange sie Plattformunhabhänig sind ist das doch OK, oder nicht ?
Ich habe mir aber auch schon hier Gedanken gemacht z.b. könnten wir ja auch recht einfach von TPageControl ableitet,
allerdings währe das dann auch wiederum eine neue Klasse/Komponente
Wir wollen letztendlich nur ein einziges PageControl verwenden nämlich unseres.
Das soll die vor und nachteile der anderen vereinen. Ich möchte schlielich jetzt nicht erst stunden lang suchen müssen welches nehme ich jetzt und nach einer Zeit erfahre ich oh das wahr das Falsche PageControl für das Vorhaben.
Ich denke wenn es weitere zusatzt Komponenten gibt es das schonmal nicht schlecht. So lange sie Plattformunhabhänig sind ist das doch OK, oder nicht ?
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Um eine neue Klasse/Komponente wird man wohl nicht drum herum kommen
Da ihr ja ein universelles TabContol haben möchtet, könnte man das, was gut ist, von TTabControl wiederverwerten. Ist ja OpenSource (und ich denke die neue Komponente wird das auch sein).
Auch wenn aufbohren einfacher ist, ich würde persönlich wahrscheinlich etwas komplett neu basteln... ist interessanter
MfG Die Socke

Da ihr ja ein universelles TabContol haben möchtet, könnte man das, was gut ist, von TTabControl wiederverwerten. Ist ja OpenSource (und ich denke die neue Komponente wird das auch sein).
Genau. Ich weiß bis heute noch nicht, wo genau die Unterschiede von TTabControl und TNotebook sind. Aus der Delphi 7 Hilfe weiß ich nur, dass dort TNotebook zu alt ist und deswegen nicht mehr verwendet werden soll. Die Unterschiede werden aber nicht erläutert.Ich möchte schlielich jetzt nicht erst stunden lang suchen müssen welches nehme ich jetzt und nach einer Zeit erfahre ich oh das wahr das Falsche PageControl für das Vorhaben.
Wenn die nicht plattformunabhängig wird, ist die Wahrscheinlichkeit, dass die offiziell zur LCL hinzugefügt wird eher gering.So lange sie Plattformunhabhänig sind ist das doch OK, oder nicht ?
Wenn hier ein neues ultimatives TabControl gebaut wird, müsste das evtl nicht mal einem vorhandenen TabControl abgeleitet seinOder die Vorhande aufbohren, wenn es okay geht, so haben die Änderung eine Chance in Lazarus aufgenommen zu werden.

Auch wenn aufbohren einfacher ist, ich würde persönlich wahrscheinlich etwas komplett neu basteln... ist interessanter
MfG Die Socke
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
In Delphi wahr der unterschied leicht(beim TabControl): Es gab keine Reiter beim Tab. Es wahr letztendlich nur eine Ansammlung von Panels. In Lazarus ist das zwar auch so, hier kannst du über eine Eigenschaft die Reiter sichtbar machen oder unsichtbar machen. Was auch praktisch ist. Gerade zur Entwicklungs zeit.. Ich weiß bis heute noch nicht, wo genau die Unterschiede von TTabControl und TNotebook
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
hab mich nochmal ein bisschen mit dem TTabControl auseinander gesetzt...
so wie mir das erscheint, ist das ein TNotebook um die Reiter darzustellen und ein panel (oder sowas) um einen Anzeigebereich zu haben, der vom Programmierer geändert werden muss... naja, fast das, was ich suche. Aber mir gefällt die Hintergrundfarbe (clBackground) nicht! Mir gefiele btnFace (Standardwert für das Formular) besser (passt mehr zum Rest des Programms). Kann man das irgendwie ändern (ohne die Komponente in der LCL anzupassen)?
so wie mir das erscheint, ist das ein TNotebook um die Reiter darzustellen und ein panel (oder sowas) um einen Anzeigebereich zu haben, der vom Programmierer geändert werden muss... naja, fast das, was ich suche. Aber mir gefällt die Hintergrundfarbe (clBackground) nicht! Mir gefiele btnFace (Standardwert für das Formular) besser (passt mehr zum Rest des Programms). Kann man das irgendwie ändern (ohne die Komponente in der LCL anzupassen)?
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
dann werd' ich mal die LCL hacken
hab grade mal eine Liste zusammen gestellt, was dein TabControl benötigt um ultimativ zu werden, d.h. allem anderen deren Daseinsberechtigung zu entziehen
viel Spaß beim Basteln
Die Socke

hab grade mal eine Liste zusammen gestellt, was dein TabControl benötigt um ultimativ zu werden, d.h. allem anderen deren Daseinsberechtigung zu entziehen

Code: Alles auswählen
FEATURES
* Schließen-Button (funktioniert nicht unter Win32)
* Schließen-Button für jede Seite einstellbar (TCustomPage.ParentCloseButton?)
* farbliche Einstellbarkeit (Tabs/Seite)
* verschiedene Tab-Designs (es gibt TTabControl.Style, was unter Win32 aber nicht funktioniert)
* OwnerDraw
* Tabs über Index als String und/oder T(Custom)Page ansprechbar (T(Custom)Page ist wichtiger)
* Bildunterstützung:
a) TImageList -> ein Bild für jeden Reiter
b) jede Seite kann ein eigenes Bild mitbringen (TGraphic)
c) CloseButton kann geändert werden
* MultiLine-Unterstützung
* Möglichkeit zur Auswahl: entweder wird immer die selbe Seite angezeigt (TTabControl) oder für jeden Tab die Entsprechende Seite (TNotebook, TPageControl)
EVENTS:
* OnMouseDown
* OnMouseUp
* OnMouseMove
-> TMouseEvent, TMouseMoveEvent, TMouseWheelEvent, TMouseWheelUpDownEvent
* OnTabClick (Sender: TObject; Page: TCustomPage) oder (Sender: TObject; PageIndex: Integer) oder (Sender: TCustomPage)
* OnTabChange (Sender: TObject; var AllowChange: Boolean -> TTabChangingEvent)
* OnOwnerDraw
* OnCloseTabClicked
Die Socke