AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Mehrere Images --> Imagex ???

Ein Thema von Maurooon · begonnen am 31. Mär 2017 · letzter Beitrag vom 31. Mär 2017
Antwort Antwort
Seite 1 von 2  1 2   
Maurooon

Registriert seit: 7. Dez 2016
70 Beiträge
 
#1

Mehrere Images --> Imagex ???

  Alt 31. Mär 2017, 17:57
Delphi-Version: 7
Hey Community,

ich bin gerade dabei etwas zu programmieren, für das ich mehrere Images benutze. Mit meinen bisherigen Kenntnissen würde ich die entsprechenden Zeilen jetzt X mal kopieren und jeweils die Nummer des Images ändern. Nur muss das doch einfacher gehen. Klar kann ich nicht ImageX schreiben, weil woher will das Programm wissen das X eine Variable ist. Gibt es eine Möglichkeit die Nummer eines Images irgendwie durch eine Art Variable zu ersetzen, damit man die ganze Prozedur nicht X mal kopieren muss? Ich hoffe es ist ansatzweise klar was mein Problem ist.

Hier ein weiterer Erklärungsversuch:

Ich hätte gern sowas wie:

Code:
begin
 for i := 1 to 5 do begin
  Imagei.visible := true;
 end;
end;
statt so:

Code:
begin
 Image1.visible := true;
 Image2.visible := true;
 Image3.visible := true;
 Image4.visible := true;
 Image5.visible := true;
end;
in meinem Fall benutze ich sogar weitaus mehr als 5 Images


Ich hoffe mein Problem ist zu genügend erläutert. Vielen Dank schonmal jetzt

Mit freundlichen Grüßen
Maurooon
"One of the basic rules of the universe is that nothing is perfect. Perfection simply doesn't exist... Without imperfection, neither you nor I would exist." - Stephen Hawking
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.528 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Mehrere Images --> Imagex ???

  Alt 31. Mär 2017, 18:04
durch eine Art Variable zu ersetzen
Ein "Array of TImage". Ja, einmal musst du alle deine Images da reinstecken.

Aber später kannst du dann genau das sagen was du gerne hättest. nur dass statt "Imagei.visible := true;" dann dort halt "meinImageArray[i].visible := true;" steht.


(Kenne mich mit FreePascal nicht aus, hoffe das ist dort genauso)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.151 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Mehrere Images --> Imagex ???

  Alt 31. Mär 2017, 18:05
Such mal hier im Forum nach Hier im Forum suchenFindComponent und den möglichen Alternativen dazu.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Maurooon

Registriert seit: 7. Dez 2016
70 Beiträge
 
#4

AW: Mehrere Images --> Imagex ???

  Alt 31. Mär 2017, 20:44
durch eine Art Variable zu ersetzen
Ein "Array of TImage". Ja, einmal musst du alle deine Images da reinstecken.

Aber später kannst du dann genau das sagen was du gerne hättest. nur dass statt "Imagei.visible := true;" dann dort halt "meinImageArray[i].visible := true;" steht.


(Kenne mich mit FreePascal nicht aus, hoffe das ist dort genauso)
Okay vielen Dank. Könnten Sie mir auch ein Beispiel für die Initialisierung eines ImageArrays zeigen?

LG
"One of the basic rules of the universe is that nothing is perfect. Perfection simply doesn't exist... Without imperfection, neither you nor I would exist." - Stephen Hawking
  Mit Zitat antworten Zitat
Maurooon

Registriert seit: 7. Dez 2016
70 Beiträge
 
#5

AW: Mehrere Images --> Imagex ???

  Alt 31. Mär 2017, 21:12
mhmm.... hab das Array nach googlen wie folgt definiert:

Code:
imagearray: array[1..20] of Timage;
und auch jeweils

Code:
imagearray[1] := Image1;
imagearray[2] := Image2;
imagearray[3] := Image3;
imagearray[4] := Image4;
imagearray[5] := Image5;
usw...

nur kriege ich wenn ich z.B. imageaaray[x].left := imagearray[x].left + 1; mache für x := 1 oder so, den error: Identifier idents no member "imagearray"

Jemand eine Lösung? Oder habe ich das Array falsch initialisiert?
"One of the basic rules of the universe is that nothing is perfect. Perfection simply doesn't exist... Without imperfection, neither you nor I would exist." - Stephen Hawking
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#6

AW: Mehrere Images --> Imagex ???

  Alt 31. Mär 2017, 21:13
Vergiss das Array.

=>

Delphi-Quellcode:
 for i := 1 to 5 do // begin in der nächsten Zeile. Das hier ist schließlich DELPHI ;)
  begin
   if Assigned((FindComponent('Image' + SysUtils.IntToStr(i)) as TImage))
    (FindComponent('Image' + SysUtils.IntToStr(i)) as TImage).Visible := True;
  end;
Ich würde das Ganze aber eher über eine TObjectList<TImage> machen.
  Mit Zitat antworten Zitat
Maurooon

Registriert seit: 7. Dez 2016
70 Beiträge
 
#7

AW: Mehrere Images --> Imagex ???

  Alt 31. Mär 2017, 21:19
Vergiss das Array.

=>

Delphi-Quellcode:
 for i := 1 to 5 do // begin in der nächsten Zeile. Das hier ist schließlich DELPHI ;)
  begin
   if Assigned((FindComponent('Image' + SysUtils.IntToStr(i)) as TImage))
    (FindComponent('Image' + SysUtils.IntToStr(i)) as TImage).Visible := True;
  end;
Ich würde das Ganze aber eher über eine TObjectList<TImage> machen.
Das ist mir viel zu kompliziert ehrlich gesagt. Könnten Sie mir das näher erklären oder eine etwas leichtere Variante vorschlagen? Mit FindComponent oder SysUtils habe ich noch nie gearbeitet.
"One of the basic rules of the universe is that nothing is perfect. Perfection simply doesn't exist... Without imperfection, neither you nor I would exist." - Stephen Hawking
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#8

AW: Mehrere Images --> Imagex ???

  Alt 31. Mär 2017, 21:22
Dann nehmen Sie am besten meinen Vorschlag wie oben. Da kann eigentlich nichts schiefgehen und allemal besser als ein Array ist es auch.
Delphi-Quellcode:
 for i := 1 to 5 do
  begin
   if Assigned((FindComponent('Image' + SysUtils.IntToStr(i)) as TImage)) // "SysUtils." kann auch weggelassen werden
    (FindComponent('Image' + SysUtils.IntToStr(i)) as TImage).Visible := True;
  end;
Rand-Info: die Zählung eines Arrays beginnt bei 0. Ein Array ist also 0-basiert. Das erste Element in einem Array steuert man mit [0] an, nicht [1].
  Mit Zitat antworten Zitat
Maurooon

Registriert seit: 7. Dez 2016
70 Beiträge
 
#9

AW: Mehrere Images --> Imagex ???

  Alt 31. Mär 2017, 21:37
Dann nehmen Sie am besten meinen Vorschlag wie oben. Da kann eigentlich nichts schiefgehen und allemal besser als ein Array ist es auch.
Delphi-Quellcode:
 for i := 1 to 5 do
  begin
   if Assigned((FindComponent('Image' + SysUtils.IntToStr(i)) as TImage)) // "SysUtils." kann auch weggelassen werden
    (FindComponent('Image' + SysUtils.IntToStr(i)) as TImage).Visible := True;
  end;
Rand-Info: die Zählung eines Arrays beginnt bei 0. Ein Array ist also 0-basiert. Das erste Element in einem Array steuert man mit [0] an, nicht [1].
Okay, habe es hinbekommen. Vielen lieben Dank! Verstehen tue ich das zwar nicht hunterprozentig und in Ihrem Quelltext fehlt das then aber dafür war ich clever genug Was genau macht dieses Assigned und dieses FindComponent jetzt?
"One of the basic rules of the universe is that nothing is perfect. Perfection simply doesn't exist... Without imperfection, neither you nor I would exist." - Stephen Hawking
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#10

AW: Mehrere Images --> Imagex ???

  Alt 31. Mär 2017, 21:42
Blöd ausgedrückt prüft Assigned ob das Objekt, das man prüft, zugewiesen (also nicht nil) wurde oder nicht.
FindComponent sucht ein Objekt mit dem Namen den man als String übergeben hat. Hier werden also "Image1" bis "Image5" übergeben.
"as TImage" behandelt das gefundene Objekt dann wie ein TImage soweit ich weiß aber das geht sicher noch viel schöner und vorallem besser.

Man könnte das Ergebnis auch in eine Variable zwischenspeichern dann wird es schöner:

Delphi-Quellcode:
var
 aImg: TImage;
begin
 // ...

 for i := 1 to 5 do
  begin
   aImg := (FindComponent('Image' + SysUtils.IntToStr(i)) as TImage);

   if Assigned(aImg) then
    aImg.Visible := True;
  end;
Aber ich betone: ich bin kein Profi und hier schlummern bestimmt Exceptions
Wenn man aber seine Image1...5 alle korrekt als TImage hat sollte es keine Fehler geben.
Wenn ich natürlich einen TButton habe der Image1 heißt wäre das doof.

Geändert von a.def (31. Mär 2017 um 21:44 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf