Error folgt auf DropFiles
Hallo!
Ich habe eine Liste in die ich Dateinamen einfügen kann. Das geht auf 3 verschiedene Weisen: 1) Dateinamen (Strings) aus Clipboard einfügen 2) Dateien (HDROP) per Drag&Drop einfügen 3) Dateien (HDROP) aus Clipboard einfügen 1) und 2) funktionieren einwandfrei, bei 3) bekomme ich aber häufig einen Error (OutOfMemory oder Zugriffsverletzung an einer anderen Stelle. Ich glaube beim Zeichnen des Strings ist der String ungültig, zu lang o.Ä.). Besonders wenn ich eine Datei aus dem Explorer kopiere und sie 2 Mal einfüge bekomme ich zu 95% einen Error. Die erste Datei einfügen klappt (fast?) immer und wenn ich mehrere verschiedene Dateien einfüge kommt erst bei der ~20. Datei einen Error. Das merkwürdige dabei ist, dass sich der Code von 2) und 3) kaum unterscheidet: 2) Dateien per Drag&Drop einfügen
Delphi-Quellcode:
3) Dateien aus Clipboard einfügen
procedure TFrm_ProcessFiles.ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean);
begin if Msg.message = WM_DROPFILES then begin DropFiles(Msg.wParam); end; end;
Delphi-Quellcode:
DropFiles
procedure AddParamsFromClipboard;
var hDrop: THandle; begin if IsClipboardFormatAvailable(CF_HDROP) then begin if OpenClipboard(0) then begin Try hDrop := Windows.GetClipboardData(CF_HDROP); if hDrop <> 0 then begin DropFiles(hDrop); end; Finally CloseClipboard; End; end; end; end;
Delphi-Quellcode:
Vielen Dank im Voraus!
procedure TFrm_ProcessFiles.DropFiles(hDrop: THandle);
function GetFileOrDirNames(hDrop: THandle): TDynStrArr; const DF_NUMBEROFFILES = $FFFFFFFF; var i, filesCount, fileNameLen: Integer; begin filesCount := DragQueryFile(hDrop, DF_NUMBEROFFILES, nil, 0); SetLength(Result, filesCount); for i := 0 to Pred(filesCount) do begin fileNameLen := DragQueryFile(hDrop, i, nil, 0); SetLength(Result[i], fileNameLen); {$IFDEF WIDE}DragQueryFileW{$ELSE}DragQueryFileA{$ENDIF}(hDrop, i, @Result[i][1], fileNameLen+1); end; DragFinish(hDrop); end; begin AddParams(GetFileOrDirNames(hDrop)); end; Grüße blablab |
AW: Error folgt auf DropFiles
Gerade als ich die Frage nochmal durchlas ist mir der Fehler aufgefallen:
Ich verwende beides mal
Delphi-Quellcode:
obwohl beim Kopieren aus dem Clipboard ja gar kein Drag&Drop stattfindet!
DragFinish(hDrop);
Ich habs mal kurz getestet und es scheint zu funktionieren... Trotzdem danke :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz