Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Sich selbst ausblendendes Label (https://www.delphipraxis.net/51077-sich-selbst-ausblendendes-label.html)

meierotto 5. Aug 2005 12:29


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

chaosben 5. Aug 2005 12:51

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 ;)

glkgereon 5. Aug 2005 12:52

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:
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;
bin mir nicht sicher ob das alles so stimmt...geht Self.Hide?
aber das prinzip sollte rictig sein :)

meierotto 5. Aug 2005 13:49

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:
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;
Könnte da bitte nochmal jemand drüberschauen?

glkgereon 5. Aug 2005 13:52

Re: Sich selbst ausblendendes Label
 
jo

Create muss einen Parameter AOwner haben

Delphi-Quellcode:
constructor TFadingLabel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);//AOwner
  FTimer:=TTimer.Create(FTimer);
  FTimer.Enabled:=False;//Active Falsch
end;
das Hide könnte man durch Visible:=False ersetzen...

meierotto 5. Aug 2005 15:01

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:
FTimer:=TTimer.Create(FTimer);
korrekt?

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?

mirage228 5. Aug 2005 15:03

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

meierotto 5. Aug 2005 15:17

Re: Sich selbst ausblendendes Label
 
Hallo mirage228,

hab jetzt den Constructor umgestellt auf:
Delphi-Quellcode:
FTimer:=TTimer.Create(Self);
das führt aber leider zum gleichen Fehler

:freak:

BlackJack 5. Aug 2005 16:39

Re: Sich selbst ausblendendes Label
 
hast du auch inherited Create aufgerufen?

hanselmansel 5. Aug 2005 16:59

Re: Sich selbst ausblendendes Label
 
Delphi-Quellcode:
constructor TDelayLabel.Create;
begin
  inherited;
  FTimer:=TTimer.Create(FTimer);
  FTimer.Enabled:=False;
  FTimer.OnTimer:=Tmr_Hide;
end;
Reicht es nicht, inherited ohne alles aufzurufen? :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr.
Seite 1 von 2  1 2      

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