Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Drag & Drop : Frage zu Drop |DONE!|


kiwicht - Fr 18.04.03 11:00
Titel: Drag & Drop : Frage zu Drop |DONE!|
Hallöle...


hab mit folgender Anweisung...


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button4MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  const sc_dragmove = $f012;
begin
OldPosX := button4.Left;
OldPosY := button4.Top;

ReleaseCapture;
TWinControl(Button4).Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;


... ein Button, was ich durch die Gegend ziehen kann. Funktioniert soweit auch ganz gut.

Nun wollt ich mit jener Anweisung...


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source = Button4 then
begin
button4.Left := OldPosX;
button4.Top := OldPosY;
end;
end;


... dafür sorgen, das der Button wieder an seinen alten Ort "zurückkehrt" wenn ich ihn über dem Panel absetze.

Funktioniert leider nicht.

Kann mir einer weiterhelfen?

Vielen Dank schonma...

mfg
kiwicht


Motzi - Fr 18.04.03 12:27

Das OnDragDrop-Ereignis ist ein "VCL-DragDrop"-Ereignis (keine Ahnung wie ich das anders nennen soll), wird also vom VCL-DragDrop-Mechanismus ausgelöst. Du arbeitest jedoch mit einer Windows-Message!


ErnestoChe - Fr 18.04.03 12:49

Hi,

Einfach die Position des panels abfragen. Dann klappt beides in einer procedure.

so gehts:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Button4MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const sc_dragmove = $f012;
begin
  OldPosX := button4.Left;
  OldPosY := button4.Top;

  ReleaseCapture;
  TWinControl(Button4).Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);

  if (Button4.Left >= panel1.Left - Button4.Width) and
  (Button4.Left  <= panel1.Left + panel1.Width) and
  (Button4.Top >= panel1.Top - button4.Height) and
  (Button4.Top <= panel1.Top + panel1.Height) then
  begin
    button4.Left := OldPosX;
    button4.Top := OldPosY;
  end;

end;


MFG

- Ernesto -


kiwicht - Fr 18.04.03 14:34

jup, danke euch Beiden.

Werd den Code von Ernesto ma umsetzen...

thx & mfg