![]() |
Komponenten zur Laufzeit im Raster verschieben
Hallo,
ich kann meine Komponenten auf meiner Form zur Laufzeit verschieben. Wie kann ich diese im Raster verschieben? z.b. Raster von 8 Pixel MFG Christian18 |
Re: Komponenten zur Laufzeit im Raster verschieben
Delphi-Quellcode:
meinst du so etwas :gruebel:
procedure Verschieben(var KomponenteXYZ:TObject; const XVerschiebefaktor,YVerschiebefaktor:Integer);
begin //Edit: kleiner Zusatz, vielleicht meintest du ja sowas: KomponenteXYZ.Left := KomponenteXYZ.Left div 8 * 8; KomponenteXYZ.Top := KomponenteXYZ.Top div 8 * 8; //^^^^^^^^^^^^ KomponenteXYZ.Left := KomponenteXYZ.Left + 8 * XVerschiebefaktor; KomponenteXYZ.Top := KomponenteXYZ.Top + 8 * YVerschiebefaktor; end; Ist doch ne ganz normale Verschiebung :| Edit: Der Zusatz lässt deine Komponente eben noch am Raster einrasten, aber sonst is da nicht viel dran :mrgreen: mfG, dajuhsa |
Re: Komponenten zur Laufzeit im Raster verschieben
Hallo,
ich meine das eher so wie man das auch in der Delphi IDE machen kann. hier mein code, den ich so aus dem Internet übernommen habe (von den Schweizern): und da will ich jetzt sowas einbauen, dass ich die Komponenten nicht pixelweise verschiebe, sondern immer gleich um 8 Pixel. Wie in Delphi halt auch.
Delphi-Quellcode:
type
TMoveCracker = class(TControl); procedure TForm1.ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FDownX := X; FDownY := Y; FDragging := True; TMoveCracker(Sender).MouseCapture := True; end; procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if FDragging then with Sender as TControl do begin Left := X - FDownX + Left; Top := Y - FDownY + Top; end; end; procedure TForm1.ControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if FDragging then begin FDragging := False; TMoveCracker(Sender).MouseCapture := False; end; end; |
Re: Komponenten zur Laufzeit im Raster verschieben
da hast du doch deinen code schon^^ du musst halt nur
Delphi-Quellcode:
schreiben, oder nicht :mrgreen:
Left := {8 *} X - FDownX + Left;
Top := {8 *} Y - FDownY + Top; |
Re: Komponenten zur Laufzeit im Raster verschieben
Probiers mal damit, so hab ichs vor nem halben Jahr gemacht:
Delphi-Quellcode:
Mfg
//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; PS.: Gefrohte Ostern :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz