![]() |
Re: Drag / Drop Tutorial
Zitat:
befindet sich die ListBox1 direkt auf dem Formular? Falls nicht dann fängst du die Nachricht WM_DROPFILES eben von der Listbox ab. |
Re: Drag / Drop Tutorial
Danke für die schnelle Reaktion...
die ListBox befindet sich direkt auf dem Formular. unabhängig davon sollte aber die 4. procedure ausgeführt werden... in meinem TestFomular (Form1) funktioniert das ja alles... oder funktioniert das nur mit Form1.... :mrgreen: ich denke, das das mit dem Aufruf
Delphi-Quellcode:
zusammenhängt....vestehe aber nicht warum :oops:
procedure DropFiles (var Msg: TMessage); message WM_DROPFILES;
|
Re: Drag / Drop Tutorial
Hast du es zum Testen schon mal so versucht?
Delphi-Quellcode:
procedure TFAnlagenkomponenten.FormCreate (Sender: TObject);
begin DragAcceptFiles (Handle, True); end; |
Re: Drag / Drop Tutorial
... habe ich.
in meinem Testformular habe ich mit solchen Varianten rumgespielt. sowohl mit dem Handle des Formulars als auch der ListBox hat es funktioniert... der gewünschte Unterschied war nur, daß das Drop einmal auf dem gesamten Formular akzeptiert wurde, das andere Mal nur auf der ListBox. [edit] ...habe aus Zitat:
Zitat:
Zitat:
[/edit] |
Re: Drag / Drop Tutorial
Alles klar:
![]() |
Re: Drag / Drop Tutorial
...ich habe gelogen... :duck:
in FAnlagenkomponent liegt die ListBox auf einem TabSheet... im TestFormular direkt auf dem Formular... mit dem Abfangen direkt von der ListBox funktioniert es... Danke :thumb: :?: heißt das man sollte sich angewöhnen die Message direkt vom Objekt abzufangen ? |
Re: Drag / Drop Tutorial
Ja wenn du Drop nicht auf dem gesamten Formular akzeptieren möchtest, sondern nur auf einem bestimmten TWinControl, dann sollte man WM_DROPFILES direkt vom Objekt abfangen.
|
Re: Drag / Drop Tutorial
...vielen, vielen Dank nochmal...
...wieder was gelernt :-D :hi: |
Re: Drag / Drop Tutorial
...Guten Morgen... :-D
...ich muß dann auch mal ein Erfolgserlebnis loswerden. :mrgreen: - per Drag/Drop Files in einen Ordner kopieren und in FileListBox anzeigen. :thumb: DocVerzeichnis: Zielordner FileListBox.Directory: Zielordner
Delphi-Quellcode:
...und es funktioniert :firejump:
procedure TJvFileListBox.DropFiles(var Msg: TMessage);
var i, Anzahl, Size: integer; SourcePfad: PChar; Dateiname: String; Pfad: String; begin inherited; Anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, SourcePfad, 255); SetForegroundWindow(FAnlagenkomponenten.Handle); if MessageDlg('Kopieren von ' + IntToStr(Anzahl) + ' Dateien nach ' + FAnlagenkomponenten.DocVerzeichnis.Text + ' ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin for i := 0 to (Anzahl - 1) do begin Size := DragQueryFile(Msg.WParam, i , nil, 0) + 1; SourcePfad:= StrAlloc(Size); DragQueryFile(Msg.WParam,i , SourcePfad, Size); Pfad:= ExtractFilePath(StrPas(SourcePfad)); Dateiname:= Copy(StrPas(SourcePfad),Length(Pfad)+1,Length(StrPas(SourcePfad))- Length(Pfad)); CopyFile(SourcePfad,PChar(FAnlagenkomponenten.DocVerzeichnis.Text + '\'+ Dateiname),false); StrDispose(SourcePfad); end; FAnlagenkomponenten.JvFileListBox1.Update; end; DragFinish(Msg.WParam); end; Danke noch einmal an alle die mich unterstützt haben... :hi: |
Re: Drag / Drop Tutorial
inherited würde ich in disem Fall nicht aufrufen.
Du verarbeitest doch schon diese Nachricht, demnach muß/sollte sie nicht (eventuell) noch von Anderem nochmals verarbeitet werden.. (nicht das es doppelt verabeitet wird ... stell dir mal vor eine übergeordnete Funktion verschiebt/löscht/öffnet die übergebenen Datei und deine Funktion hat dann keinen Zugriff mehr) Die Nachrichtenbearbeitung zu lange zu unterbrechen könnte eventuell auch nicht gut sein. MessageDlg hällt ja die Verarbeitung an und wenn irgendwo ein TimeOut wärend der Verarbtung existiert, dann könnte da auch Unvorhersehbares passieren. Eventuell in der Funktion nur die Dateinamen in einem Array (oder Ähnlichem) speichern und eventuell noch deinem Programm (also sich selber) mitteilen daß was da ist. Und dann außerhalb (nachdem die Funktion beendet wurde) den MessageDlg anzeigen und dieses Array abarbeiten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 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