Sich selbst ausblendendes Label
Hallo,
ich möchte ein Label oder StaticText so nutzen, dass ich eine Information einblenden kann, welche sich nach x Sekunden wieder ausblendet. Eine Lösung wäre sicherlich ein Timer, welchen man beim einblenden startet und der nach x Sekunden das Label wieder ausblendet. Aber gibt es da vielleicht eine elegantere Lösung? Vielen Dank |
Re: Sich selbst ausblendendes Label
Naja ... ich hätte da einen Vorschlag .... aber ob der dir gefällt ....
Du baust die eine neue Komponente, abgeleitet von deiner Wunschkomponente und der fügst du einen Thread hinzu der nach der bestimmten Zeit (ein sleep im Execute-Teil) mitteilt, das die Zeit abgelaufen ist und dann den Text ausblendet. Ist natürlich ein bißchen viel Arbeit aber was solls ;) |
Re: Sich selbst ausblendendes Label
du könntest ein TXYLabel vom TLabel ableiten, das das unterstützt.
könnte in etwa so aussehen:
Delphi-Quellcode:
bin mir nicht sicher ob das alles so stimmt...geht Self.Hide?
TOwnLabel = class(TLabel)
private FHide: Boolean; FHideTime: Integer; FTimer: TTimer; procedure SetHide(NewVal: Boolean); procedure Tmr_Hide(Sender: TObject); public property Hide: Boolean read FHide write SetHide; property HideTime: Integer reaf FHideTime write FHideTime; constructor Create; destructor Destroy; end; implementation constructor TOwnLabel.Create; begin inherited Create; FTimer:=TTimer.Create(FTimer); FTimer.Active:=False; FTimer.OnTimer:=Tmr_Hide; end; destructor TOwnLabel.Destroy; begin FTimer.Free; inherited Destroy; end; procedure TOwnLabel.SetHide(NewVal: Boolean); begin FHide:=NewVal; if FHide then begin FTimer.Interval:=FHideTime; FTimer.Active:=True; end else FTimer.Active:=False; end; procedure TOwnLabel.Tmr_Hide(Sender: TObject); begin Self.Hide; end; aber das prinzip sollte rictig sein :) |
Re: Sich selbst ausblendendes Label
Vielen Dank für beide interessanten Vorschläge. Ich habe die 2. Vaiante mal aufgegriffen, allerdings bleibe ich an zwei Stellen hängen:
Delphi-Quellcode:
Könnte da bitte nochmal jemand drüberschauen?
interface
uses classes, stdCtrls, ExtCtrls; type TDelayLabel = class(TLabel) private FHide: Boolean; FHideTime: Integer; FTimer: TTimer; procedure SetHide(NewVal: Boolean); procedure Tmr_Hide(Sender: TObject); public property Hide: Boolean read FHide write SetHide; property HideTime: Integer read FHideTime write FHideTime; constructor Create; destructor Destroy; end; Procedure Register; implementation constructor TDelayLabel.Create; begin inherited Create; //benötigt Übergabeparameter FTimer:=TTimer.Create(FTimer); FTimer.Enabled:=False; FTimer.OnTimer:=Tmr_Hide; end; destructor TDelayLabel.Destroy; begin FTimer.Free; inherited Destroy; end; procedure TDelayLabel.SetHide(NewVal: Boolean); begin FHide:=NewVal; if FHide then begin FTimer.Interval:=FHideTime; FTimer.Enabled:=True; end else FTimer.Enabled:=False; end; procedure TDelayLabel.Tmr_Hide(Sender: TObject); begin Self.Hide; //funktioniert so leider nicht! end; |
Re: Sich selbst ausblendendes Label
jo
Create muss einen Parameter AOwner haben
Delphi-Quellcode:
das Hide könnte man durch Visible:=False ersetzen...
constructor TFadingLabel.Create(AOwner: TComponent);
begin inherited Create(AOwner);//AOwner FTimer:=TTimer.Create(FTimer); FTimer.Enabled:=False;//Active Falsch end; |
Re: Sich selbst ausblendendes Label
Hallo glkgereon,
irgendwie funktioniert das ganze noch nicht. Beim Zugriff auf die FTimer-Komponente kommt es zu einer Zugriffsverletzung. Ist die Initialisierung des Timers mit
Delphi-Quellcode:
korrekt?
FTimer:=TTimer.Create(FTimer);
Ich komme leider nicht weiter :wall: Ich vergaß zu erwähnen, dass ich das ganze als Komponente installiert habe! P.S. Wäre deine Wohnung für die Buntstiftesammlung groß genug? |
Re: Sich selbst ausblendendes Label
Hi,
Das mit dem Timer ist so nicht richtig. Der Parameter im Konstruktor "AOwner" stellt den "Eigentümer" der Komponente dar, also würde ich in diesem Fall das Label, also Self übergeben. mfG mirage228 |
Re: Sich selbst ausblendendes Label
Hallo mirage228,
hab jetzt den Constructor umgestellt auf:
Delphi-Quellcode:
das führt aber leider zum gleichen Fehler
FTimer:=TTimer.Create(Self);
:freak: |
Re: Sich selbst ausblendendes Label
hast du auch inherited Create aufgerufen?
|
Re: Sich selbst ausblendendes Label
Delphi-Quellcode:
Reicht es nicht, inherited ohne alles aufzurufen? :stupid:
constructor TDelayLabel.Create;
begin inherited; FTimer:=TTimer.Create(FTimer); FTimer.Enabled:=False; FTimer.OnTimer:=Tmr_Hide; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz