Mit While schleife veschiedene Objekte anwählen
Mit While schleife veschiedene Objekte anwählen
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?
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.
- 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
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
Just try it
Re: Mit While schleife veschiedene Objaekte anwählen
Vielen dank für die schnelle Antwort
Re: Mit While schleife veschiedene Objekte anwählen
Bei mir gibt Lazarus aber bei
unit1.pas(43,13) Error: Incompatible types: got "TComponent" expected "TLabel"
Obwohl ich alles, so, wie es da steht verwendet habe
das hier als Fehlermeldung aus:l := form1.findcomponent('Label'+inttostr(i));
unit1.pas(43,13) Error: Incompatible types: got "TComponent" expected "TLabel"
Obwohl ich alles, so, wie es da steht verwendet habe
-
- 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
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;
- 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
*g* so ist das wenn man was blind tippt.
was auch geht :
was auch geht :
Code: Alles auswählen
l := TLabel(form1.findcomponent('Label'+inttostr(i)));
--
Just try it
Just try it
Re: Mit While schleife veschiedene Objekte anwählen
Das ist aber unsicherer. Der as-cast schmeisst eine EInvalidCast Exception wenn die Typen nicht "kompatibel" sind.corpsman hat geschrieben: was auch geht :
Code: Alles auswählen
l := TLabel(form1.findcomponent('Label'+inttostr(i)));
Das "harte" casting macht u.U. erst später Ärger.
-
- 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
Genau, siehe Dieter Bohlen.theo hat geschrieben:Das "harte" casting macht u.U. erst später Ärger.

-Michael
-
- 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
Erzeugst Du die Labels zur Laufzeit?
Ich wuerde dann ein array of TLabel verwenden ...
Ich wuerde dann ein array of TLabel verwenden ...
Re: Mit While schleife veschiedene Objekte anwählen
Vielen dank für diese schnellen und hilfreichen Antworten!
-
- Beiträge: 61
- Registriert: Mo 27. Aug 2012, 15:43
Re: Mit While schleife veschiedene Objekte anwählen
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.Eclipticon hat geschrieben:Erzeugst Du die Labels zur Laufzeit?
Ich wuerde dann ein array of TLabel verwenden ...
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