Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi [behoben]Drag n Drop problem (https://www.delphipraxis.net/106770-%5Bbehoben%5Ddrag-n-drop-problem.html)

Spawnche 16. Jan 2008 13:17


[behoben]Drag n Drop problem
 
Hallo alle,

Ja habe die sufu benutzt aber irgendwie nirgends nochmal das gleiche problem gefunden,

Ich habe mir ein tool gebastelt um dateien auf verschiedene filehoster hochzuladen funktioniert alles problemlos mit queue etc..

nun wollte ich aber noch die möglichkeit hinzufügen dateien direkt per drag'n'drop in die queue zu adden habe mir alle möglichen beispiele und threads zu angeguckt sollte eigentlich funktionieren aber wenn ich ne datei auf die form ziehen will egal wohin bekomm ich nur das verbotsschild(not-possible) und weis nu nimmer weiter.


Gruss
Spawnche

Christian Seehase 16. Jan 2008 13:35

Re: Drag n Drop problem
 
Moin Spawnche,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Für mich sieht es im Moment so aus, als hättest Du im OnDragOver-Event Accept nicht auf True gesetzt.

Spawnche 16. Jan 2008 13:42

Re: Drag n Drop problem
 
Hi Seehase,

Danke für das willkommen, bin zwar scho etwas länger hier im forum unterwegs aber eher stiller leser als grosses posten nur diesmal komm ich nicht weiter.

habe es mit

DragAcceptFiles(handle, True);

im onCreate event versucht aber leider erfolgslos.

xaromz 16. Jan 2008 13:50

Re: Drag n Drop problem
 
Hallo,

schau Dir doch mal meine Komponente ShellDropper an.

Gruß
xaromz

peschai 16. Jan 2008 13:59

Re: Drag n Drop problem
 
Hallo

Kleines exemplarisches Beispiel für Datei Drag&Drop.
Also Im Explorer Dateien markieren und mit der Maus in unsere Applikation Ziehen ...
Hier wird dann eine Listbox mit den Namen gefüllt....


Delphi-Quellcode:
type
  TForm1 = class(TForm)
    ...
    Listbox1 ...
    ...
  private
    ...
    procedure WMDropFiles(VAR Msg:TWMDROPFILES); MESSAGE WM_DROPFILES;
  public
    ...
  end;

Function fctWMDropFiles { >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> }
         (hDrop:tHandle;j:TStrings):integer;
var
  i1:integer;
  i2:integer;
  z1:ARRAY[0..255] of Char;
begin
  // local init
  Result := 0;
  i1 := 0;
  i2 := 0;
  FillChar(z1,SizeOf(z1),0);
  // local exit
  if not assigned(j) then exit;
  // local main

  // Ziel-Liste leeren
  j.Clear;

  // Anzahl Dateinamen
  i1 := DragQueryFile(hDrop,LongWord(-1), nil, 0);

  // Alle Dateinamen in Schleife holen
  for i2 := 0 to i1-1 do
    begin
      // Namen holen nach z1
      FillChar(z1,SizeOf(z1),0);
      DragQueryFile(hDrop,i2,z1,SizeOf(z1)-1);
      // Name in Zielliste speichern
      if (StrPas(z1)<>'') then
        begin
          j.Add(StrPas(z1));
        end;
    end;
  DragFinish(hDrop);
  fctWMDropFiles := i2+1;
end; { <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }


procedure TForm1.FormCreate(Sender: TObject);
begin
  ...
  { FileManager Dragging }
  DragAcceptFiles(Handle,True);
  ...
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ...
  { FileManager Dragging }
  DragAcceptFiles(Handle,False);
  ...
end;

procedure TForm1.WMDropFiles(VAR Msg:TWMDROPFILES);
begin
  fctWmDropFiles(Msg.Drop,ListBox1.Items);
end;

Spawnche 16. Jan 2008 14:07

Re: Drag n Drop problem
 
naja peschai so ähnlich habe ich es ja auch


Delphi-Quellcode:
type
  TForm1 = class(TForm)
  ....
  procedure WMDROPFILES(var Msg: TMessage); Message WM_DROPFILES;
  ....
  ....
  ....


procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
  i, Counts, Size: Integer;
  PCharFileName: PChar;
begin
  inherited;

  PCharFileName := nil;
  Counts := DragQueryFile(Msg.WParam, $FFFFFFFF, PCharFileName, 255);

  for i := 0 to Counts - 1 do
  begin
    Size := DragQueryFile(Msg.WParam, i, nil, 0) + 1;
    PCharFileName := StrAlloc(Size);
    DragQueryFile(Msg.WParam, i, PCharFileName, Size);
    showmessage(PCharFileName);
    StrDispose(PCharFileName);
  end;

  DragFinish(Msg.WParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(handle, True);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DragAcceptFiles(handle, false);
end;
Aber soweit kommt es ja erst garnicht da wie gesagt ich durchgehend egal wo auf der Form den not-possible cursor angezeigt bekomme, formcreate wird noch ausgeführt aber mehr auch nit.

peschai 17. Jan 2008 05:52

Re: Drag n Drop problem
 
Hallo Spawnche

Ist das "Inherited" in deiner WMDropFiles da richtig ? Das gehört da nicht hin. Versuchs mal ohne.

Spawnche 17. Jan 2008 07:20

Re: Drag n Drop problem
 
Selbst wenn es da nicht hingehört, hat dies ja nichts mit dem eigentlichen problem zutun da es ja erst garnicht soweit kommt da das komplett formular keinen dragndrop zu lässt wenn ich eine datei auf das form ziehe bekomm ich einfach das http://www.sisl.ch/images/extinction/forbidden.gif zeichen angezeigt, das is das einzige problem was ich habe und nicht die behandlung des drops danach

Spawnche 17. Jan 2008 08:17

Re: Drag n Drop problem
 
Habe das Problem soeben gefunden, da ich paar style einstellungen für das Form habe, wird wohl das handle nach FormCreate nochmal freigegeben ich habe das DragAcceptFiles nun ins OnShow gesetzt nun funktioniert es.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 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