image(variable).visible
image(variable).visible
Hallo,
ich möchte gern für mehrere Images in einer for-Schleife bestimmte Bedingungen bestimmen. Leider finde ich momentan keinen Weg wie ich das umsetzen kann. Im Internet bin ich auf die Variante mit Findcomponent gestoßen aber gleich mit dem Hinweis das man das eher nicht nutzen sollte.
for i:= 1 to 10 do (FindComponent('Image'+inttostr(i))as Timage).visible:=true; // funktioniert aber anscheinend nicht gern gesehen
Kann mir jemand einen Tip geben wie ich das sonst umsetzen könnte?
BG
ich möchte gern für mehrere Images in einer for-Schleife bestimmte Bedingungen bestimmen. Leider finde ich momentan keinen Weg wie ich das umsetzen kann. Im Internet bin ich auf die Variante mit Findcomponent gestoßen aber gleich mit dem Hinweis das man das eher nicht nutzen sollte.
for i:= 1 to 10 do (FindComponent('Image'+inttostr(i))as Timage).visible:=true; // funktioniert aber anscheinend nicht gern gesehen
Kann mir jemand einen Tip geben wie ich das sonst umsetzen könnte?
BG
Re: image(variable).visible
Je nachdem, was Du machen willst, könnte eine TImageList Dein Freund sein oder ein Array...
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: image(variable).visible
Irgendwie ist auch wieder nicht ganz klar, was du eigentlich erreichen willst.
Ein TImage ist eine visuelle Komponente um ein Bild auf einem Formular in verschiedenen Varianten darzustellen.
Brauchst du wirklich mehrere von diesen oder geht es mehr um Bildrepresentatonen im Speicher, also z.B. ein TBitmap?
Ein TImage ist eine visuelle Komponente um ein Bild auf einem Formular in verschiedenen Varianten darzustellen.
Brauchst du wirklich mehrere von diesen oder geht es mehr um Bildrepresentatonen im Speicher, also z.B. ein TBitmap?
Re: image(variable).visible
Ich denke er will mit einer Schleife auf mehrere Images zugreifen.
Dies könnt man lösen indem man die Images dynamisch als Array erzeugt:
Dann kannst du mit einer Schleife alle Images z.B. 10 px nach rechts verschieben, oder was du auch machen willst.
Dies könnt man lösen indem man die Images dynamisch als Array erzeugt:
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var Bild: Array[0..6] of TImage;
i: Integer;
begin
For i:=0 to 6 do
begin
Bild[i]:=TImage.Create(nil);
Bild[i].Parent:=Form1;
Bild[i].Top:=50;
Bild[i].Left:=i*50+i*10;
Bild[i].Width:=50;
Bild[i].Height:=50;
With Bild[i].Canvas do
begin
Pen.Color:=clred;
Brush.Color:=clred;
Rectangle(0, 0, 50, 50);
end;
end;
end;
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
Re: image(variable).visible
Der Code von torte wird nicht viel machen, da direkt auf das TImage gezeichnet wird(beim FormCreate).
Da nach dem FormCreate das Image neu gezeichnet wird, wird das gezeichnete wieder gelöscht(da kein puffer vorhanden).
Stattdessen sollte z.B. auf Bild.Picture.Bitmap.Canvas gezeichnet werden.
MFG
Komoluna
Da nach dem FormCreate das Image neu gezeichnet wird, wird das gezeichnete wieder gelöscht(da kein puffer vorhanden).
Stattdessen sollte z.B. auf Bild.Picture.Bitmap.Canvas gezeichnet werden.
MFG
Komoluna
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.
Re: image(variable).visible
Ok. Ich habe das auch noch nie mit Images versucht. Lediglich mit Labels.
Ich dachte das lässt sich einfach so übertragen.
Wieder etwas dazu gelernt.
Ich dachte das lässt sich einfach so übertragen.
Wieder etwas dazu gelernt.

Re: image(variable).visible
Danke für die bisherigen Kommentare.
Entschuldigt bitte wenn ich mich nicht klar genug ausgedrückt habe.
Also ich möcht so wie es auch schon torte vermutet hat mit einer Schleife auf mehrere Images zugreifen.
Jetzt möchte ich halt nicht für jedes Image immer wieder das selbe einfügen, wenn sich ja nur die Nummer des Image ändert.
Ich bin mir nicht sicher ob das überhaupt der richtige Weg ist oder ich mich total verrannt habe.
BG
Entschuldigt bitte wenn ich mich nicht klar genug ausgedrückt habe.
Also ich möcht so wie es auch schon torte vermutet hat mit einer Schleife auf mehrere Images zugreifen.
Code: Alles auswählen
//nach links oder rechts
if image1.left+image1.Width >= panel2.Width then rechts:=false;
if image1.left<1 then rechts:=true;
//nach oben oder unten
if image1.top +image1.height>= panel2.height then unten:=false;
if image1.top<1 then unten:=true;
if rechts = true then image1.left:=image1.left+xx
else image1.left:=image1.left-xx;
if unten = true then image1.top :=image1.top+yy
else image1.top :=image1.top-yy;
Jetzt möchte ich halt nicht für jedes Image immer wieder das selbe einfügen, wenn sich ja nur die Nummer des Image ändert.
Ich bin mir nicht sicher ob das überhaupt der richtige Weg ist oder ich mich total verrannt habe.
BG
Zuletzt geändert von Lori am Sa 28. Jun 2014, 10:51, insgesamt 1-mal geändert.
Grund: Highlighter
Grund: Highlighter
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: image(variable).visible
Das lässt sich übertragen und es funktioniert auch.torte hat geschrieben:Ok. Ich habe das auch noch nie mit Images versucht. Lediglich mit Labels.
Ich dachte das lässt sich einfach so übertragen.
Komoluna hat geschrieben:Der Code von torte wird nicht viel machen, da direkt auf das TImage gezeichnet wird(beim FormCreate).
Da nach dem FormCreate das Image neu gezeichnet wird, wird das gezeichnete wieder gelöscht(da kein puffer vorhanden).
Stattdessen sollte z.B. auf Bild.Picture.Bitmap.Canvas gezeichnet werden.
TImage.Canvas geht immer auf den Zwischenspeicher TImage.Picture.Bitmap.Canvas. Dieser meldet Änderungen an das Image zurück, sodass es die Änderung auf den Bildschirm bringen kann. Man kann also zu (fast) jeder Zeit darauf zu greifen.
Den Code von torte habe ich leicht verbessert:
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var Bild: Array[0..6] of TImage;
i: Integer;
begin
For i:=0 to 6 do
begin
Bild[i]:=TImage.Create(self);// Owner setzen, damit die Bilder auch wieder freigegeben werden
Bild[i].Parent:=self; // mit Self kann man das Formular einfach umbenennen
Bild[i].Top:=50;
Bild[i].Left:=i*50+i*10;
Bild[i].Width:=50;
Bild[i].Height:=50;
With Bild[i].Canvas do
begin
Pen.Color:=clred;
Brush.Color:=clred;
Rectangle(0, 0, 50, 50);
end;
end;
end;
- Dateianhänge
-
- So sieht das ganze dann aus
- image_variable.png (8.55 KiB) 1506 mal betrachtet
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
Re: image(variable).visible
oh, wusste nicht, dass sich da was geändert hat, früher waren TImage.Canvas und TImage.Picture.Bitmap.Canvas völlig unabhängig.
(Außer, dass TImage.Canvas immer den Inhalt von TImage.Picture.Bitmap.Canvas ausgibt...)
MFG
Komoluna
(Außer, dass TImage.Canvas immer den Inhalt von TImage.Picture.Bitmap.Canvas ausgibt...)
MFG
Komoluna
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.