Hallo
Ich schreibe eine Anwendung, die 104 TImage-Komponenten hat. Diese heissen ImgF0Z0 bist ImgF12Z7. Ich möchte das Picture.Bitmap von einer dieser Kompnenten zu einer anderen kopiern. z.B. so: ImgF2Z7.Picture.Bitmap:=ImgF4Z12.Picture.Bitmap. Das geht.
Ich möchte jedoch die Namen der beiden beteiligten Komponenten beliebig wählen können.
Den Namen der Komponente möchte ich so erstellen: Beispiel:
f:=2; z:=7; KompName:= 'ImgF'+Inttostr(f)+'Z'+Inttostr(z);
Das egibt den Namen 'ImgF2Z7' als String.
Wie kann ich jetzt über diesen Namen auf diese Komponente zugreifen? Mit TImage(KompName).Picture.Bitmap geht es nicht
Gruss
Uli
Koponenten variable Namen
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Koponenten variable Namen
Hi!
Da hast Du Dir ja etwas ausgedacht .....
Kompliziert, aber geht
Winni
Da hast Du Dir ja etwas ausgedacht .....
Kompliziert, aber geht
Code: Alles auswählen
Procedure TForm1.CopyPicture (img1,img2: string);
var who : string;
i : integer;
im1,im2 : TImage;
begin
for i := 0 to Component.Count - 1 do
begin
WriteStr(who, Components[i]);
if img1= who then im1 := components[i];
if img2 = who then im2 := components[i]:
end;
im2.Picture.Bitmap := im1.Picture.Bitmap;
end;
Re: Koponenten variable Namen
Warum ordnest du die TImage-Komponenten nicht in einem 2D-Array an?
Die Images erzeugst du zur Laufzeit und kannst sie dabei gleich in das 2D-Array einsortieren; die Eigenschaft "Name" jeder Komponente bleibt dabei leer (wird zur Laufzeit eigentlich nicht benötigt). Damit kannst du dann über FImages[F, Z] (F = 0..12, Z=0..8 ) auf jedes Image zugreifen.
Falls du unbedingt auf der Stringlösung bestehst, dann kannst du mit der Formular-Method FindComponent(name_der_komponente) jede Komponente aufgrund der Wertes der Property "Name" finden. Der Rückgabewert ist aber ein TComponent, daher musst du, um ein TImage zu erhalten, einen Type-cast durchführen:
Code: Alles auswählen
type
TForm1 = class(TForm)
private
FImages: array[0..12, 0..7] of TImage;
...
end;
Falls du unbedingt auf der Stringlösung bestehst, dann kannst du mit der Formular-Method FindComponent(name_der_komponente) jede Komponente aufgrund der Wertes der Property "Name" finden. Der Rückgabewert ist aber ein TComponent, daher musst du, um ein TImage zu erhalten, einen Type-cast durchführen:
Code: Alles auswählen
functionTForm1.FindeImage(AName: String): TImage; // AName z.B. 'ImgF2Z7'
var
C: TComponent;
begin
C := FindComponent(AName);
if C is TImage then
Result := TImage(C) // Image mit diesem Namen gefunden
else
Result := nil; // kein Image mit diesem Namen gefunden
end;
Re: Koponenten variable Namen
Hallo mitenand
Das mit dem Findcomponent funktioniert mit ein paar Anpassungen:
Var c : TComponent in TImage geändert
...
c:=FindComponent('NamederComponente') as TImage; { as TImage angehänt }
Besten Dank und Gruss
Uli
Das mit dem Findcomponent funktioniert mit ein paar Anpassungen:
Var c : TComponent in TImage geändert
...
c:=FindComponent('NamederComponente') as TImage; { as TImage angehänt }
Besten Dank und Gruss
Uli
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Koponenten variable Namen
Das geht aber schief, wenn die gefundene Komponente nicht vom Typ TImage ist.USchoch hat geschrieben: Mo 17. Jan 2022, 10:32 Hallo mitenand
Das mit dem Findcomponent funktioniert mit ein paar Anpassungen:
Var c : TComponent in TImage geändert
...
c:=FindComponent('NamederComponente') as TImage; { as TImage angehänt }
Besten Dank und Gruss
Uli
Deshalb die Prüfung von wp_xyz's Beispiel.