Drag & Drop (Teil 3)

Drag & Drop (Teil 3)

Im Artikel Drag Drop Teil 2 wurde das DragData-Objekt erläutert. Es wurde die Funktion GenerateDragData entwickelt, die ein Memory-Objekt erstellt, welches die per Drag & Drop zu übertragenden Daten enthält. Im heutigen und letzten Teil der Artikel-Reihe wird gezeigt, wie der eigentliche Drag & Drop-Vorgang abläuft.

Mit der Windows-Anwendung Notepad lassen sich einfache Texte erstellen. Sie können eine Datei per Drag & Drop ins Notepad ziehen. Der umgekehrte Weg ist jedoch nicht möglich. Unsere Anwendung NoteDrag schafft hier Abhilfe (siehe Abb. 1).

Anwendung NoteDragAbb. 1: Anwendung NoteDrag

Die Oberfläche der Anwendung besteht lediglich aus einem Frame-Objekt, welches wiederum ein TextEdit-Objekt beinhaltet. Der dort eingegebene Text soll auf den Desktop gezogen werden können. Damit nicht jedes Mal nachgefragt werden muss, wie die zu erstellende Datei heißen soll, bekommt sie zunächst einfach den Name “unbenannt.txt”.

Drag and Drop-Aktivierung
OleDropMode-EigenschaftAbb. 2: OleDropMode

Um das TextEdit-Objekt Drag & Drop fähig zu machen, muss dessen Eigenschaft wpOleDropMode gesetzt werden. Dies kann bereits im Designer geschehen (Abb. 2). Mit der Auswahl von _WinOleSource wird das TextEdit-Objekt als DragSource gekennzeichnet. Durch betätigen der linken Maustaste bei gehaltener Strg-Taste kann dann zur Laufzeit der Drag-Vorgang gestartet werden. Das Setzen von _WinOleDynamic ist zusätzlich notwendig, da für die Generierung der zu ziehenden Daten ein Ereignis benötigt wird.

Prozedur-Erstellung

Um die Anwendung lauffähig zu machen, erstellen wir die Prozedur “NoteDrag” im Code-Editor und ergänzen diese um die Funktion “main”. Wenn Sie die Prozedur starten und in das TextEdit klicken, werden Sie jedoch feststellen, dass noch kein Ziehen des Inhaltes möglich ist.

Ereignis-Generierung

Um diesen Umstand zu ändern, muss beim TextEdit-Objekt das Ereignis EvtDragInit eingetragen werden. Das Ereignis wird dann aufgerufen, wenn der Anwender den Zieh-Vorgang mit der Maus startet. Der folgende Quelltext zeigt die Implementation.

sub EvtDragInit
(
  aEvt                 : event;    // Ereignis
  aDataObject          : handle;   // Drag-Datenobjekt
  aEffect              : int;      // Rückgabe der erlaubten Effekte
  aMouseBtn            : int;      // Verwendete Maustasten
)
: logic;
{
  aDataObject->GenerateDragData('unbenannt.txt', $Text->wpCaption);
  aEffect # _WinDropEffectMove | _WinDropEffectCopy;
  return(true);
}

Im Argument aDataObject wird das bereits behandelte DragData-Objekt übergeben. Dieses wird durch die (im letzten Artikel entwickelte) Funktion GenerateDragData mit dem Inhalt der Eigenschaft wpCaption des TextEdit-Objektes gefüllt. Das Argument aEffect muss in der Ereignis-Funktion gesetzt werden und gibt Auskunft darüber, ob der Inhalt kopiert, verschoben oder verlinkt werden darf. Wir erlauben das Kopieren (_WinDropEffectCopy) sowie das Verschieben (_WinDropEffectMove). Durch die Rückgabe von _WinDropEffectNone wird der Drag-Vorgang abgebrochen. Gleiches bewirkt die Rückgabe von false durch EvtDragInit.

Ausführung der Anwendung

Wenn Sie nun die Prozedur übersetzen und ausführen, dann können Sie durch Drag & Drop mit der linken Maustaste den Text z.B. als Datei auf dem Desktop ablegen. Die Kombination aus Strg- und Shift-Taste bestimmt, welche Operation durchgeführt werden soll:

  • Strg-Taste: Der Inhalt soll kopiert werden.
  • Shift-Taste: Der Inhalt soll verschoben werden.
  • Strg- und Shift-Taste: Der Inhalt soll verlinkt werden.

Die Durchführung der entsprechenden Operation muss von der Anwendung vorgenommen werden. Windows signalisiert dies dem Anwender nur optisch (durch die Veränderung des Mauszeigers), führt die Operation jedoch nicht aus.

Abschluss

Ich hoffe, dass ich mit dieser Artikel-Reihe einen kleinen Einblick in die Drag & Drop-Thematik geben konnte.

Download

NoteDrag-Beispiel NoteDrag.zip (1.62 KB)
Sie müssen angemeldet sein, um die Datei herunterladen zu können.

Klicken Sie hier, um die Nutzungsbedingungen für unseren Blog zu lesen.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Leave the field below empty!

Wünsche, Fragen oder Feedback sind willkommen:

Nutzungsbedingungen der Kommentarfunktion im Blog

1. Allgemeines

Vectorsoft AG („Anbieter“) stellt für Internetnutzer („Nutzer“) auf der Website
vectorsoft.de einen öffentlichen Blog bereit. Der öffentliche Blog dient dem
Informations- und Gedankenaustausch. Die Nutzer, welche sich mit Beiträgen und
Kommentaren beteiligen, verpflichten sich dazu, die Blog-Nutzungsbedingungen
einzuhalten und tragen die Verantwortung für die Richtigkeit und Angemessenheit
sowie Freiheit von Rechtsverletzungen ihrer Beiträge. Mit Nutzung der
Kommentarfunktion in unserem Blog akzeptieren Sie diese Nutzungsbedingungen.

2. Netiquette

Wir bitten Sie von persönlichen Angriffen und Provokationen aufgrund anderer
Meinungen abzusehen. Bitte argumentieren Sie sachlich und bewegen Sie sich auf
der Basis einer konstruktiven Diskussionskultur. Ihr Kommentar sollte stets im
Zusammenhang mit dem jeweiligen Thema sein, um Ausschweifungen in andere
Themenbereiche zu vermeiden. Das mehrmalige Posten desselben Kommentars
oder mehrerer ähnlicher Kommentare ist nicht erlaubt.

3. Verbot rechtswidriger Inhalte

Mit Absenden Ihres Kommentars bestätigen Sie, dass Sie keine Urheberrechte oder andere Rechte Dritter verletzen. Volksverhetzende, rassistische Äußerungen, Anleitungen zu Straftaten und deren Verherrlichung, Gewaltdarstellungen, pornografische Inhalte und Äußerungen, die Persönlichkeitsrechte verletzen sind untersagt.

4. Keine Werbung

Die Nutzung der Kommentarfunktion ist für kommerzielle oder parteipolitische
Zwecke nicht erlaubt. Werbliche Beiträge aller Art werden von uns umgehend
gelöscht.

5. Angaben zum Namen

Bei der Eingabe Ihres Namens achten Sie auf die zuvor genannten Grundsätze.

6. Quellenangaben

Bitte geben Sie bei der beabsichtigten Veröffentlichung von Zitaten oder Beiträgen
Dritter die jeweiligen Quellen an und erläutern dessen Bezug zum Blogbeitrag.

7. Verstoß gegen die Nutzungsbedingungen

Beiträge, die gegen diese Richtlinie verstoßen werden umgehend gelöscht. Sollten
Sie selbst Verstöße bemerken, so senden Sie uns bitte den Link des betreffenden
Kommentars per E-Mail an . Wir weisen ausdrücklich daraufhin, dass wir einzelne Nutzer bei wiederholten oder schweren Verstößen gegen diese
Nutzungsbedingungen ausschließen werden.

Stand: Sept. 2024

Deine Trial Version - jetzt anfordern!

Teste yeet - unverbindlich und kostenfrei

IHRE EVALUIERUNGSLIZENZ - JETZT ANFORDERN!

TESTEN SIE DIE CONZEPT 16 VOLLVERSION - UNVERBINDLICH und KOSTENFREI

Melden Sie sich bei unserem Newsletter an

Anrede*
     
Zustimmung zur Datenverarbeitung gem. DSGVO*



WordPress Cookie-Hinweis von Real Cookie Banner