Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Eigene TSTatusBar
bwolf - Di 24.10.06 11:28
Titel: Eigene TSTatusBar
Hi all,
ich würd mir gerne eine Statusbar machen, die ihren Text autoamtisch nach einer einstellbaren Zeitspanne löscht.
Mein Problem dabei:
Wie kann ich darauf reagieren, wenn der Text geändert wurde ? Oder geht das überhaupt nicht ?
Danke für eure Hilfe,
gruß ben
Saubäär - Di 24.10.06 11:37
Willst du den Text ändern oder auf eine Textänderung reagieren?
Den Text änderst du am besten mit einer Timer- Komponente. Auf eine Textänderung mit einem 'onChange' Ereigniss.
Gruß
Saubäär
bwolf - Di 24.10.06 11:48
Saubäär hat folgendes geschrieben: |
Willst du den Text ändern oder auf eine Textänderung reagieren?
Den Text änderst du am besten mit einer Timer- Komponente. Auf eine Textänderung mit einem 'onChange' Ereigniss.
Gruß
Saubäär |
Beides ;)
Ich will, das wenn der Text sich ändert, ein Timer gestartet wird, und dieser Timer so dann den Text der Statusbar wieder auf '' setzen.
Das Problem ist, das eine Statusbar kein 'onChange'-Ereignis hat.
Ich hab es mit Command Messages probiert
Delphi-Quelltext
1:
| procedure CMTextChange(var Msg:TMessage); message CM_TEXTCHANGED; |
bzw.
Delphi-Quelltext
1:
| procedure CMTextChange(var Msg:TMessage); message CM_CHANGED; |
allerdings gibts darauf keine Reaktion.
Delete - Di 24.10.06 11:53
Da du den Text ja selber im Code setzen musst, weißt du doch, wann er sich ändert. :gruebel:
Saubäär - Di 24.10.06 11:55
Dann mach es nur mit nem Timer.
z.B. sollen nach 10 min der Text geändert werden.
Timer 10 min Text schreiben
nach 10 min Text löschen
nach 10 min neuen Text schreiben
u.s.w
oder habe ich dich falsch verstanden??
Gruß
Bäär
jaenicke - Di 24.10.06 12:05
Schreib dir einfach eine Funktion, die den Text setzt. Diese kann dann einen Timer aktivieren und die entsprechenden Parameter setzen. Das wäre wohl die einfachste Lösung.
Ansonsten schreib dir halt eine eigenen Statusbar, die die von dir gewünschten Features hat... Du brauchst ja nur die Text bzw. SimpleText Eigentschaft auf eine eigene Methode zu mappen (durch Redeklaration) und schon kannst du dort einen Timer setzen. Dann natürlich sinnvollerweise nicht mit einem VCL-Timer sondern mit SetTimer und Reaktion auf WM_TIMER.
bwolf - Di 24.10.06 12:06
Luckie hat folgendes geschrieben: |
Da du den Text ja selber im Code setzen musst, weißt du doch, wann er sich ändert. :gruebel: |
Sorry, ich hab mich wohl ungenau ausgedrückt...
Also mit 'eigener Statusbar machen' meinte ich, das ich eine eigene Komponente erstellen will, die eben dieses Feature beinhaltet.
Momentan sieht es so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| unit TimerStatusBar;
interface
uses SysUtils, Classes, Controls, ComCtrls, Types,Messages, Dialogs;
type TTimerStatusBar = class(TStatusBar) private procedure CMTextChange(var Msg:TMessage); message CM_TEXTCHANGED; protected public published end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('Samples', [TTimerStatusBar]); end;
procedure TTimerStatusBar.CMTextChange; begin showmessage('text hat sich geändert'); end;
end. |
Aber das CMTExtChange event wird nicht ausgelöst.
Delete - Di 24.10.06 12:24
Ich sehe kein Ereignis, ich sehe nur eine Methode.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!