Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
Delphi 7 Enterprise
|
Re: Komponenten zur Laufzeit im Raster verschieben
22. Mär 2008, 18:00
Probiers mal damit, so hab ichs vor nem halben Jahr gemacht:
Delphi-Quellcode:
//uses TypInfo
Procedure Verschieben(Sender:TObject; X, Y:Integer; Raster:Integer=8);
Var Pt : TPoint;
Info : PPropInfo;
begin
Info := GetPropInfo(Sender, 'Top');
if (Assigned(Info)) then
//Nur ausführen, wenn das Objekt die Eigenschaft 'Top' und damit auch Left, Height & Width hat
begin
GetCursorPos(Pt);
//Cursorposition ermitteln
Pt := Form1.ScreenToClient(Pt);
//Cursorposition innerhalb der Form ermitteln
Pt:=Point(Pt.X-GetOrdProp(Sender,'Width') shr 1, Pt.Y-GetOrdProp(Sender,'Height') shr 1);
//Cursorposition auf die Mitte des Objektes setzen
if (frac(Pt.X / Raster)=0) then
//falls X durch Raster eine Ganzzahl ist..
SetOrdProp(Sender,'Left',Pt.X);
//..Objekt auf X setzen
if (frac(Pt.Y / Raster)=0) then
//falls Y durch Raster eine Ganzzahl ist..
SetOrdProp(Sender,'Top',Pt.Y);
//..Objekt auf Y setzen
end;
end;
//Aufruf:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssleft in Shift then Verschieben(Panel1,X,Y);
end;
//Oder mit anderem Raster:
procedure TForm1.RadioButton1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if ssleft in Shift then Verschieben(Radiobutton1,X,Y,20);
end;
Mfg
PS.: Gefrohte Ostern
Robert L. Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!
Paradox
|
|
Zitat
|