AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Designer Programmierung, Felder verschieben

Ein Thema von Freiwilderer · begonnen am 16. Jun 2009 · letzter Beitrag vom 18. Jun 2009
Antwort Antwort
Freiwilderer

Registriert seit: 26. Mai 2009
163 Beiträge
 
Delphi 7 Enterprise
 
#1

Designer Programmierung, Felder verschieben

  Alt 16. Jun 2009, 15:48
Hi
und zwar schreibe ich momentan einen einfachen Designer für Masken.
Man wird TLables, TMaskEdits und TCheckboxes anglegen können (das funktioniert auch schon).
Außerdem kann man die Felder per positionsangaben an fixe stellen auf der Maske verschieben und morgen werde ich noch das Verschieben mit Strg+Pfeiltasten umsetzen.
Was auch schon geht, allerdings nicht so, wie ich es gerne hätte, und da kommen wir zu meiner eigentlichen Frage ist das verschieben per Drag and Drop, also per Maus.

über diese netten Zeilen kann ich die Felder nach belieben verschieben:
Delphi-Quellcode:
procedure TfrmMain.Felderverschieben(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   if (Button = mbLeft) and (MaskDesign = True)then
    begin
     ReleaseCapture;
     TControl(Sender).Perform(wm_SysCommand, sc_Size or 1, 0);
    end;
end;
Felderverschieben ist dabei einfach die Procedure, die ich den während der Laufzeit zugeordneten Feldern unter MouseDown zuordne.

Da das so allerdings realtiv unsauber ist, das ich die Felder pixelweise verschieben kann, würde ich gerne eine Art Raster festlegen können.
Das heißt ich drücke auf einen knopf, um das Raster zu aktivieren und fortan kann ich die felder nur noch in 5-pixel schritten verschieben.

hat jemand ne idee, wie man das umsetzen könnte ? gibt es vielleicht sogar einen Parameter, den ich der wm_SysCommand funktion zuordnen kann ?

würde mich über anregungen und lösungsvorschläge sehr freuen,

mit freundlichen Grüßen

Freiwilderer
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#2

Re: Designer Programmierung, Felder verschieben

  Alt 16. Jun 2009, 16:21
Hallo,
ob Du die Raster-Parameter an Sys-Command übergeben kannst, weiß ich nicht,
ich habe mir für so etwas ein array von TPoint angelegt und die Positionen
eines (virtuellen) Rasters gespeichert.
Beim loslassen der gezogenen Elemente habe ich dann per Schleifen den
nächstgelegenen TPoint gesucht (z.B. mit einer Toleranz von 2 Pixeln, wenn
das Raster 8 Pixel beträgt) und lasse dann das Element am TPoint "einrasten".
Ist vielleicht nicht die beste Lösung, aber funktioniert.

Hab' mal 'ne Unit als Beispiel angehangen, im Ereignis > W2MouseUp(.....
wird ein Spielstein an einer Spielfläche "eingerastet".
Angehängte Dateien
Dateityp: pas unit1_113.pas (5,5 KB, 7x aufgerufen)
Markus H.
  Mit Zitat antworten Zitat
Freiwilderer

Registriert seit: 26. Mai 2009
163 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Designer Programmierung, Felder verschieben

  Alt 16. Jun 2009, 18:53
hi,
das mit dem einrasten hab ich kurz vor feierabend auch noch gemacht ... aber das gefällt mir persönlich gar nicht ...
am liebsten wärs mir, wenn das feld während des bewegens schon über das raster "springen" würde

trotzdem vielen Dank für deinen Lösungsansatz

mfg
  Mit Zitat antworten Zitat
Freiwilderer

Registriert seit: 26. Mai 2009
163 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Designer Programmierung, Felder verschieben

  Alt 18. Jun 2009, 09:30
hi,
also ich habs jetzt anders gelöst, is allerdings etwas umständlicher
im prinzip setze ich den Mauszeiger beim Klicken in das zu verschiebene Feld in die Mitte des Feldes.
(MouseDown)
dann speichere ich die Position des cursers in eine TPoint variable.

im onMouseMove frage ich dann in 4 if Abfragen ab, ob die aktuelle curser position mehr als 5 pixel von der gespeicherten entfernt ist (natürlich für x und y einzeln), setzte dann das feld 5 pixel in die eine oder andere richtung und setze auch den TPoint wert auf die neue koordinate.
Das funktioniert nun genau so, wie ich mir das vorgestellt hatte

falls jemand den quellcode haben will, bitte mail an freiwilderer@gmx.de ... das is zu kompliziert zum posten hier und ich weiß, wie ärgerlich es ist, wenn man zwar ein thema findet, welches zum eigenen problem passt, aber keine lösung drin steht, sondern nur, jetzt läufts ;D

mfg
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Designer Programmierung, Felder verschieben

  Alt 18. Jun 2009, 09:58
Hallo,

also ich habe folgendes benutzt,
um ein Form zu verschieben.

Delphi-Quellcode:
procedure TForm_About.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  Perform(WM_SYSCOMMAND, SC_MOVE + 1, 2);
end;
Wie das mit Raster gehen soll, wüsste ich jetzt aber auch nicht ...


Heiko
Heiko
  Mit Zitat antworten Zitat
Freiwilderer

Registriert seit: 26. Mai 2009
163 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Designer Programmierung, Felder verschieben

  Alt 18. Jun 2009, 10:43
hi
wie gesagt, das verschieben war ja nich das problem
mit der funktion, wie du sie beschrieben hast, hatte ich es am anfang umgesetzt, aber finde das mit dem raster schon schöner, habe jetzt einen schalter eingebaut, mit dem man das raster an und abschalten kann, für die feinjustierung kann man mit STRG + Pfeiltasten die Positionen pixelweise verändern, mit shift + pfeiltasten die größe. im grunde genau so, wie in delphi selbst, nur, dass man in delphi das raster glaub ich nich abschalten kann ;D

bis dann

mfg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz