Label abhängig von variable verändern
Label abhängig von variable verändern
Nabend,
Ich habe folgende problemstellung: Gegeben ist ein integer zwischen 1 und 4 und abhängig davon müssen verschiedene Labels beschriftet werden.
Wie kann ich nun labelx beschriften wobei x abhängig von dem integer ist? Kann ich irgentwie das if/case of umgehen?
Ich habe folgende problemstellung: Gegeben ist ein integer zwischen 1 und 4 und abhängig davon müssen verschiedene Labels beschriftet werden.
Wie kann ich nun labelx beschriften wobei x abhängig von dem integer ist? Kann ich irgentwie das if/case of umgehen?
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Re: Label abhängig von variable verändern
Jo, stringmatrix nehmen und:ibola hat geschrieben:Nabend,
Ich habe folgende problemstellung: Gegeben ist ein integer zwischen 1 und 4 und abhängig davon müssen verschiedene Labels beschriftet werden.
Wie kann ich nun labelx beschriften wobei x abhängig von dem integer ist? Kann ich irgentwie das if/case of umgehen?
Code: Alles auswählen
label:= stringmat[i];
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
Re: Label abhängig von variable verändern
Da gibt es mir nur die Fehlermeldung Identifier not found "stringmat".
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: Label abhängig von variable verändern
if gegebenenummer=1 then label1.caption= ...........
meinst du sowas?
meinst du sowas?
Re: Label abhängig von variable verändern
Genauso, also es sieht ungefähr so aus:
beim einen Button
if gegebenenummer=1 then ersteslabel1.caption= ...........
if gegebenenummer=2 then ersteslabel2.caption= ...........
beim anderen button
if gegebenenummer=1 then zweiteslabel1.caption= ...........
if gegebenenummer=2 then zweiteslabel2.caption= ...........
...
kann das ganze natürlich mit einem case of vereinfachen, bleibt aber trotzdem noch recht umständlich.
beim einen Button
if gegebenenummer=1 then ersteslabel1.caption= ...........
if gegebenenummer=2 then ersteslabel2.caption= ...........
beim anderen button
if gegebenenummer=1 then zweiteslabel1.caption= ...........
if gegebenenummer=2 then zweiteslabel2.caption= ...........
...
kann das ganze natürlich mit einem case of vereinfachen, bleibt aber trotzdem noch recht umständlich.
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Re: Label abhängig von variable verändern
Ja nun,ibola hat geschrieben:Da gibt es mir nur die Fehlermeldung Identifier not found "stringmat".
deklarieren muss man das Dingens natürlich schon:
Code: Alles auswählen
type
tlabel_text = array[0..3] of string;
var
strmat: tlabel_text;

Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Label abhängig von variable verändern
@schnullerbacke, schöne idee, aber ibola hat bislang 3 Post hier im Forum geschrieben und ich gehe nicht davon aus der er sich sehr gut mit FreePascal/Lazarus auskennt, also schreib ich jetzt hier mla nen bisl mehr 
Generell kannst du nicht einfach eine variable "i" nehmen und dann sagen "i" ist 3 und schreiben
Aber es gibt da einen Trick, du nimmst dir einen Array, also eine Liste von Einträgen, der Vorteil eines Array ist es man kann ihn in ner Schleife durchgehen.
Also machen wir das mal, nehmen wir auch mal dier den namen "strmat"
so wir haben jetzt eine Variable mit einem Array von 0 bis 3 von Typ TLabel.
Du kannst jetzt auf strmat[0] , strmat[1] , strmat[2] , strmat[3] oder aber auch auf strmat[gegebenenummer] zugreifen. gegebenenummer muss aber von 0 bis 3 sein sonnst gibt es nen böösen fehler ...
Zuvor sollten wir aber noch das Array füllen , das machen wir wie bei einer normalen Variable;
Wenn du dich fragst wieso im eintrag strmat[1] Label2 ist und nicht Label1, gewöhn dich am besten schonmal drann Arrays immer bei 0 anfangen zu lassen, weil das später bei dymischen arrays generell so ist, außerdem ist das sauberer programmiert 

Generell kannst du nicht einfach eine variable "i" nehmen und dann sagen "i" ist 3 und schreiben
Code: Alles auswählen
labeli.Caption := Hallo;
Also machen wir das mal, nehmen wir auch mal dier den namen "strmat"
Code: Alles auswählen
var
strmat: array[0..3] of TLabel;
begin
end;
Du kannst jetzt auf strmat[0] , strmat[1] , strmat[2] , strmat[3] oder aber auch auf strmat[gegebenenummer] zugreifen. gegebenenummer muss aber von 0 bis 3 sein sonnst gibt es nen böösen fehler ...
Zuvor sollten wir aber noch das Array füllen , das machen wir wie bei einer normalen Variable;
Code: Alles auswählen
var
strmat: array[0..3] of TLabel;
begin
strmat[0] := Label1;
strmat[1] := Label2;
strmat[2] := Label3;
strmat[3] := Label4;
strmat[gegebenenummer].Caption := 'Hallo Welt';
end;

Code: Alles auswählen
Signatur := nil;
Re: Label abhängig von variable verändern
Vielen dank, das ist genau das was ich gesucht habe.
Wie man arrays benutzt wusste ich schon, das man allerdings Label als array verwenden kann ist mir neu und genau das ist das was ich gesucht habe.
Danke für die schnelle hilfe euch beiden.

Wie man arrays benutzt wusste ich schon, das man allerdings Label als array verwenden kann ist mir neu und genau das ist das was ich gesucht habe.
Danke für die schnelle hilfe euch beiden.
Re: Label abhängig von variable verändern
Kann man auch noch einfacher machen, ohne extra Array.
Einfach die Labels über den Namen suchen. Die müssen dann nur von Label1 bis Label4 benannt sein:
Einfach die Labels über den Namen suchen. Die müssen dann nur von Label1 bis Label4 benannt sein:
Code: Alles auswählen
For i:=1 to 4 do
TLabel(FindComponent('Label'+inttostr(i))).Caption:='test';
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Re: Label abhängig von variable verändern
@MAC, pardon.
Hatte nicht drauf geachtet, das @ibola so frisch hier ist. Aber nun ist der Horizont gewaltig erweitert und @ibola weiss was man so anstellen kann mit arrays.
@theo, das ist natürlich schon hohe Schule. Ob @ibola das schon verdaut bekommt bezweifle ich etwas.
Hatte nicht drauf geachtet, das @ibola so frisch hier ist. Aber nun ist der Horizont gewaltig erweitert und @ibola weiss was man so anstellen kann mit arrays.
@theo, das ist natürlich schon hohe Schule. Ob @ibola das schon verdaut bekommt bezweifle ich etwas.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)