Mit While schleife veschiedene Objekte anwählen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
frederic
Beiträge: 4
Registriert: Di 25. Sep 2012, 10:17

Mit While schleife veschiedene Objekte anwählen

Beitrag von frederic »

Hallo

Ich möchte über eine while schleife erreichen, dass ich beim ersten durschlauf z.B. Label1 anwähle, beim zweiten Label2 und so weiter.
Das geht leider nicht mit if abfragen, da ich im weiteren Quelltext immer Labels erzeuge und so nur weiß, wie viele Labels vorhanden sind.

Wie mache ich das?
Zuletzt geändert von frederic am Di 25. Sep 2012, 14:53, insgesamt 1-mal geändert.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1624
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Mit While schleife veschiedene Objaekte anwählen

Beitrag von corpsman »

Code: Alles auswählen

var i:integer;
l:TLabel;
begin
  i := 1;
  while i <= 2 do begin
  l := form1.findcomponent('Label'+inttostr(i));
  if assigned(l) then begin
    l.caption := 'Ich bin das Label mit der Nummer : ' + inttostr(i);
  end;
  inc(i);
end;
--
Just try it

frederic
Beiträge: 4
Registriert: Di 25. Sep 2012, 10:17

Re: Mit While schleife veschiedene Objaekte anwählen

Beitrag von frederic »

Vielen dank für die schnelle Antwort

frederic
Beiträge: 4
Registriert: Di 25. Sep 2012, 10:17

Re: Mit While schleife veschiedene Objekte anwählen

Beitrag von frederic »

Bei mir gibt Lazarus aber bei
l := form1.findcomponent('Label'+inttostr(i));
das hier als Fehlermeldung aus:
unit1.pas(43,13) Error: Incompatible types: got "TComponent" expected "TLabel"
Obwohl ich alles, so, wie es da steht verwendet habe

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: Mit While schleife veschiedene Objekte anwählen

Beitrag von MAC »

Dann musst du den Typ noch als TLabel interpretieren lassen,fertig :)

Code: Alles auswählen

l := form1.findcomponent('Label'+inttostr(i)) as TLabel;

Code: Alles auswählen

Signatur := nil;

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1624
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Mit While schleife veschiedene Objekte anwählen

Beitrag von corpsman »

*g* so ist das wenn man was blind tippt.
was auch geht :

Code: Alles auswählen

l := TLabel(form1.findcomponent('Label'+inttostr(i)));
--
Just try it

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

Re: Mit While schleife veschiedene Objekte anwählen

Beitrag von theo »

corpsman hat geschrieben: was auch geht :

Code: Alles auswählen

l := TLabel(form1.findcomponent('Label'+inttostr(i)));
Das ist aber unsicherer. Der as-cast schmeisst eine EInvalidCast Exception wenn die Typen nicht "kompatibel" sind.
Das "harte" casting macht u.U. erst später Ärger.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Mit While schleife veschiedene Objekte anwählen

Beitrag von mschnell »

theo hat geschrieben:Das "harte" casting macht u.U. erst später Ärger.
Genau, siehe Dieter Bohlen. :twisted:

-Michael

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Mit While schleife veschiedene Objekte anwählen

Beitrag von Eclipticon »

Erzeugst Du die Labels zur Laufzeit?

Ich wuerde dann ein array of TLabel verwenden ...

frederic
Beiträge: 4
Registriert: Di 25. Sep 2012, 10:17

Re: Mit While schleife veschiedene Objekte anwählen

Beitrag von frederic »

Vielen dank für diese schnellen und hilfreichen Antworten!

Bitschubser
Beiträge: 61
Registriert: Mo 27. Aug 2012, 15:43

Re: Mit While schleife veschiedene Objekte anwählen

Beitrag von Bitschubser »

Eclipticon hat geschrieben:Erzeugst Du die Labels zur Laufzeit?

Ich wuerde dann ein array of TLabel verwenden ...
Wollte ich auch grad vorschlagen - alternativ könnte man die TLabel auch in eine TList stecken, dann ist man sogar mit der Anzahl komplett flexibel.
Wenn man die TList direkt verwendet muss man natürlich wieder type-casten. Oder halt von TList eine TLabelList ableiten.
Das mit dem array habe ich auch schon öfters mit statischen Labels in Formularen gemacht - also grafisch entworfen, und dann in der FormCreate eine Zeile pro Label für das Zuweisen zum Array-Element - statt jedesmal 2,3 Zeilen pro Label da wo die Labels manipuliert werden...
Mein persönliches Highlight wäre natürlich wenn ich die Labels in der .dfm als Array anlegen könnte...

Gruß, Ingo

Antworten