Spezielles Tabpage Objekt

Forum für alles rund um die MSEide und MSEgui
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Spezielles Tabpage Objekt

Beitrag von fliegermichl »

Hallo,

ich arbeite zur Zeit gerade an der Portierung eines alten Delphiprogramms nach msegui. Es handelt sich da um ein CAD Programm mit dem Dächer konstruiert werden können.
Normalerweise ist der Hauptbereich die Zeichnung mit dem aktuellen Projekt.

Jetzt kann der Anwender aus verschiedenen Dachtypen wählen deren Definition in separaten Formularen erfolgen soll.

Ich stelle mir das etwa so vor, daß am rechten Bildschirmrand die einzelnen Dachtypen (Als Symbol auf dem Tab) angezeigt werden.
Wenn der Anwender mit der Maus auf eines der Tabs fährt, soll sich dessen Definitionsformular sozusagen von rechts her einblenden und wenn er das Formular mit der Maus wieder verlässt, soll es sich wieder ausblenden.

Klickt er in ein Eingabefeld innerhalb des Formulares, dann soll es solange modal eingeblendet werden, bis z.B. ein OK Button angeklickt wird.

Bekomme ich das mit den Möglichkeiten eines TTabWidget gelöst?

Gibt es eine Möglichkeit die Tabs sozusagen "Ownerdrawn" darzustellen? z.B. Halbrund oder z.T. transparent?

Danke und viele Grüße
Michael

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Spezielles Tabpage Objekt

Beitrag von mse »

fliegermichl hat geschrieben:Ich stelle mir das etwa so vor, daß am rechten Bildschirmrand die einzelnen Dachtypen (Als Symbol auf dem Tab) angezeigt werden.

Die tabs eines ttabwidget erscheinen rechts, wenn ttabwidget.tab_options tabo_vertical und tabo_opposite true gesetzt werden.
Symbole auf den tabs werden durch ttabpage.imagelist und ttabpage.imagenr definiert.
Wenn der Anwender mit der Maus auf eines der Tabs fährt, soll sich dessen Definitionsformular sozusagen von rechts her einblenden und wenn er das Formular mit der Maus wieder verlässt, soll es sich wieder ausblenden.
Klickt er in ein Eingabefeld innerhalb des Formulares, dann soll es solange modal eingeblendet werden, bis z.B. ein OK Button angeklickt wird.

Bekomme ich das mit den Möglichkeiten eines TTabWidget gelöst?

Das ist etwas speziell, vermutlich bist du mit einer Reihe von tdatabutton mit options bo_radioitem besser bedient. Ich werde ein Beispiel machen.
Gibt es eine Möglichkeit die Tabs sozusagen "Ownerdrawn" darzustellen? z.B. Halbrund oder z.T. transparent?

Die tabs haben eine tframe Eigenschaft (ttabpage.tab_frametab) und für den aktiven und den inaktiven Zustand je eine tface Eigenschaft (ttabpage.tab_facetab, tab_faceactivetab). Die face defaults können in den einzelnen ttabpage überschrieben werden (ttabpage.facetab, faceactivetab). Fred macht gerade so etwas:
http://mseide-msegui-talk.13964.n8.nabb ... _strum.mp4
Ich nehme an die Möglichkeiten von tframe und tface kennst du bereits? Für Animationen plane ich einen speziellen Timer zu implementieren.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Spezielles Tabpage Objekt

Beitrag von fliegermichl »

Vielen Dank für die Infos,

ja ich hatte mir Programmierspass.pdf angeschaut. Da bist du etwas näher auf Frame und Face eingegangen. Ist die Anwendung in dem Video native msegui?
Das ist fantastisch.

Die Möglichkeiten mit msegui scheinen fast unbegrenzt. Ist zwar nen Mords Lernaufwand aber ich bin überzeugt, dass der sich lohnt.

Viele Grüße
Michael

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Spezielles Tabpage Objekt

Beitrag von mse »

fliegermichl hat geschrieben:Ist die Anwendung in dem Video native msegui?

Ja, die Anwendung hat keine einzige Zeile Zeichnungscode, alles MSEgui Bordmittel.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Spezielles Tabpage Objekt

Beitrag von fliegermichl »

Ich hab mal einen tdatabutton in meinem Formular platziert und hab auch die Option bo_radioitem auf true gesetzt (Da ändert sich aber offensichtlich nichts).
Eine Imagelist dazu und imagenr auf 0 und es wird auch eine Grafik angezeigt.

Mit den Anchors [an_top,anright] bleibt der auch schön auf der rechten Seite.

Weiter komme ich momentan nicht.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Spezielles Tabpage Objekt

Beitrag von mse »

Ich muss den neuen tanimtimer fertig machen bevor ich das Beispiel publizieren kann.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Spezielles Tabpage Objekt

Beitrag von fliegermichl »

Ja keine Eile.

Wofür ist denn der tdatabutton gedacht? Ich habe gesehen, daß er verschiedene "value*" Eigenschaften hat, kann aber nicht rausfinden was man damit anstellen kann.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Spezielles Tabpage Objekt

Beitrag von mse »

Bei jedem Klick wird "value" um eins erhöht bis "max" erreicht ist.
Ein Beispiel ist hier:
https://gitlab.com/mseide-msegui/mseuni ... adiobutton

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Spezielles Tabpage Objekt

Beitrag von fliegermichl »

Ah ja, sehr interessant.

Kann man in dem Widgetgrid unterschiedliche Datentypen bzw. Spalten verarbeiten?

Ich habe z.B. einen Einnahmenüberschußrechner geschrieben. In einer Treeansicht hat man als Rootobjekt das jeweilige Jahr, darunter 4 Einträge für jedes Quartal, darunter für jeden Monat in dem Quartal. In all denen werden nur die Summen der Buchungen im jeweiligen Zeitraum angezeigt. Innerhalb des Monats erscheinen dann andere Spalten wie Buchungsdatum, Nettobetrag, Steuersatz, Steuerbetrag und Bruttobetrag.

euer1.png


Hier habe ich das mit Lazarus mit Hilfe des VirtualstringTree gelöst.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Spezielles Tabpage Objekt

Beitrag von mse »

fliegermichl hat geschrieben:Kann man in dem Widgetgrid unterschiedliche Datentypen bzw. Spalten verarbeiten?

Ja, alle widgets im Reiter 'Edit' können in ein twidgetgrid eingesetzt werden und bilden dann eine Spalte des entsprechenden Datentyps.
tintegeredit -> int32, trealedit -> flo64, tdatabutton -> int32, tbooleanedit -> boolean...

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Spezielles Tabpage Objekt

Beitrag von fliegermichl »

Da habe ich mich missverständlich ausgedrückt.

Ich möchte z.B. 4 Zeilen mit einer Struktur und dann 10 Zeilen mit einer abweichenden Struktur darstellen (z.B. für Summenzeilen o.ä.)

Ich hatte schon versucht, twidgetgrid zu verschachteln. Das läßt das System aber nicht zu. (invalid widget)

Wenn es nicht geht, ist auch nicht schlimm. Dann befüllt man eben ein zweites widgetgrid dynamisch in Abhängigkeit der aktuellen Zeile des ersten.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Spezielles Tabpage Objekt

Beitrag von mse »

Dazu dient eine Spalte mit ttreeitemedit. Beispiel hier:
https://gitlab.com/mseide-msegui/mseuni ... dfieldedit
https://gitlab.com/mseide-msegui/mseuni ... s/treeview
Ein weiteres Beispiel ist 'Project'-'Tree' in MSEide.

oder auch noch spezieller
https://gitlab.com/mseide-msegui/mseuni ... s/itemedit

Eine weitere Möglichkeit ist tfoldedit im twidgetgrid welches Zeilen hierarchisch verbergen kann.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Spezielles Tabpage Objekt

Beitrag von mse »

mse hat geschrieben:Ich muss den neuen tanimtimer fertig machen bevor ich das Beispiel publizieren kann.

HIer:
http://mseide-msegui.sourceforge.net/pi ... ranim.mpeg
https://gitlab.com/mseide-msegui/mseuni ... buttonanim

Zum Erzeugen der frameimages gibt es ein Tool von Minoshi:
https://gitlab.com/mseide-msegui/mseuni ... textractor

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Spezielles Tabpage Objekt

Beitrag von fliegermichl »

Der Wahnsinn. Perfekt!

Wenn ich anstatt die Farbe des Panels zu wechseln eine Grafik des jeweiligen Formulares einblende und beim anklicken des Buttons dann eben das Formular selbst als subform anzeige, habe ich schon genau das gewünschte Verhalten.

Gibt es in msegui analog zu blendcolor() bereits vorgefertigte Routinen um ein Grafik animiert ein- bzw. ausblenden zu lassen?.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Spezielles Tabpage Objekt

Beitrag von mse »

Die twidget.face property bietet diese funktion wenn tface.options fao_aphafadeall gesetzt ist. Ich mache ein Beispiel.
Weitere blend Beispiele sind hier:
https://gitlab.com/mseide-msegui/mseuni ... danimation
https://gitlab.com/mseide-msegui/mseuni ... imageblend
https://gitlab.com/mseide-msegui/mseuni ... ransparent

Antworten