![]() |
Label OnChange?
Hi,
ich stehe vor einem kleinen Problem. Ich prüfe folgendermaßen, wieviele Zeichen sich in einem Label befinden:
Delphi-Quellcode:
Zur Laufzeit ist das Label leer. Beim anklicken von Images, werden dem Label Werte hinzugefügt:
...
if Wert.GetTextLen = 0 then ShowMessage ('Funktioniert'); ...
Delphi-Quellcode:
Das Label soll max. 5 Zeichen lang sein, egal welches bild in welcher reihenfolge angeklickt wird.
procedure TForm1.GelbClick(Sender: TObject);
begin Wert.Caption := Wert.Caption + ('4'); Wert.Refresh; end; procedure TForm1.GrauClick(Sender: TObject); begin Wert.Caption := Wert.Caption + ('8'); Wert.Refresh; end; usw... Am einfachsten wäre das natürlich wenn das Label ein OnChange event hätte - gibts ja nicht. :? Wie kann ich das am besten lösen? mfg |
Re: Label OnChange?
Durch eine neue Methode, z.B. AddCharToLabel(newChar: Char): boolean;
In dieser Methode machst Du die Prüfung, änderst ggf. wenn noch Platz ist das Label und gibst halt noch zurück obs geklappt hat oder nicht (weil's z.B. schon voll war). Natürlich musst Du dann halt alle Stellen ändern, die das Label anpacken, aber da gibts ne relativ einfache Möglichkeit alle Stellen zu finden: Benams das Label einfach um, dann meckert der Compiler an jeder Stelle und Du kannst dort die neue Methode aufrufen ;-) |
Re: Label OnChange?
Hallo,
am besten wäre es du prüfst auf die Länge des Labels direkt nachdem du Caption des Labels geändert hast. Bau dir einfach eine Procedure in dem du die Länge des Labels prüft und diese Procedure rufst du nach jedem:
Delphi-Quellcode:
auf.
Caption := Caption + 'Zahl'
so in Etwa:
Delphi-Quellcode:
Caption := Caption + 'Zahl'
Laengenpruefung; |
Re: Label OnChange?
Hallo
Anstelle eines OnChange Ereignisses könntest du auch eine eigene Procedure schreiben, über welche dem Label weiteren Text hinzugefügt. Dabei wird zuvor überprüft, ob die max. Länge nicht schon erreicht wurde.
Delphi-Quellcode:
procedure SetLabelText(ALabel: TLabel; const AText: string; MaxLen: Shortint);
begin if ALabel.GetTextLen + Length(AText) <= MaxLen then ALabel.Caption := ALabel.Caption + AText; end; Beispiel Aufruf:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin SetLabelText(Label1,'A', 5); end; |
Re: Label OnChange?
Danke für eure Antworten, die Methode von toms fand ich am einfachsten, und funktioniert auch wunderbar, danke.
Mir fällt gerade noch ein, wenn das Label die max. Länge von 5 erreicht hat, sollen einige Images deaktiviert werden. Wäre es sinnvoll wenn man zu jeder prozedur dann:
Delphi-Quellcode:
hinzufügt?
procedure TForm1.GruenClick(Sender: TObject);
begin SetLabelText(Wert,'5', 5); if Wert.GetTextLen = 5 then Gelb.Enabled := False; // jedes Image von Hand deaktivieren sinnvoll? Blau.Enabled := False; ... end; Also zu jedem klick eines Images die andern Images deaktiviert? Kann man das eleganter machen? mfg |
Re: Label OnChange?
du könntest dir z.b. dein einges label bauen (ableiten von TLabel), in dem du die ganzen sonderbehandlungen integrierst...
|
Re: Label OnChange?
Zitat:
|
Re: Label OnChange?
Ich würde aus der Procedur SetLabelText() eine Function machen. Diese gibt zurück, ob Text hinzugefügt wurde oder nicht (d.h Result ist vom Typ Boolean)
Delphi-Quellcode:
if SetLabelText(Wert,'5', 5) then ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz