Autor Beitrag
NOS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Fr 20.06.08 20:25 
Hallo zusammen,

ich habe mir auf einem TImage ein Raster/Grid gelegt ... somit unterteile ich das TIMage in Cells ... im OnMouseMove des TImage will ich nun in die entsprechende Cell umrahmen ... die gelingt mir allerdgins garnicht ... vielleicht könnt ihr mir helfen ... anbei der source des onmousemove

ausblenden 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:
procedure TfrmGartomatPRO.GardenBackgroundMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
 XP, YP, BX, BY: integer;
 Source,Dest : TRect;
begin
 BX := GardenBackground.XScr2Bmp ( X );
 BY := GardenBackground.YScr2Bmp ( Y );
 XP := Trunc ( (BX - 20) / 40 );
 YP := Trunc ( (BY - 25) / 40 );
 // draw selection
 if ( XP < 17 ) and ( YP < 12 )then
  begin
   Caption := 'Column: ' + IntToStr ( XP + 1 ) + '  ' + 'Row: ' + IntToStr ( YP + 1 );
   with GardenBackground.BackBuffer.Canvas do
    begin
     Pen.Color := clBlack;
     Pen.Mode  := pmNotXor;
     Pen.Width := 1;
     // Source := Rect(0,0,40,40);
     Dest   := Rect((XP*40)+20,(YP*40)+25,(XP*40)+60,(YP*40)+65);
     // GardenBackground.Bitmap.Canvas.CopyRect(Dest,Pflanzen40x40.Canvas,Source);
     Rectangle(Dest);
   end;
  end
 else
  begin
  end;
end;


Im ersten Schritt versuche ich es mit einem Rahmen durch das Rectangle ... im nächsten soll es immer ein bild in der cell angezeigt werden wo die maus sich befindet ...

Leider bin ich im grafischen Bereich noch totaler rookie und ich hoffe ihr könnt mir heflen ...

_________________
Ich liebe es wenn ein Plan funktioniert ! Aber teilweise sind es die Pläne der Anderen, die besser funktionieren :-)
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 21.06.08 11:35 
Dein Codeausschnitt ist so klein, dass wir den Code nicht mal ausprobieren könnten, wenn wir das wollten.

Ich schlage dir vor, dass du den Code zuerst etwas aufräumst, dann löst sich das Problem von alleine.

Mach eine Methode (z.B. HitTest) um abzufragen, welche Zelle an einer bestimmten Koordinate liegt. In MouseEnter zeichnest du den Selektionsrahmen und merkst dir die selektierte Zelle. In MouseMove überprüfst du, ob die Maus überhalb einer neuen selektierten Zelle ist. Falls dies der Fall ist entfernst du die Selektion von der alten Zelle und zeichnest sie bei der neuen und merkst dir die neue Zelle. In MouseLeave entfernst du die Selektion. Das dürfte doch zu schaffen sein ;)