![]() |
Drag / Drop Tutorial
... ein erfolgreiches neues Jahr euch allen... :cheer:
... mit der SuFu komme ich zu keinem vernünftigem Ergebnis... :( :?: - wo finde ich ein Tutorial zu Drag / Drop. :?: - wie funktioniert das prinzipiell (kein Code). ...ich möchte erst einmal verstehen wie das funktioniert... den Rest kriege ich schon. :-D Danke... :hi: |
Re: Drag / Drop Tutorial
Vielleicht hilft Dir diese Seite erstmal weiter (englisch):
![]() P.S.: Auch Dir ein frohes neues Jahr :-D :cheer: (dieser Smiley ist echt witzig) |
Re: Drag / Drop Tutorial
Was möchtest du denn Dragen und Dropen ?
Wenn es um Dateien/Ordner vom Explorer zum Programm geht, so funktioniert es, in dem du auf die entsprechende Message von Windows reagierst und sie auswertest. |
Re: Drag / Drop Tutorial
Dank für die schnelle Antwort...
... :cheer: ist wirklich :-D ... für den Anfang geht es erst einmal um Dateinamen vom Explorer in eine FileListBox. ...mit Englisch komme ich zwar einigermaßen zurecht, wenn es aber ans eingemachte geht...hört es auf.. :( |
Re: Drag / Drop Tutorial
Dann bekommste jetzt einfach doch den Source :mrgreen: :
Delphi-Quellcode:
Gruß
uses ShellApi;
... type private { Private-Deklarationen } procedure WMDROPFILES (var Msg: TMessage); message WM_DROPFILES; ... procedure TForm1.WMDROPFILES (var Msg: TMessage); var i, anzahl, size: integer; Dateiname: PChar; begin inherited; anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255); for i := 0 to (anzahl - 1) do begin size := DragQueryFile(Msg.WParam, i , nil, 0) + 1; Dateiname:= StrAlloc(size); DragQueryFile(Msg.WParam,i , Dateiname, size); ListBox1.items.add(StrPas(Dateiname)); StrDispose(Dateiname); end; DragFinish(Msg.WParam); end; procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles(Form1.Handle, true); end; |
Re: Drag / Drop Tutorial
...vielen Dank.
dann mache ich jetzt mal Copy / Paste und schaue mir das mal in Ruhe an... Danke... :hi: |
Re: Drag / Drop Tutorial
... ich löcher Euch einfach mal... :-D
... das Beispiel funktioniert ja... aber warum :gruebel: :oops: - nullterminierte Strings :gruebel: ... ich habe die Funktion mal angehalten und mir die verschiedenen Werte mal angeschaut. (auf manche kann ich nicht zugreifen)
Delphi-Quellcode:
- die Anzahl repräsentiert ja die Menge der Dateinamen...aber wie wird die übergeben / wo versteckt ?
anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255);
Delphi-Quellcode:
- die Länge des Strings :gruebel:
size := DragQueryFile(Msg.WParam, i , nil, 0) + 1;
Delphi-Quellcode:
- der Dateiname zurück :gruebel:
DragQueryFile(Msg.WParam,i , Dateiname, size);
...learning by doing ist manchmal ein Krampf... :oops: Sorry... |
Re: Drag / Drop Tutorial
Hallo,
die Erklärung zu den benötigten Funktionen findest du bei Microsoft: ![]() ![]() Ich habe die Routine von MrKnogge mal in eine handliche Funktion umgewandelt, dann kann man sie relativ einfach in mehreren Applikationen verwenden.
Delphi-Quellcode:
Gruß Hawkeye
// uses ShellAPI
function GetFilesDropped (aHandle: THandle; aList: TStrings): Boolean; var FileCount : Integer; Index : Integer; Buffer : array [0..MAX_PATH] of Char; begin FileCount := DragQueryFile(aHandle, Cardinal(-1), nil, 0); aList.BeginUpdate; try for Index := 0 to FileCount - 1 do begin DragQueryFile(aHandle, Index, @Buffer, SizeOf(Buffer)); aList.Add(Buffer); end; finally aList.EndUpdate; end; Result := (FileCount > 0); end; // in der Applikation: type TForm1 = class (TForm) [...] procedure FormCreate (Sender: TObject); private procedure WMDropFiles (var aMsg: TMessage); message WM_DROPFILES; end; procedure Form1.FormCreate (Sender: TObject); begin DragAcceptFiles (Handle, True); end; procedure Form1.WMDropFiles (var aMsg: TMessage); begin if GetFilesDropped(aMsg.WParam, ListBox.Items) then ShowMessage ('files dropped'); end; |
Re: Drag / Drop Tutorial
Danke...
Zitat:
...jetzt ist mir einiges mit dem 'Return Value' viel klarer. :-D - ich spiel dann mal ein bischen rum... kopieren per Drag/Drop etc. Danke noch mal... :hi: |
Re: Drag / Drop Tutorial
...aufwärm... :roll:
ich habe mal ein bischen rumgespielt... und... :wiejetzt: 1. ShellApi eingebunden 2.
Delphi-Quellcode:
3.
private
{ Private-Deklarationen } procedure DropFiles (var Msg: TMessage); message WM_DROPFILES;
Delphi-Quellcode:
4.
procedure TFAnlagenkomponenten.FormCreate(Sender: TObject);
begin DragAcceptFiles(FAnlagenkomponenten.ListBox1.Handle, true); end;
Delphi-Quellcode:
... die Procedure 4. wird nicht angesprungen. :gruebel:
procedure TFAnlagenkomponenten.DropFiles(var Msg: TMessage);
var i, anzahl, size: integer; Dateiname: PChar; begin inherited; anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255); for i := 0 to (anzahl - 1) do begin size := DragQueryFile(Msg.WParam, i , nil, 0) + 1; Dateiname:= StrAlloc(size); DragQueryFile(Msg.WParam,i , Dateiname, size); Label2.Caption:= intToStr(size); Label3.Caption:= StrPas(Dateiname); ListBox1.items.add(StrPas(Dateiname)); StrDispose(Dateiname); end; DragFinish(Msg.WParam); end; ... bis auf ein paar Labels für die Visualisierung und procedure Namensänderung hat sich zum Beispiel nichts verändert :gruebel: Danke für Eure Geduld... :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 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