Vorschläge fürn neues Tab/PageControl?

Rund um die LCL und andere Komponenten
EugenE
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?

Beitrag von EugenE »

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

Socke
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:

Beitrag von Socke »

- kein Close Button bei den Tabs gibt
Wie wär's mit TNotebook.Options? Im CCR heißt es
TNoteBookOption - Show the close button on a tab, allow multi-line tabs
jedoch funktioniert zumindest das nboShowCloseButtons unter Windows nicht.

Evtl. könntet ihr eine von den vorhandenen Klassen beerben :lol: gibt ja ein paar: TNotebook, TPageControl und TTabControl (THeaderControl ist soviel ich verstanden habe etwas ganz anderes) incl. deren Custom-Vorfahren.

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

EugenE
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:

Beitrag von EugenE »

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^^

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

Ich finde die Idee gut und kann mich deinen Vorschlägen nur anschließen.
Button, MouseSupport und Farben sind sehr gute Ideen und wäen wirklich toll!

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Und warum nicht in die LCL intigrieren ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

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.
Hierfür gibt es bestimmte Botschaften aber schön ist diese Lösung natürlich nicht....
darum wollen wir ja verschiedene Events bereit stellen die auch auf dem Tab bezogen sind.
Und warum nicht in die LCL intigrieren ?
Das haben wir doch vor.... Die Komponente sollte von TCustomControll abgeleitet werden.
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

EugenE
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:

Beitrag von EugenE »

Christian hat geschrieben:Und warum nicht in die LCL intigrieren ?
Denke mal damit meinst du eine vorhandene Klasse ...
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^^
wenn du so gute WinAPI skills hast dann könnteste ja auch diese MouseEvents einbauen ^^.

Ich glaube TabControl oder PageControl hat die Eigenschaft und den Event OwnerDrawTabs oder so , welcher auch nicht ausgeführt wird ^^

Socke
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:

Beitrag von Socke »

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:

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;
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^^

Benutzeravatar
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:

Beitrag von af0815 »

EugenE hat geschrieben:
Christian hat geschrieben:Und warum nicht in die LCL intigrieren ?
Denke mal damit meinst du eine vorhandene Klasse ...
Oder die Vorhande aufbohren, wenn es okay geht, so haben die Änderung eine Chance in Lazarus aufgenommen zu werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pluto
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)

Beitrag von pluto »

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 ?
MFG
Michael Springwald

Socke
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:

Beitrag von Socke »

Um eine neue Klasse/Komponente wird man wohl nicht drum herum kommen :lol:
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).
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.
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.
So lange sie Plattformunhabhänig sind ist das doch OK, oder nicht ?
Wenn die nicht plattformunabhängig wird, ist die Wahrscheinlichkeit, dass die offiziell zur LCL hinzugefügt wird eher gering.
Oder die Vorhande aufbohren, wenn es okay geht, so haben die Änderung eine Chance in Lazarus aufgenommen zu werden.
Wenn hier ein neues ultimatives TabControl gebaut wird, müsste das evtl nicht mal einem vorhandenen TabControl abgeleitet sein :D
Auch wenn aufbohren einfacher ist, ich würde persönlich wahrscheinlich etwas komplett neu basteln... ist interessanter

MfG Die Socke

pluto
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)

Beitrag von pluto »

. Ich weiß bis heute noch nicht, wo genau die Unterschiede von TTabControl und TNotebook
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.
MFG
Michael Springwald

Socke
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:

Beitrag von Socke »

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)?

EugenE
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:

Beitrag von EugenE »

nö der Hintergrund der Tabs ist igendwo fest gesetzt worden, ein grund mehr für ein neues Control xD

nich mehr lange und ich kann eine erste version releasen ^.^

Socke
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:

Beitrag von Socke »

dann werd' ich mal die LCL hacken :twisted:
hab grade mal eine Liste zusammen gestellt, was dein TabControl benötigt um ultimativ zu werden, d.h. allem anderen deren Daseinsberechtigung zu entziehen :lol:

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
viel Spaß beim Basteln
Die Socke

Antworten