Thema: Delphi Problem mit Drag/Drop

Einzelnen Beitrag anzeigen

torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Problem mit Drag/Drop

  Alt 12. Feb 2004, 06:16
Hallo Leute,

sicher wird es den einen oder anderen nun etwas nerven, das diese Thema mal wieder auftaucht, aber ich habe schon wirklich viel versucht und bekomme es nicht geregelt.

Ich möchte einfach, dass mein Editor eine neue Page created und dort das File, welches über Drag und Drop ankommt läd. Das Problem ist, dass das File (oder die Pfadangabe dessen) gar nicht erst ankommt.

Folgendes habe ich gemacht.

Units shellapi ist eingetragen

Procedure ist implementiert:
Delphi-Quellcode:
  private
    { Private-Deklarationen }
    procedure WMDROPFILE(var msg: TMessage);
    procedure GetDroppedFileNames(var msg : TWMDropFiles); public

procedure TForm1.WMDROPFILE(var msg: TMessage);
var
  hDrop : Cardinal ;
  fName : array[0..MAX_PATH] of Char ;
begin
   hDrop := Msg.WParam ;
   fName := '' ;
   DragQueryFile(hDrop, 0, fName, MAX_PATH);
   ShowMessage(String(fName));
   DragFinish (hDrop);
end;


procedure TForm1.GetDroppedFileNames(var msg : TWMDropFiles);
var
sFileName : string;
dwFileCount : cardinal;
i : cardinal;
dwReqdLength : cardinal;
begin
   ShowMessage('Drop kommt an');

  // Anzahl der per Drag 'n' Drop übergebenen Dateipfade
  // Hier sollte es nur eine sein, bei mehreren würde nur
  // die letzte Datei im SynEdit Fenster stehenbleiben
  dwFileCount := DragQueryFile(msg.Drop,$FFFFFFFF,nil,0);
  for i := 0 to dwFileCount - 1 do
  begin
    // Pfadlänge ermitteln
    dwReqdLength := DragQueryFile(msg.Drop,i,nil,1);
    // Dateinamen abfragen
    sFileName := StringOfChar(#00,dwReqdLength+1);
    DragQueryFile(msg.Drop,i,PChar(sFileName),dwReqdLength+1);
    // Datei laden
    NewPage(sFileName);
    ShowMessage(sFileName);
    //SynEdit1.Lines.LoadFromFile(sFileName);
    StatusBar1.Panels[2].Text:=(sFileName);
  end;
end;
und im FormCreate dieses hier noch:
      DragAcceptFiles(self.Handle,true); Diese 2 Proceduren habe ich schon probiert. In einem anderen meiner Programme laufen sie einwandfrei, aber in diesem Fall nicht. Wie Ihr seht, habe ich in die jeweiligen proceduren schon mal eine ShowMessage eingebaut, nur um zu sehen ob denn was ankommt. Die messagebox wird nicht einmal aufgerufen. Das heisst doch, dass die procedure nicht aufgerufen wird. Aber warum nicht ???

Danke Tom
Danke
Tom
  Mit Zitat antworten Zitat