title image


Smiley Re: Wie muß ich das dann implementieren?
Hallo Matthias,falls Du der Matthias mit den Kombinierten Splashscreens bist, da hab ich (weiter unten) grad was zu geschrieben.Nochmal zu den Drag&Drop.Das Application-uebergreifende Dragging wird natuerlich von Windowsgesteuert und da faellt mir auf Anhieb nur die FileDrop Unterstuetzung ein.Damit Deine App was davon mitbekommt, musst Du Windows sagen, dassDeine App Dragging akzeptiert.Das tust Du wo Du willst, also z.B. in Form1 (deinem MainForm). Dann wuerdedas ganze Form auf das Dragging reagieren. Also in CreateForm DragAcceptFiles(self.handle, true); {damit sagst Du Win Das die App das unterstuetzt}Windows 'weiss' jetzt das Deine App Dragging versteht und wird Dir beim Dropeine Massage wm_dropfiles senden.Dafuer existiert die procedure:procedure WMDropFiles(var Msg:TWMDropFiles);Message wm_dropfiles;Die fuegst du auch in form1 ein. Unter der Private Deklaration und NICHT in das EreignisOnDragDrop!!! , da diese Ereignisse ja nur intern in der App ausgeloest werden.(das ist intern auch ne tolle sache, aber nicht Gegenstand des jetzigen Problems)In dieser Proc ermittelst Du jetzt nur die gedroppten Filenames. Was Du dann mit diesenFiles anstellst ist Deine Sache.Also auch wenns etwas umfangreicher ist, kommt jetzt mal der ganze Code einer Beispiel-App.Erstelle einfach ein Form1 und eine ListBox1.In der ListBox1 siehst Du dann die gedroppten Files. { App-uebergreifendes FileDrop }unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, DDPanel, ShellAPI;type TForm1 = class(TForm) ListBox1: TListBox; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private procedure WMDropFiles(var Msg:TWMDropFiles);Message wm_dropfiles; {msg von windows} end;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);begin DragAcceptFiles(self.handle, true); {ich will dragging}end;{ TWMDropFiles = record nur zum Verstaendnis der Msg Msg: Cardinal; Drop: THANDLE; Unused: Longint; Result: Longint; end;}procedure TForm1.WMDropFiles(var Msg:TWMDropFiles);var koord:TPoint; i,filecount:word; buff:array[0..99] of char;begin if Msg.Msg wm_DropFiles then exit; {should never be} ListBox1.Items.clear; DragQueryPoint(Msg.Drop, koord); {koords when drop only if you need them} Filecount:= DragQueryFile(Msg.Drop, $FFFFFFFF, Nil, 0); {how many files} if FileCount>0 then for i:= 0 to FileCount-1 do begin DragQueryFile(Msg.Drop, i, @buff, sizeof(buff)); {@buff ist jetz PChar des jew. Filenamens mach was du willst damit} ListBox1.Items.add(string(buff)); end; DragFinish(Msg.Drop); {wm_dropfile res. freigeben}end;procedure TForm1.FormDestroy(Sender: TObject);begin DragAcceptFiles(self.handle, false);end;end.Ciao (und wenn ich wieder etwas unklar war frag ruhig noch mal)CO

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: