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