Drag & Drop (Teil 2)

Drag & Drop (Teil 2)

Im Artikel Drag Drop Teil 1 wurde das Drag & Drop-Modell von Windows vorgestellt. Es wurden auch die vom DragData-Objekt unterstützten Formate erklärt. Der heutige Artikel stellt das DragData-Objekt in den Mittelpunkt.

Wie bereits im letzten Artikel erläutert, enthält das DragData-Objekt die von der DragSource bereitgestellten Daten.

Lesen von Daten

Mit der Eigenschaft wpFormatEnum kann ermittelt werden, für welche Formate Daten vorliegen.

if (DataObject->wpFormatEnum(_WinDropDataText))
  // Daten im Text-Format vorhanden
if (DataObject->wpFormatEnum(_WinDropDataRtf))
  // Daten im RichText-Format vorhanden

Das zu prüfende Format wird hierbei in runden Klammern an die Eigenschaft übergeben. Sind Daten im angegebenen Format vorhanden, liefert die Eigenschaft den Wert true ansonsten false.

DragDataFormat

Das DragData-Objekt enthält Daten für jedes Format, dass von der DragSource angeboten wird. Die eigentlichen Daten zu einem bestimmten Format werden deshalb vom sogenannten DragDataFormat-Objekt gespeichert. Dieses wird über die Eigenschaft wpData des DragData-Objektes ermittelt. Beim Aufruf der Eigenschaft muss das Format angegeben werden. Der zurückgelieferte Deskriptor zeigt dann auf das entsprechende DragDataFormat-Objekt. Sind keine Daten in diesem Format enthalten, liefert die Eigenschaft den Wert 0.

// DragDataFormat-Objekt f. Daten im Text-Format
tDragData # aDataObject->wpData(_WinDropDataText);
// DragDataFormat-Objekt f. Daten im RichText-Format
tDragData # aDataObject->wpData(_WinDropDataRtf);

Über die Anweisung tDragData->wpData können die Daten referenziert werden.
Je nach gewähltem Format hat der zurückgegebene Wert eine andere Bedeutung.

  • _WinDropDataUser
    Die Eigenschaft enthält einen Deskriptor auf eine CTE-Liste oder einen CTE-Baum. Die in der CTE-Struktur vorhandenen Daten werden nicht interpretiert.
  • _WinDropDataFile
    Die Eigenschaft liefert einen Deskriptor auf eine CTE-Liste. Für jede Datei ist ein CteItem enthalten. Die Eigenschaft spName enthält den vollständigen Datei-Pfad inklusive Name.
  • _WinDropDataContent
    Die Eigenschaft liefert ebenfalls einen Deskriptor auf eine CTE-Liste. Die Beschreibung des Inhaltes ist in der Eigenschaft spName hinterlegt. Die Eigenschaft spID des CteItem enthält einen Deskriptor auf ein Memory-Objekt. Die dort hinterlegten Daten sind anwendungs-spezifisch.
  • _WinDropDataText und _WinDropDataRtf
    Die Eigenschaft enthält einen Deskriptor auf einen Textpuffer. Dieser kann mit den Text-Befehlen (z.B. TextLineRead()) verarbeitet werden.
Besondere Eigenschaften

Für den Austausch von Daten zwischen CONZEPT 16-Anwendungen hält das DragData-Objekt einige besondere Eigenschaften bereit. Über wpDbaName, wpDbaUserID und wpDbaUserName kann Datenbank-Pfad, Benutzer-ID sowie Benutzer-Name ermittelt werden, wenn die Daten von einer CONZEPT 16-Anwendung stammen. Die Eigenschaften werden automatisch von CONZEPT 16 gesetzt und sind nur lesbar.

Über die Eigenschaften wpName und wpCustom kann der CONZEPT 16-Entwickler frei definierbare Informationen hinterlegen. Hier kann z.B. eine Beschreibung der enthaltenen Daten erfolgen.

Erstellen von Daten

Der CONZEPT 16-Entwickler kann die vorgestellten Formate natürlich auch setzen. Dadurch ist es dann z.B. möglich, Dateien an den Windows-Explorer zu übergeben. Hier finden dieselben Eigenschaften Verwendung.

sub GenerateDragData
(
  aDataObject          : handle;
  aFileName            : alpha;
  aText                : alpha;
)
  local
  {
    tMemObj            : handle;
    tCteItem           : handle;
    tCteList           : handle;
    tDragData          : handle;
  }
{
  // Memory-Objekt erstellen
  tMemObj # MemAllocate(_MemAutoSize);
  tMemObj->spCharset # _CharsetWCP_1252;
  // Text im Windows-Zeichensatz schreiben
  tMemObj->MemWriteStr(1,aText,_CharsetC16_1252);
  // CteItem aufbereiten
  tCteItem # CteOpen(_CteItem);
  tCteItem->spName # aFileName;
  tCteItem->spID   # tMemObj;
  // CteItem in CteList einfügen
  tCteList # CteOpen(_CteList);
  tCteList->CteInsert(tCteItem);
  // Format definieren
  aDataObject->wpFormatEnum(_WinDropDataContent) # true;
  // CteList dem DragDataFormat-Objekt zuweisen
  tDragData # aDataObject->wpData(_WinDropDataContent);
  tDragData->wpData # tCteList;
}

Die Funktion generiert Daten im Format _WinDropDataContent. Sie erstellt ein CteItem dessen Eigenschaft spName den Datei-Name angibt. Die Eigenschaft spID enthält den Deskriptor auf ein Memory-Objekt, dass den Inhalt der Datei enthält.

aDataObject->GenerateDragData('TextFile.txt','Diese Datei enthält Text.');

Der Aufruf stellt die Daten im DragData-Objekt bereit.

Ausblick

In diesem Teil wurde gezeigt, wie Daten für die Übertragung mit Drag & Drop generiert werden können. Im nächsten Artikel zeige ich die Übergabe an das DropTarget.

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