Vorschläge fürn neues Tab/PageControl?

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

Mir sind auch noch 1000 andere Dinge aufgefallen eins z.b.: Es währe toll, wenn die Tabs wenn die nicht Sichtbar sein sollen zur desinger Zeit trozdem sichtbar sind und nur zur Laufzeit unsichbar und es währe toll wenn ich sagen könnte die seite 1,2 und 3 sollen nicht sichtbar sein und die anderen schon.... würde sogar sin ergeben in manchen-fällen !
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 »

FEATURES:
* Schließen-Button für jede Seite einstellbar (TCustomPage.ParentCloseButton?)
In wiefern einstellbar? Visible On/Off oder auch noch andere sachen?

* farbliche Einstellbarkeit (Tabs/Seite)
Tab wird ein TGradButton sein
Am besten einfach eine OnPaint für die Seite und feddich oder?^^


* verschiedene Tab-Designs (es gibt TTabControl.Style, was unter Win32 aber nicht funktioniert)
Screenshot bitte ^.^ , denke mal das werde ich dann einbauen wenn ich auch Style/Themes einbauen werden -> ende des Jahres ^.^

* OwnerDraw
Ist das nicht gleich mit OnPaint?
Und welche Klasse soll das haben? Das Control?, die Bar die die Tabs beinhaltet?, die Bar die extra Buttons beinhaltet oder die Page?


* Tabs über Index als String und/oder T(Custom)Page ansprechbar (T(Custom)Page ist wichtiger)
die Pages kann man ansprechen, die Eigenschaften des Tabs werden in den Pages eigenschaften sein

* 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

Wenn man a) hat und b) auch , sollen dann 2 Bilder angezeigt werden oder wie?
für c) siehe etwas Höher ^^


* MultiLine-Unterstützung
Denke mal das wird das schwerste ^.^, wenn ich da nicht weiter komme gibt es bald nen thread dazu xD, vorallem wie soll das aussehen wenn man auch noch 4 TabPosition hat ( Top, Bottom, Right, Left ) ^^, postet euere Vorschläge^^

* Möglichkeit zur Auswahl: entweder wird immer die selbe Seite angezeigt (TTabControl) oder für jeden Tab die Entsprechende Seite (TNotebook, TPageControl)
Jop wollte ich sowieso einbauen ^.^

EVENTS:

* OnMouseDown
* OnMouseUp
* OnMouseMove
-> TMouseEvent, TMouseMoveEvent, TMouseWheelEvent, TMouseWheelUpDownEvent

nur aufm Tab? weil auf der Page müsste das ja schon verfügbar sein

* OnTabClick (Sender: TObject; Page: TCustomPage) oder (Sender: TObject; PageIndex: Integer) oder (Sender: TCustomPage)
* OnTabChange (Sender: TObject; var AllowChange: Boolean -> TTabChangingEvent)
* OnCloseTabClicked

Wird/Muss eh eingebaut werden ^^
Socke hat geschrieben: viel Spaß beim Basteln
Die Socke
Könnt ja mithelfen :-D

Edit1:
Habe ne kleine Version zusammen gestellt (siehe Anhang), die Fehler mit der TabPosition etc werden noch gelöst. Aber ich komme bei den folgenden Fehler nicht weiter.

Man kann TGradTabPage im Editor verschieben obwohl csDesignFixedBounds gesetzt wurde.
Man kann auch keine Controls über die IDE einfach per MausKlick hinzufügen, funktioniert nur wenn man das Control über den Objekt Inspektor zu der Page verschiebt.
Wenn man Pages während des Designens( in der IDE ) hinzufügt, werden diese beim Compilieren bzw im Running a) nicht übernommen, b) erkennt LRessources die TGradTabPage nicht und es kommt zu nem Fehler

Also wie gesagt die anderen Fehler mal vorab weg, hier geht es nur um die Designtime Fehler^^.

Würde mich freuen wenn mir jemand bei diesen 3 Problemen helfen könnte^^, denn bei diesen Sachen habe ich kp :-D

MfG,
Eugen
Dateianhänge
GradTabControl.rar
(17.19 KiB) 90-mal heruntergeladen

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 »

Niemand eine Idee? oder ein hinweis woran es liegen könnte? :(

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 »

EugenE hat geschrieben:Niemand eine Idee? oder ein hinweis woran es liegen könnte? :(
Für die Design-Time Fehler, muss ich das Package erst installieren. Da Lazarus derzeit aber meint, irgendwelche Sachen wären doppelt vorhanden, geht das schlecht. Aber: Ich bastel mir grade eine neu FPC/Lazarus Installation.

Zu meiner List/deinen Kommentaren:
Das war eigentlich nur ein Sammlung von Dingen, die in den vorhandenen TabControls vorhanden sind, in diesem Thread genannt wurden oder mir so eingefallen sind.
Schließen-Button:
Sichtbarkeit sollte vom TabControl her einstellbar sein. Dass jede Seite das individuell festsetzen kann, war nur so ne Idee. d.h. ein Seite hat keinen Close-Button, die anderen schon. Der Schließen-Button sollte a) sich dem Design anpassen (also ganz normal) b) evtl. einstellbar sein. Also, dass ich bspw. ein Bild dafür angebe (evtl. das ganze über einen TBitBtn?)

Bildunterstützung:
a) (ImageList) wird derzeit unterstützt (ich glaub von allen TabControls) aber zur Laufzeit ist das Arbeiten mit ImageListen blöd. Ich arbeite lieber direkt mit einem TGraphic. Ob zwei Bilder angezeigt werden, wenn ImageIndex -1 und im TGraphic der Seite ein Bild drinnen ist, wäre möglich, aber (wahrscheinlich) nicht nötig

farbliche Einstellbarkeit:
Immer selber zeichnen, wenn ich nur die Hintergrundfarbe ändern möchte ist mir zu viel Aufwand (ich bin fault^^). Hintergrundfarbe für das TabControl (Hintergrund der Tabs). Die Seite sollte das Sowieso können (Frage: was ist, wenn nur eine Seite bei mehreren Tabs angezeigt wird? ist dann auch ein/mehrere T(Custom)Page vorhanden?)

Painting:
Mit dem Zeichnen von Controls hab ich mich noch nicht auseinander gesetzt. Aber:
OwnerDraw -> eine OnOwnerDraw (oder so) muss alles zeichnen
OnPaint -> wie wärs mit OnTabPaint, spezifisch, wenn ein Tab neu gezeichnet wird
Jetzt ist die Frage, was unter welchen Bedingungen aufgerufen wird. Ich denke standardmäßig wird alles selbst gezeichnet. Nur wenn OwnerDraw = True ist, muss alles von Hand gezeichnet werden (evtl. wird der Hintergrund aus Design-Gründen schon vorgezeichnet).

Der Rest:
Ja!

MfG Die Socke
P.S: ich helfe ja schon durch meine Foren-Beiträge mit :wink:

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 »

Die aufgelisteten Features werden irgendwann inplementiert, vorerst müssen die aktuellen IDE fehler raus -.-

Die neueste Version immer hier:
http://svn.assembla.com/svn/ebpagecontrol" onclick="window.open(this.href);return false;

Wer zugang haben will soll bescheid sagen ^.^

Einen Fehler konnte ich lösen: Die Pages können nicht mehr verschoben werden.

Die Pages die in der IDE hinzugefügt werden, erzeugen beim Starten des Programmes fehler -.-*.

Und hier meldet sich auch keiner der schon Componente gemacht hat, bzw der der schon etwas größere Componente erstellt hat :(

TschuuS

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Beitrag von Bora4d »

Hallo Leute!
Vieles wurde schon mit TNotebook realisiert:

Orientierung: property TabPosition ist nicht als published definiert aber man kann es im Program mit Notebook1.TabPosition:=tpbottom; machen.

Bilder gibt es schon mit ImageList eigenschaft.

Farben Color ist nicht als published definiert deshal muß man es im programm machen. Interessant ist die Eigenschaft Brush, damit kann man hintergrund automatisch mit Bild versehen. Bis auf die Tab-Farben lassen sich alle Farben ändern.
Notebook1.Page[1].Color:=clRed; oder Notebook1.Page[1].Brush.Color:=clRed;
Notebook1.Color:=clRed; oder Notebook1.Brush.Color:=clRed;

Tab Events gibt es, z.B. mit der mittleren Taste der Maus den Tab schließen kann man so:

Code: Alles auswählen

procedure TForm1.Notebook1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var aPageNr:integer;
begin
  aPageNr:=Notebook1.TabIndexAtClientPos(Point(x,y));
  if (Button=mbMiddle)and (aPageNr>-1) then Notebook1.Page[aPageNr].Free;
end;
Ich habe keine Quelltext in LCL über Tabs von TNotebook gefunden, wenn jemand das findet solle Bescheid sagen. Vielleicht kann man damit die fehlende Closebutton und Farben korregieren!

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 »

Jo schonklar das vieles Realisiert nur unter Windows ist das alles bischen mager^^

Es gibt TCustomNotebook sowie TPageControl, für mein TGradTabControl habe ich mich in diese beiden Classen gehalten.

Mitlerweile kann mein Control das:
- Pages hinzufügen, löschen, anzeigen ( atm noch probleme mit der IDE , wer glaubts xD )
- Pages per TStrings hinzufügen etc
- Tabs gingen auch schon, muss die Erstellung der Buttons durchdenken
- Context Menu im Designer
- Tab Events

Fehlt nurnoch:
- die IDE bugs
- die Buttons + CloseButton

und dann kann man alles selbst zeichnen ( wenn man will ) oder die standard Farben meines Controls nutzen ODER das ganz normale TPageControl nutzen ^^ , mir egal :-D

Ich hoffe das ich diese Woche damit noch fertig werde ^^

Naja Gn8 ^^

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 »

So wie ich die Sache sehe, wird das mit den Styles schwierig...
da ich aktuell Probleme damit habe, deiner Komponente in die IDE rein zu bekommen (Fehler im Quelltext/Rev. 14) kann ich die nur im Quelltext betrachten.
Da du TGradButtons verwendest, könnten andere Styles nur mit OnPaint-Events, die den gesammten Button übermalen, realisiert werden.
EugenE hat geschrieben:und dann kann man alles selbst zeichnen
so hätte ich das gemacht^^

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 finde bei der ListBox z.b. die Möglichkeit toll, das dort jeder Einträge vom aussehen her geändert werden kann.
So sollten wir das hier auch machen. Wir könnten natürlich einige Style vergeben. Wenn die nicht Aussreichen kann jeder noch andere Style erstellen.

Aber ich glaube im Moment ist nicht die Komponente das Problem sondern das Verhalten im Desinger. Bei meiner eigenen Variante so wie bei Eugens Variante.
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 »

Socke hat geschrieben:So wie ich die Sache sehe, wird das mit den Styles schwierig...
da ich aktuell Probleme damit habe, deiner Komponente in die IDE rein zu bekommen (Fehler im Quelltext/Rev. 14) kann ich die nur im Quelltext betrachten.
Da du TGradButtons verwendest, könnten andere Styles nur mit OnPaint-Events, die den gesammten Button übermalen, realisiert werden.

Die neue Version( die noch nicht released ist) vom TGradButton kann man hier finden: http://www.lazarusforum.de/viewtopic.php?t=1860" onclick="window.open(this.href);return false;

Ich glaube ich muss eh noch die TGradButton mit mehreren OnPaint-Events ausstatten wobei sicherlich eher nur die Hintergründe gezeichnet werden würden, denn die Texte+Glyphen werden dann vom TGradButton aus gezeichnet.

Ich hätte da folgendes im Sinn, für jeden Status ein Event ( über die Namen man sich später noch streiten xD):
- OnNormalBackgroundPaint
- OnClickBackgroundPaint (button gedrückt)
- OnHotBackgroundPaint (mouse-over)
- OnNotEnabledBackgroundPaint ( wenn der Button Enabled := false ist^^)

Dazu würde man dann auch noch ein Event für die größe des BackgroundRects bekommen ( beim aktuellen 2 Pixel vom Border ) also : OnGetBackgroundRect
pluto hat geschrieben:Ich finde bei der ListBox z.b. die Möglichkeit toll, das dort jeder Einträge vom aussehen her geändert werden kann.
So sollten wir das hier auch machen. Wir könnten natürlich einige Style vergeben. Wenn die nicht Aussreichen kann jeder noch andere Style erstellen.

Aber ich glaube im Moment ist nicht die Komponente das Problem sondern das Verhalten im Desinger. Bei meiner eigenen Variante so wie bei Eugens Variante.
Mitlerweile funktioniert alles in der IDE, oder welches Verhalten meinst du?

Antworten