Einzelnen Beitrag anzeigen

Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: ListView Drag&Drop in externe Programme

  Alt 14. Okt 2004, 08:42
Hallo Sven,

ich hatte vor einiger Zeit ein ähnliches Problem.
Soweit ich mich erinnere, ist das D&D mit fremden Applikationen
nicht ganz so easy wie mit delphieigenen Komponenten ...
Daher habe mir (mit Hilfe von NG- und Forenbeispielen) eine
eigene Lösung zusammengestoppelt:

Delphi-Quellcode:
  PRIVATE
    PROCEDURE WMDropFiles(VAR Msg: TMessage); MESSAGE WM_DROPFILES;
Delphi-Quellcode:
{******************************************************************************}
PROCEDURE TfMain.WMDropFiles(VAR Msg: TMessage);
{******************************************************************************}
// Eigene D&D Routine zwischen 2 Edits und den Exploren!
// Anwendung: Eine Datei wird per Drag&Drop vom M$-Explorer zu einem der
// beiden TEdits (ed_CMP_L, ed_CMP_R) übertragen. In
// dem Ziel-TEdit steht dar komplette Filepfad+FileName
//
VAR
  NumFiles, NameLength, Idx : Integer;
  Buf : ARRAY[0..255] OF Char;
  hDrop : THandle;
  MausPos : TPoint;
  aEdit : TEdit;
BEGIN
  GetCursorPos(MausPos);
  IF (FindDragTarget(MausPos, FALSE) IS TEdit) THEN
    BEGIN
      IF ((FindDragTarget(MausPos, FALSE) AS TEdit).Name = 'ed_CMP_L') THEN
        aEdit := ed_CMP_L
      ELSE IF ((FindDragTarget(MausPos, FALSE) AS TEdit).Name = 'ed_CMP_R') THEN
        aEdit := ed_CMP_R
      ELSE
        Exit;
      aEdit.Clear;
      hDrop := Msg.wParam;
      NumFiles := DragQueryFile(Msg.wParam, $FFFFFFFF, NIL, 0);
      FOR Idx := 0 TO NumFiles - 1 DO
        BEGIN
          NameLength := DragQueryFile(Msg.wParam, Idx, NIL, 0);
          DragQueryFile(Msg.wParam, Idx, Buf, NameLength + 1);
          aEdit.Text := (StrPas(Buf));
        END;
      DragFinish(hDrop);
    END;
END;

Delphi-Quellcode:
{******************************************************************************}
PROCEDURE TfMain.FormShow(Sender: TObject);
{******************************************************************************}
BEGIN
  [...]
  DragAcceptFiles(Handle, True);
END;
Delphi-Quellcode:
{******************************************************************************}
PROCEDURE TfMain.FormDestroy(Sender: TObject);
{******************************************************************************}
BEGIN
  [...]
  DragAcceptFiles(Handle, False);
END;
Ich hoffe dieser Ansatz hilft Dir weiter.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat