AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Error folgt auf DropFiles

Ein Thema von blablab · begonnen am 30. Mär 2015 · letzter Beitrag vom 30. Mär 2015
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Error folgt auf DropFiles

  Alt 30. Mär 2015, 20:07
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:
procedure TFrm_ProcessFiles.ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean);
begin
   if Msg.message = WM_DROPFILES then begin
      DropFiles(Msg.wParam);
   end;
end;
3) Dateien aus Clipboard einfügen
Delphi-Quellcode:
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;
DropFiles
Delphi-Quellcode:
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;
Vielen Dank im Voraus!

Grüße
blablab
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Error folgt auf DropFiles

  Alt 30. Mär 2015, 20:11
Gerade als ich die Frage nochmal durchlas ist mir der Fehler aufgefallen:

Ich verwende beides mal DragFinish(hDrop); obwohl beim Kopieren aus dem Clipboard ja gar kein Drag&Drop stattfindet!

Ich habs mal kurz getestet und es scheint zu funktionieren...

Trotzdem danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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