![]() |
Komponenten verschiebbar / Größe veränderbar
hab jetzt im forum herumgesucht, aber nichts gefunden:
wie schaffe ich es, dass ich zB auf einem panel objekte erstelle die der benutzer dann verschieben und vergrössern kann, wie er will? Drag and Drop scheint nicht zu gehen und Docking hat das problem, dass man damit das item rausziehen kann... Was ich will: ein programm machen, welches verschiedene bilder dynamisch anzeigen und verschieben lassen kann: d.h. image objekte auf einem panel, die man herumschieben oder vergrössern kann bzw. (durch CreateNew) neue hinzufügen kann usw. |
Re: Komponenten verschiebbar / Größe veränderbar
Das verschieben funktioniert mit Drag & Drop ganz gut. Setze DragMode bei deinen Objekten auf dmAutomatic.
In den OnDragOver-des Objektes und der Panele musst du die Koordinaten des gezogenen Objektes umsetzen. Wichtig ist in diesen Ereignissen ein
Delphi-Quellcode:
Das Vergrössern hab ich so gelöst:
Accept := true;
bei Rechtsclick auf das Objekt wird
Delphi-Quellcode:
damit das Objekt nicht gleich gezogen wird. Du brauchst noch irgendwelche Anker auf deinem Objekt (so wie im Word die kleinen Vierecke). Wenn der Mauszeiger draufsteht und die zu ziehen beginnst, einfach Position und Größe ändern.
DragMode := dmManual;
hab grad keinen Source dabei deswegen kann ich dir gerade nicht mehr sagen. Hoffe das hilft dir. grüße, daniel |
Re: Komponenten verschiebbar / Größe veränderbar
Liste der Anhänge anzeigen (Anzahl: 1)
Hab als Anhang ne unit mit nem TObject drin mit dem es möglich ist ein TImage zu verschieben bzw die größe zu ändern... Kann ohne Probleme auf Andere Komponenten wie TButton geändert werden..
|
Re: Komponenten verschiebbar / Größe veränderbar
das mit dem Dragging habe ich so gelöst:
Delphi-Quellcode:
Problem: wenn ich das bild nun verschieben will und es liegt ein anderes objekt auf dem panel, bekommt mein panel nicht die drag anweisung...
procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); VAR S: TControl; begin Accept:=TRUE; S:=Source as TControl; S.Left:=X; S.Top:=Y; end; kann ich irgendwie die drag anweisung für die anderen objekte (zB das gedraggte bild selbst) verändern, oder muss ich nun bei dem bildobjekt ebenfalls ein OnDrag erstellen, welches es an das panel weiterleitet? [edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit] |
Re: Komponenten verschiebbar / Größe veränderbar
habe das nun gelöst indem ich
Delphi-Quellcode:
bei den objekten verwende. ist sicher nicht hübsch, erfüllt aber den zweck.
procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); VAR S: TControl; begin Accept:=TRUE; S:=Source as TControl; with Sender as TControl do begin S.Left:=Left+X; S.Top:=Top+Y; end; end; wenn wer was besseres hat, gerne! danke für das resize-ding! echt cool. [edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit] |
Re: Komponenten verschiebbar / Größe veränderbar
Neues Problem, in Relation zu DragOver, ich weiss nicht ob ich da extra ein neues Thread starten soll, womöglich wenn hier keiner antwortet :D
Bei einem DragOver fängt er meine MouseDown routinen nicht mehr ab. das finde ich aber jammerschade ich habe versucht in einem mousedown die cursorposition des mauszeigers zu merken um die items "relativ" verschieben zu können. sonst rutscht das bild - wenn ich die bisherigen funktionen verwende sofort mit Left,Top an den Ort des Mauszeigers. Aber das verschieben soll natürlich anders sein! hmm... muss da noch dran feilen, aber kann man irgendwie bewirken, dass er mousedown wichtiger nimmt? |
Re: Komponenten verschiebbar / Größe veränderbar
Mein Vorschlag (bin mir nicht sicher ob es funktioniert):
Im DragOver der Objektes fragst du ab:
Delphi-Quellcode:
Altx und Alty müssen Membervariablen des Objektes sein.
if Source = self then begin
if State = dsDragEnter then begin altx := x; alty := y; end else if state = dsDragMove then begin self.Left := self.Left + x - altX; self.Top := self.Top + y - alty; end; end; Sollte so funktionieren, wenn ich mich nicht irre. Schönen Tag noch |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 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