AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein erkennen ob Verzeichnis oder Datei bei dragover

erkennen ob Verzeichnis oder Datei bei dragover

Ein Thema von alfold · begonnen am 13. Nov 2015 · letzter Beitrag vom 16. Nov 2015
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#1

AW: erkennen ob Verzeichnis oder Datei bei dragover

  Alt 15. Nov 2015, 19:09
Hallo,

ich stand mal vor einem ähnlichen Problem
Ich wollte/musste rausfinden, ob via Drag&Drop eine Datei oder ein Pfad in ein Edit gezogen wird.

Hab dann das hier gefunden.

Hab´s dann für mich so geändert:
Delphi-Quellcode:
procedure TMainForm.ApplicationEventsMessage(var Msg: tagMSG;
  var Handled: Boolean);
const
  BufferLaenge = 255;

var
  i: Integer;
  Anzahl_Dateien: Integer;

  Dropped_Dateiname: array[0..BufferLaenge] of Char;

begin
//www.delphipraxis.net/1005177-post2.html

  If Msg.message = WM_DROPFILES then
    begin
      Anzahl_Dateien := DragQueryFile(Msg.wParam, Cardinal(-1), nil, 0);

      try
        for i := 0 to Pred(Anzahl_Dateien) do
          begin
            DragQueryFile(Msg.wParam, i, @Dropped_Dateiname, BufferLaenge);

            If Msg.hwnd = LabeledButtonEdit_NCUpgrade.Handle then
              begin

                If FileType(PChar(@Dropped_Dateiname)) = FT_File then
                  LabeledButtonEdit_NCUpgrade.Text := PChar(@Dropped_Dateiname);
              end;

            If Msg.hwnd = LabeledButtonEdit_Ablagepfad.Handle then
              begin
                If FileType(PChar(@Dropped_Dateiname)) = FT_Directory then
                  LabeledButtonEdit_Ablagepfad.Text := PChar(@Dropped_Dateiname);
              end;
          end;
      finally
        DragFinish(Msg.wParam);
        Handled := true;
      end;
    end;
end;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: erkennen ob Verzeichnis oder Datei bei dragover

  Alt 16. Nov 2015, 09:06
Danke. @Helmi

Aber auch hier wird nicht vor dem Drop geprüft.

Mir ging es ausschliesslich darum vor dem Drop die Prüfung zu machen, im Prinzip beim DragOver.

Gruß alfold
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#3

AW: erkennen ob Verzeichnis oder Datei bei dragover

  Alt 16. Nov 2015, 17:10
Ich bin mir überhaupt nicht sicher, dass dein Vorhaben überhaupt geht.

Wenn ich mir vorstelle, ich nimm eine Datei aus dem Windows Explorer und zieh sie in meine Anwendung.

Wenn ich dich richtig verstanden habe, so müsste die Prüfung ja schon beim "Anpacken der Datei" passieren.
Da ist sie ja noch im Explorer - erst wenn ich sozusagen mit der Maus über meiner Anwendung bin, kann
ich prüfen was ich bekomme.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: erkennen ob Verzeichnis oder Datei bei dragover

  Alt 16. Nov 2015, 19:07
Ja es geht, zumindesten mit IDropTarget. Wenn man in der DropEnter Funktion
abfragt ob Datei oder Verzeichnis.
Delphi-Quellcode:
if DirectoryExists(szBuffer) then
        is_Dir:= True
      else
        is_Dir:= False;
Dann kann man bei DragOver mit
Delphi-Quellcode:
if is_Dir then
  dwEffect := DROPEFFECT_NONE
else
  dwEffect := DROPEFFECT_COPY ;

Result := S_OK;
das dann dementsprechend auswerten.
So funktioniert es jedenfals bei mir

getestet mit WinXP. Auf Win7 bin ich noch nicht dazu gekommen.

EDIT: Wenn ich MS richtig verstehe(kann leider kein Engl) wird DropEnter vor allem ausgeführt. So kann die Applikation entscheiden was sie damit anfangen will.
Zumal DropEnter und Drop identisch in ihrem Aufruf sind!
Warum allerdings das nirgends in Delphi "OnDragEnter" oder in den Externen Dropper komponenten mit drin ist verstehe ich nicht!?

Gruß alfold

Geändert von alfold (17. Nov 2015 um 11:38 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz