Servus,
eine Frage: sind eigentlich Probleme von TShellDropper unter Windows 8.1 bekannt? Ich verwende die Komponente und bis Windows 8 läuft alles glatt und ich kann Dateien vom Explorer auf meine Anwendung ziehen, aber unter Windows 8.1 enthält die Fileliste zwar den richtigen Dateinamen, aber einen falschen Pfad?!
So verwende ich den Shelldropper:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
lDropControl: TDropControl;
begin
Si.Connections := 'file(filename=log.sil)';
si.Enabled := true;
// Via ShellDropper
FDropTarget := TShellDropper.Create(self);
FDropTarget.OnDragEnter := HandleExternalDragDropEnter;
FDropTarget.OnDrop := HandleExternalDragDrop;
lDropControl := TDropControl.Create(FDropTarget.Controls);
lDropControl.Control := self;
lDropControl.Enabled := true;
end;
und in HandleExternalDragDropEnter wird geprüft, ob die Dragoperation angenommen werden soll (ja, wenn die Datei existiert und der Typ stimmt):
Delphi-Quellcode:
procedure TForm1.HandleExternalDragDropEnter(Sender: TObject; const DropRec: TDropRec;
var Accept: Boolean);
var
i: Integer;
nFileExtType, nFileType: TIOFileType;
strExt: string;
strFilename: string;
begin
// Erst einmal nichts zulassen
Accept := False;
memResult.Lines.Add(Format('# Files: %d', [DropRec.Files.Count]));
// Nun Test auf Dateien
for i := 0 to DropRec.Files.Count - 1 do
begin
strFilename := DropRec.Files[i];
memResult.Lines.Add(strFilename);
if FileExists(strFilename) then
begin
// Abhängig vom Format der Datei diese akzeptieren
strExt := ExtractFileExt(strFilename);
nFileExtType := IEExtToFileFormat(strExt);
nFileType := FindFileFormat(strFilename);
// PDF akzeptieren oder Grafiken, wenn bereits ein Dokument geladen ist)
Accept := Accept or (nFileExtType = ioPDF) or ((nFileType <> ioUnknown) );
if Accept then
memResult.Lines.Add('Accepted')
else
memResult.Lines.Add('Not accepted')
end
else
memResult.Lines.Add('File not available');
end;
end;
Hier bekomme ich nun immer gemeldet, daß die Datei nicht vorhanden wäre. Ist sie auch nicht, denn DropRec.Files[i] enthält nun zwar den richtigen Dateinamen, als Pfad wird aber immer das TEMP Verzeichnis des Benutzers verwendet:
d:\data\testfile.txt --> DropRec.Files[0] = %TEMP%\testfile.txt
Wie gesagt, das passiert nur unter Windows 8.1! Kennt da jemand zufällig die Ursache? Bzw. wie man das beheben kann?
Danke, Uli