Einzelnen Beitrag anzeigen

Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Komponenten zur Laufzeit im Raster verschieben

  Alt 22. Mär 2008, 17: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
  Mit Zitat antworten Zitat