AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Label OnChange?

Ein Thema von Johnny Bravo · begonnen am 25. Sep 2008 · letzter Beitrag vom 25. Sep 2008
Antwort Antwort
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#1

Label OnChange?

  Alt 25. Sep 2008, 19:35
Hi,
ich stehe vor einem kleinen Problem.

Ich prüfe folgendermaßen, wieviele Zeichen sich in einem Label befinden:

Delphi-Quellcode:
...

if Wert.GetTextLen = 0 then
    ShowMessage ('Funktioniert');
...
Zur Laufzeit ist das Label leer. Beim anklicken von Images, werden dem Label Werte hinzugefügt:

Delphi-Quellcode:
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...
Das Label soll max. 5 Zeichen lang sein, egal welches bild in welcher reihenfolge angeklickt wird.
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
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.551 Beiträge
 
#2

Re: Label OnChange?

  Alt 25. Sep 2008, 19:45
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
Sebastian P.R. Gingter
不死鳥 Visit my Blog.
Do not argue with an idiot. They lower you to their level and then try to beat you with experience.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.304 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Label OnChange?

  Alt 25. Sep 2008, 19:46
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:

Caption := Caption + 'Zahl' auf.

so in Etwa:
Delphi-Quellcode:
Caption := Caption + 'Zahl'
Laengenpruefung;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: Label OnChange?

  Alt 25. Sep 2008, 19:47
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;
Thomas
  Mit Zitat antworten Zitat
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#5

Re: Label OnChange?

  Alt 25. Sep 2008, 20:13
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:
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;
hinzufügt?
Also zu jedem klick eines Images die andern Images deaktiviert? Kann man das eleganter machen?

mfg
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#6

Re: Label OnChange?

  Alt 25. Sep 2008, 20:58
du könntest dir z.b. dein einges label bauen (ableiten von TLabel), in dem du die ganzen sonderbehandlungen integrierst...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
8.316 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Label OnChange?

  Alt 25. Sep 2008, 21:05
Zitat von Johnny Bravo:
Also zu jedem klick eines Images die andern Images deaktiviert? Kann man das eleganter machen?
Schreib doch das auch in deine SetLabelText Methode hinein .
Sebastian Jänicke
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#8

Re: Label OnChange?

  Alt 25. Sep 2008, 21:33
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)


if SetLabelText(Wert,'5', 5) then ...
Thomas
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf