Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Formweites Drag & Drop (https://www.delphipraxis.net/175212-formweites-drag-drop.html)

Guido R. 6. Jun 2013 14:22

Formweites Drag & Drop
 
Hallo !

Gibt's eine Möglichkeit, dass die Form das Drag&Drop-Handling für alle Komponenten übernehmen zu lassen, ähnlich wie man mit "KeyPreview" dafür sorgen kann, dass die Form alle Keyboardeingaben überprüft?
Ich würde mir gerne ersparen bei zig Edits, Labels, etc. pro Form die selbe OnDragDrop und OnDragOver einzustellen. Wenn man mal eine vergisst sieht's irgenwie komisch aus.

Danke

Guido R.

lbccaleb 6. Jun 2013 14:36

AW: Formweites Drag & Drop
 
RegisterDragDrop auf das Form Handle anwenden.

sx2008 6. Jun 2013 15:03

AW: Formweites Drag & Drop
 
Es gibt zwei verschiedene Arten von Drag & Drop:
1.) zwischen Delphi-Controls innerhalb der Anwendung
2.) aus dem Explorer in die Anwendung (Drag & Drop von Files und anderen Shell-Objekten)
auch die umgekehrte Richtung ist möglich

Bei 2.) ist es eh so, dass man das Formular als Drop-Ziel registriert (siehe Beitrag #2)
Bei 1.) ist es so, dass es keinen Sinn ergibt jedes beliebige Control per Drag & Drop auf ein anderes Control ziehen zu können.
Das Event OnDragDrop muss sowie immer individuell auf die jeweilige Absicht ausprogrammiert werden.

Man könnte natürlich eine Hilfsfunktion schreiben:
Delphi-Quellcode:
procedure SetOnDragOverEvent(ondragover:TDragOverEvent; controlarray:array of TControl);
var
  i : Integer;
begin
  for i:= Low(controlarray) to High(controlarray) do
  begin
    if Assigned(controlarray[i]) the
      controlarray[i].OnDragOver := ondragover;
  end;
end;

SetOnDragOverEvent(self.MyDragOver, [Edit1, Edit2, Memo1]);
Man kann die Funktion auch rekursiv auslegen und so z.B. allen Controls die in einem Panel liegen das Event zuweisen.

Guido R. 6. Jun 2013 21:03

AW: Formweites Drag & Drop
 
0K. Werden wir mal etwas konkreter.
Man nehme ein MDI-Programm zur Rechnungserstellung. In eine Rechnung werden Daten aus einer Kundenliste und einer Artikelliste übernommen. Diese Daten werden in eigenen MDI-Children jeweils in DB-Grids angezeigt. Nur diese Daten sollen vom RechnungsEditor per D&D akzeptiert werden, Dann ist es völlig egal, ob ich Kundendaten über die Rechnungspositionen oder Artikel über die Adressfelder droppe. Anhand der Quelle weiß das Programm um welche Daten es sich handelt und wo diese folglich hingehören.
Die Frage ist jetzt: Muß ich jedes OnDragOver und OnDragDrop -Event eines jeden Controls mit den D&D-Funktionen der Form verknüpfen, oder gibt es eine Möglichkeit festzulegen, daß egal wo auf dieser Form mit all seinen Controls geDragt und geDropt wird stets die Methoden der Form genommen werden sollen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:41 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