Autor Beitrag
aaaaa
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 05.06.04 10:30 
hallo!

ich möchte ein shape auf der form verschieben. mit drag habe ich das jetzt ungefähr hinbekommen, aber ich will, dass sich das shape unter dem mauszeiger mitbewegt / an ihm verankert ist, und nicht erst bei onmouseup verschoben wird!
muss man dann eventuell mit mousemove arbeiten und nicht mit drag?

mein code für normales drag:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
accept := Source is TShape;
end;

procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
 if (Sender is TForm) and (Source is TShape) then 
  begin 
    with Sender as TForm do 
    begin 
      shape1.Left := X-25;
      shape1.Top := Y-25;
    end
  end;
end;


durch die -25 bei den koordinaten wird das shape (quadrat 50*50) in der mitte 'angefasst', und nicht links oben. das würde ich gern auch noch so ändern, dass das shape da angefasst bleibt, wo man mit der maus draufklickt.


bin für jede hilfe dankbar,
mfg aaaaa

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconTino: Titel geändert.
Moritz M.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1672



BeitragVerfasst: Di 08.06.04 21:43 
Hallo

Du könntest auf das
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
WMNCHitTest (var M: TWMNCHitTest);
begin
  inherited;
  if M.Result = htClient then M.Result := htCaption;
end;

Ereignis reagieren. Bei eines normalen Fenster funktioniert dass, aber im Prinzip sind diese Teile ja auch Fenster.

Gruß
teebee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 109


D6 Prof
BeitragVerfasst: Mi 09.06.04 09:52 
Probier's mal so:
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:
Var Drag: Boolean;
    StartX, StartY: Integer;

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 If Drag Then Begin
  Shape1.Top := Shape1.Top+Y-StartY;
  Shape1.Left := Shape1.Left+X-StartX;
 End;
end;

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Drag := True;
 StartX := x;
 StartY := y;
end;

procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Drag := False;
end;
Wenn Du 'Doublebuffered' der Form auf True setzst, hält sich auch das Flackern in Grenzen...

Gruß, teebee