Autor Beitrag
bwolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Di 24.10.06 11:28 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 376



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Di 24.10.06 11:48 
user profile iconSaubää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

ausblenden Delphi-Quelltext
1:
procedure CMTextChange(var Msg:TMessage); message CM_TEXTCHANGED;					

bzw.
ausblenden Delphi-Quelltext
1:
procedure CMTextChange(var Msg:TMessage); message CM_CHANGED;					


allerdings gibts darauf keine Reaktion.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 376



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Di 24.10.06 12:06 
user profile iconLuckie 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:

ausblenden volle Höhe 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
    { Private declarations }
  procedure CMTextChange(var Msg:TMessage); message CM_TEXTCHANGED;
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TTimerStatusBar]);
end;

procedure TTimerStatusBar.CMTextChange;
begin
  showmessage('text hat sich geändert');
  // Timer starten, sonstwas machen...
end;

end.


Aber das CMTExtChange event wird nicht ausgelöst.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 24.10.06 12:24 
Ich sehe kein Ereignis, ich sehe nur eine Methode.