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 drag & drop zwischen zwei delphi5-anwendungen (https://www.delphipraxis.net/48633-drag-drop-zwischen-zwei-delphi5-anwendungen.html)

GJungbuth 28. Jun 2005 11:36


drag & drop zwischen zwei delphi5-anwendungen
 
moin gemeinde,
habe viele (alle) beiträge zu drag&drop gelesen.
leider hilft mir keiner weiter.
auch http://www.swissdelphicenter.ch/de/showcode.php?id=1627
funktioniert in meinem fall NICHT. das DragOver-event wird nicht gefeuert, wenn ich aus einer delphi-anwendung einen eintrag aus einem treeview über die zweite anwendung drag.

ich möchte aus ein TreeView1 der ersten anwendung auf ein irgendein control der zweiten anwendung dropen. in der zweiten anwendung brauche ich zugriff auf TreeView1.Selected.Data der ersten anwendung.

wie kann ich das anstellen?

shmia 28. Jun 2005 12:56

Re: drag & drop zwischen zwei delphi5-anwendungen
 
Zitat:

Zitat von GJungbuth
auch http://www.swissdelphicenter.ch/de/showcode.php?id=1627
funktioniert in meinem fall NICHT. das DragOver-event wird nicht gefeuert, wenn ich aus einer delphi-anwendung einen eintrag aus einem treeview über die zweite anwendung drag.

Ein Treeview ist ein WinControl und hat somit ein eigenes Window-Handle.
Mit dem Beispielcode von oben kannst du so zwar auf dem Formular droppen, aber nicht auf dem TreeView.
Deshalb:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  OleInitialize(nil);
  {Allow window to accept drop events}
  OleCheck(RegisterDragDrop(Handle, Self));
 
  // Handle des TreeView registrieren
  OleCheck(RegisterDragDrop(TreeView1.Handle, Self));
end;
Aber Obacht!! Zum Zeitpunkt von OnCreate gibt es das Handle des TreeView evtl. noch nicht.
Dann müsste RegisterDragDrop später in OnShow (oder noch später) ausgeführt werden.
RevokeDragDrop muss auch aufgerufen werden - is klar.

GJungbuth 28. Jun 2005 13:29

Re: drag & drop zwischen zwei delphi5-anwendungen
 
moin shmia,

Zitat:

Zitat von shmia
...
Ein Treeview ist ein WinControl und hat somit ein eigenes Window-Handle.
Mit dem Beispielcode von oben kannst du so zwar auf dem Formular droppen, aber nicht auf dem TreeView.
Deshalb:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  OleInitialize(nil);
  {Allow window to accept drop events}
  OleCheck(RegisterDragDrop(Handle, Self));
 
  // Handle des TreeView registrieren
  OleCheck(RegisterDragDrop(TreeView1.Handle, Self));
end;
Aber Obacht!! Zum Zeitpunkt von OnCreate gibt es das Handle des TreeView evtl. noch nicht.
Dann müsste RegisterDragDrop später in OnShow (oder noch später) ausgeführt werden.
RevokeDragDrop muss auch aufgerufen werden - is klar.

danke für deine antwort.
aber wie ich bereits oben geschrieben habe, möchte ich nicht in den tree droppen, sonder aus dem tree einen node in ein anderes programm draggen.

shmia 28. Jun 2005 14:03

Re: drag & drop zwischen zwei delphi5-anwendungen
 
Zitat:

Zitat von GJungbuth
aber wie ich bereits oben geschrieben habe, möchte ich nicht in den tree droppen, sonder aus dem tree einen node in ein anderes programm draggen.

Ja, ich habe bisher nur etwas zur Zielanwendung geschrieben.
Die Quellanwendung muss das Interface IDragSource implementieren.
Dazu gibt es auf swissdelphicenter.ch ein Beispiel:
http://www.swissdelphicenter.ch/de/showcode.php?id=2335
In diesem Beispiel erzeugt die Funktion GetFileListDataObject ein Objekt vom Typ IDataObject.
In deinem Fall muss IDataObject anderst erzeugt werden.
Bei Google suchenIDataObject AND delphi
Interessant: http://www.grahamwideman.com/gw/tech...DropTheory.htm

madina 7. Nov 2005 09:16

Re: drag & drop zwischen zwei delphi5-anwendungen
 
Hallo

welchen Libraray muß ich einbinden, weil mein Delphi mekert bei OleInitialize(nil);

{Allow window to accept drop events}
OleCheck(RegisterDragDrop(Handle, Self));

// Handle des TreeView registrieren
OleCheck(RegisterDragDrop(TreeView1.Handle, Self));

mfg

semo 15. Okt 2006 19:20

Re: drag & drop zwischen zwei delphi5-anwendungen
 
Zitat:

The OleInitialize function initializes the OLE library. You must initialize the library before you can call OLE functions.

HRESULT OleInitialize(

LPVOID pvReserved //Reserved, must be NULL
);
Parameter

pvReserved

In 32-bit OLE, this parameter must be NULL. The 32-bit version of OLE does not support applications replacing OLE's allocator and if the parameter is not NULL, OleInitialize returns E_INVALIDARG.

Return Values

S_OK

Indicates the library was initialized successfully.

S_FALSE

Indicates OLE library is already initialized; a pointer to the IMalloc implementation was not used.

OLE_E_WRONGCOMPOBJ

Indicates COMPOBJ.DLL is the wrong version for OLE2.DLL.

E_OUTOFMEMORY

Indicates the library was not initialized because the system was out of memory.

E_INVALIDARG

Indicates an argument was invalid.

E_UNEXPECTED

Indicates an unexpected error occurred.

Comments

Applications must call OleInitialize before calling any other function in the OLE library.
Typically, OleInitialize is called only once in the process that uses the OLE library. There can be multiple calls, but subsequent calls return S_FALSE. To close the library gracefully, each successful call to OleInitialize, including those that return S_FALSE, must be balanced by a corresponding call to the OleUninitialize function.

See Also

OleUninitialize, CoInitialize


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