Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   erkennen ob Verzeichnis oder Datei bei dragover (https://www.delphipraxis.net/187278-erkennen-ob-verzeichnis-oder-datei-bei-dragover.html)

alfold 13. Nov 2015 20:43

erkennen ob Verzeichnis oder Datei bei dragover
 
Gibt es überhaupt die Möglichkeit schon beim DragOver zu erkennen, was über der jeweiligen Komponente schwebt?
Beim Drop ist es ja kein Problem aber schon zu spät.

Grund: Ich möchte, wenn ein Verzeichnis auf die falsche Komponente gezogen wird dropen verbieten bzw. wenn Datei dann erlauben!

Geht das überhaupt? Gefunden hab ich bis jetzt nichts!

Gruss alf

CarstenB 13. Nov 2015 21:09

AW: erkennen ob Verzeichnis oder Datei bei dragover
 
Ja, das geht. Du musst das Interface "IDropTarget" einbauen.

Dann kannst du mit RegisterDragDrop/RevokeDragDrop deine Komponente als Ziel an-/abmelden und in den entsprechenden Events filtern.

alfold 13. Nov 2015 22:32

AW: erkennen ob Verzeichnis oder Datei bei dragover
 
Erstmal Danke für die Antwort.
Verstehen tu ich es noch nicht. :gruebel:
Leider sind die Beispiele die ich gefunden habe nicht allgemein, um es gleich zu kapieren. Aber übung macht den Meister :coder2:
Mal sehen ob ich es verstehe?

Gruß alfold

CarstenB 13. Nov 2015 23:17

AW: erkennen ob Verzeichnis oder Datei bei dragover
 
http://development.mwcs.de/shelldropper.html

Hab's nicht ausprobiert, aber vielleicht hilft dir das weiter.

alfold 13. Nov 2015 23:51

AW: erkennen ob Verzeichnis oder Datei bei dragover
 
Habs gerade im Test IDropTarget. Funct auch, aber im Dragover mH:gruebel:
Keine Ahnung wie ich da abfragen soll. Dort werden keine IDataObject übergeben nur im Drop!
Woher nehme ich die Information was da drüber schwebt?

Ich befürchte das dies nie vorgesehen ist und war und demzufolge auch niemand in DrogOver einbezogen hat. So auch bei Shelldropper, habs mir gerade angeschaut.
Auch ander Componenten haben so was nicht drin.

Ich gehe nun davon aus das ich das selber in der funktion DragOver einarbeiten muss.
Ich teste das mal mit Shelldropper. Ich hoffe das Martin nichts dagegen hat.

ringli 14. Nov 2015 10:25

AW: erkennen ob Verzeichnis oder Datei bei dragover
 
Wenn du sonst keine andere Lösung findest, könntest du den Pfad - den du per Drag & Drop erhältst - selber prüfen ob es sich hier um eine Datei oder ein Verzeichnis handelt. Einen Ansatz dazu findest du bspw. hier: http://www.delphi-treff.de/tipps-tri...ute-ermitteln/

alfold 14. Nov 2015 10:31

AW: erkennen ob Verzeichnis oder Datei bei dragover
 
Gefunden!
Im DragEnter kan man das abfragen.
Ich wusste nicht das DragEnter vor Drop ausgeführt wird:mrgreen:
Wieder was gelernt:wink:
Danke für die Hilfe.

CarstenB 14. Nov 2015 10:47

AW: erkennen ob Verzeichnis oder Datei bei dragover
 
Sorry das ich dir da ad-hoc keine genaueren Infos geben konnte... Ist schon eine Weile her, dass ich das eingebaut habe.

Helmi 15. Nov 2015 20:09

AW: erkennen ob Verzeichnis oder Datei bei dragover
 
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;

alfold 16. Nov 2015 10:06

AW: erkennen ob Verzeichnis oder Datei bei dragover
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz