Label abhängig von variable verändern

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
ibola
Beiträge: 6
Registriert: So 26. Feb 2012, 16:53

Label abhängig von variable verändern

Beitrag von ibola »

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?

schnullerbacke
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

Beitrag von schnullerbacke »

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?
Jo, stringmatrix nehmen und:

Code: Alles auswählen

label:= stringmat[i];
und bingo.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

ibola
Beiträge: 6
Registriert: So 26. Feb 2012, 16:53

Re: Label abhängig von variable verändern

Beitrag von ibola »

Da gibt es mir nur die Fehlermeldung Identifier not found "stringmat".

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Label abhängig von variable verändern

Beitrag von creed steiger »

if gegebenenummer=1 then label1.caption= ...........

meinst du sowas?

ibola
Beiträge: 6
Registriert: So 26. Feb 2012, 16:53

Re: Label abhängig von variable verändern

Beitrag von ibola »

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.

schnullerbacke
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

Beitrag von schnullerbacke »

ibola hat geschrieben:Da gibt es mir nur die Fehlermeldung Identifier not found "stringmat".
Ja nun,

deklarieren muss man das Dingens natürlich schon:

Code: Alles auswählen

type
   tlabel_text = array[0..3] of string;
 
var
  strmat: tlabel_text;
Initialisieren schadet auch nix. :lol:
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

MAC
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

Beitrag von MAC »

@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 :D

Generell kannst du nicht einfach eine variable "i" nehmen und dann sagen "i" ist 3 und schreiben

Code: Alles auswählen

labeli.Caption := Hallo;
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"

Code: Alles auswählen

var
  strmat: array[0..3] of TLabel;
begin
 
end;
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;

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

Code: Alles auswählen

Signatur := nil;

ibola
Beiträge: 6
Registriert: So 26. Feb 2012, 16:53

Re: Label abhängig von variable verändern

Beitrag von ibola »

Vielen dank, das ist genau das was ich gesucht habe. :D
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.

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Label abhängig von variable verändern

Beitrag von theo »

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:

Code: Alles auswählen

For i:=1 to 4 do
TLabel(FindComponent('Label'+inttostr(i))).Caption:='test';

schnullerbacke
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

Beitrag von schnullerbacke »

@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.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Antworten