Autor Beitrag
t3Qn0lo-G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7
Delphi 7 Enterprise
BeitragVerfasst: Di 15.11.05 17:22 
Hallo liebe Delphi-Gemeinde!

Ich habe mal eine Frage, die da wäre:
Ich bin dabei eine Art Schachspiel zu programmieren. Für die einzelnen Felder nehme ich Shapes (weiße, schwarze).

Damit man während des Spielens eine bessere Übersicht hat, wird ein Rahmen um dieses Shape gemacht, wenn man mit der Maus darüber ist. (Genauer gesagt: es wird dann ein 2. Shape, welches nur einen Rahmen besitzt, dadrüber eingeblendet)

Zur Laufzeit des Programmes lasse ich dann dazu erstmal am Anfang die Spielfiguren erstellen, das heißt, es wird ein Image erstellt, ein bestimmtes Bild aus einer Datei geladen und auf die richtige Position im Spielfeld gepackt.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
 // Figuren erstellen
 for Figuren := 1 to 32 do begin
  // Schwarze obere Reihe
  if (Figuren <= 8) then begin
   TImage.Create(Self).Name := 'Figur' + ListBoxFiguren.Items[Figuren-1];

   with (TImage(FindComponent('Figur' + ListBoxFiguren.Items[Figuren-1]))) do begin
    Left := 16 + (Figuren * 64) - 63;
    Top := 25;
    Width := 65;
    Height := 65;
    Parent := GroupBoxSchachFeld;
    Picture.LoadFromFile('.\figuren\' + ListBoxFiguren.Items[Figuren-1] + '.png');
    Transparent := true;
   end;
  end;

  // Schwarze untere Reihe
  if (Figuren <= 16) and (Figuren >= 9) then begin
   TImage.Create(Self).Name := 'Figur' + ListBoxFiguren.Items[Figuren-1];

   with (TImage(FindComponent('Figur' + ListBoxFiguren.Items[Figuren-1]))) do begin
    Left := 16 + ((Figuren - 8) * 64) - 63;
    Top := 89;
    Width := 65;
    Height := 65;
    Parent := GroupBoxSchachFeld;
    Picture.LoadFromFile('.\figuren\' + ListBoxFiguren.Items[Figuren-1] + '.png');
    Transparent := true;
   end;
  end;

  // Weiße obere Reihe
  if (Figuren <= 24) and (Figuren >= 17) then begin
   TImage.Create(Self).Name := 'Figur' + ListBoxFiguren.Items[Figuren-1];

   with (TImage(FindComponent('Figur' + ListBoxFiguren.Items[Figuren-1]))) do begin
    Left := 16 + ((Figuren - 16) * 64) - 63;
    Top := 409;
    Width := 65;
    Height := 65;
    Parent := GroupBoxSchachFeld;
    Picture.LoadFromFile('.\figuren\' + ListBoxFiguren.Items[Figuren-1] + '.png');
    Transparent := true;
   end;
  end;

  // Weiße untere Reihe
  if (Figuren <= 32) and (Figuren >= 25) then begin
   TImage.Create(Self).Name := 'Figur' + ListBoxFiguren.Items[Figuren-1];

   with (TImage(FindComponent('Figur' + ListBoxFiguren.Items[Figuren-1]))) do begin
    Left := 16 + ((Figuren - 24) * 64) - 63;
    Top := 473;
    Width := 65;
    Height := 65;
    Parent := GroupBoxSchachFeld;
    Picture.LoadFromFile('.\figuren\' + ListBoxFiguren.Items[Figuren-1] + '.png');
    Transparent := true;
   end;
  end;
 end;


Soweit, sogut, funktioniert auch Prima. Allerdings gibt es jetzt folgendes Problem: die Bilder mit den Figuren sind haben genau die gleiche Größe wie die Spielfeld-Shapes (schwarz, weiß). Das, was nicht die Figur darstellt, ist transparent. Allerdings, wenn man jetzt mit der Maus über solch eine Figur geht, wird kein Rahmen mehr um das Spielfeldkästchen gemacht, weil ja das Image, also die Figur das Spielfeldkästchen verdeckt.

Kurzum: Wie kann ich dieses OnMouseMove Event für die Spielfiguren-Images deaktivieren, so dass das untere Spielfeldkästchen sozusagen wieder auf dieses OnMouseMove Event reagiert?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Do 27.04.06 14:15 
Hi
du hast doch sicherlich irgendwo gespeichert, auf welchem feld die figur steht (im Bsp. Figur[1].Pos)? dann kannst du ja einfach schreiben

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
 procedure Figur1MouseMove ... ;
 begin
  if Figur[1].Pos=1 then
   Feld1MouseMove(sender);
  if Figur[1].Pos=2 then
   Feld2MouseMove(sender);
  ...


und so MouseMove nur simulieren. (wobei es in dem Fall sicherlich besser wäre, gleich den Rahmen anzuzeigen, als über den MousMove des Feldes zu gehen)

Xion

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)