Autor Beitrag
schnapsdrossel
Hält's aus hier
Beiträge: 4


6 Personal Edition
BeitragVerfasst: Di 20.01.04 18:21 
Hi,

ich habe einen Array aus Imageboxen und möchte gerne herausfinden in welchem Array-Teil [x, y] ich mich befinde. Unten hab ich den Quelltext meiner Funktion, die diesen Array mit Bildern füllt. Da muss dann wohl irgendwo bei onMouseDown was rein, damit ich weiß, wo ich bin. Denn so bekomme ich bei den Parametern von MouseDown (x, y) nur die Koordinaten innerhalb jeder TImage Komponente, also von 0-49. Dabei weiß ich aber nicht, in welchem Array-Teil diese Koordinaten liegen.

Ich möchte nämlich beim Klick auf ein Feld des Arrays das Bild darin verändern. Kann mir da jemand helfen?


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.FormCreate(Sender: TObject);
var   x, y : integer;
begin
for x := 1 to 7 do for y := 1 to 6 do
        begin
                ba[x, y] := TImage.Create(Self);
                with ba[x,y] do
                        begin
                                autosize := true;
                                left := (x-1)*49;
                                top := (y-1)*49;
                                parent := Form1;
                                Picture.LoadFromFile('back.bmp');
                                Transparent := false;
                                onMouseDown := MouseDown;
                                show;
                        end;

        end;
end;



Vielen Dank schonmal,
Gruß Schnapsi
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 20.01.04 18:43 
Hallo!

Du kannst in der Tag-Eigenschaft des Images eine Nummer speichern. Wenn Du die Nummer x*y speicherst, kannst Du aus Breite und Höhe des Arrays die aktuelle Position rückrechnen.

Und den Tag des aktuellen Images liefert Dir der Sender im OnMouseDown-Event.

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
schnapsdrossel Threadstarter
Hält's aus hier
Beiträge: 4


6 Personal Edition
BeitragVerfasst: Di 20.01.04 20:05 
Wie mache ich das mit dem zurückrechnen dann am Besten?

Also ich kann mir nicht richtig vorstellen, dass ich aus einem Produkt wieder die Einzelnen Zahlen rausbekommen kann... Immerhin gibt es ja mehrere Möglichkeiten, auf das gleiche Produkt zu kommen (2*3 = 3*2 usw.)


Gruß Schnapsi
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 20.01.04 20:24 
Hallo!

Entschuldige, ich habe Unsinn geschrieben. :oops: Du musst eine fortlaufende Nummer nehmen!

Ein Beispiel:
ausblenden Quelltext
1:
2:
3:
00 01 02 03 04 05 06
07 08 09 10 11 12 13
14 15 16 17 18 19 20


Die Position bekommst Du nun so heraus:
x = nr mod breite (beginnend mit 0)
y = nr div breite (auch beginnend mit 0)

Entschuldige nochmal den Fehler von oben,
MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
schnapsdrossel Threadstarter
Hält's aus hier
Beiträge: 4


6 Personal Edition
BeitragVerfasst: Di 20.01.04 21:23 
Hi,

danke für die schnelle Antwort. Aber irgendwie hat mein Sender keine Tag-Eigenschaft...

ausblenden Delphi-Quelltext
1:
i := Sender.Tag;					


Das bringt den Fehler "Undefinierter Bezeichner 'Tag'." ?!


Gruß Schnapsi

PS: Sorry wenn ich mich etwas blöd anstelle ;)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 20.01.04 21:28 
Hallo!

Sender ist vom Typ TObject. TObject besitzt die Eigenschaft "tag" noch nicht. Du musst also nach TImage casten (für "tag" würde schon TComponent reichen, aber wenn, dann auch richtig ...). Das machst Du so:

ausblenden Delphi-Quelltext
1:
TImage(Sender).Tag					

Solltest Du aber auch nur machen, wenn Du Dir sicher bist, dass Sender ein TImage ist. Wenn Du das nicht genau weißt, kannst Du es vorher mit
if Sender is TImage thenabfragen.

MfG
Peter

//edit: Du stellst Dich nicht blöde an!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
schnapsdrossel Threadstarter
Hält's aus hier
Beiträge: 4


6 Personal Edition
BeitragVerfasst: Mi 21.01.04 16:08 
Super! Das funktioniert einwandfrei...

Vielen Dank für deine unkomplizierte und vor allem superschnelle Hilfe!



Gruß Schnapsi

PS: Das wird sicher nicht die letzte Frage gewesen sein ;)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 21.01.04 16:15 
Hallo!

Freue mich immer, wenn ich helfen konnte.

Und ich hoffe doch, dass es nicht die letzte Frage war! Von denen lebt das Forum schließlich.

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".