![]() |
Drag & Drop von Listbox in Explorer
Hi DPler :hi:
ich habe versch. Einträge in einer normalen Listbox. Hinter jedem Eintrag "versteckt" sich ein kompletter Pfad zu einer Datei. Wie kann ich es nun realisieren dass, wenn ich einen Eintrag per Drag & Drop in den Explorer ziehe, die jeweilige Datei in den jeweiligen Ordner zu kopieren? Gefunden habe ich dazu bis jetzt nur ![]() |
Re: Drag & Drop von Listbox in Explorer
Zitat:
IMHO brauchst du nur den Code an der Stelle
Delphi-Quellcode:
im Ereignis onMouseMove in der ListBox anpassen. Also du übergibst der SelFileList deine versteckten Pfade zu den Dateien.
SelFileList := TStringList.Create;
try SelFileList.Capacity := SelCount; for i := 0 to Items.Count - 1 do if Selected[i] then SelFileList.Add(Items[i]); |
Re: Drag & Drop von Listbox in Explorer
Bie dieser Zeile funktioniert das ganze aber nicht.
Delphi-Quellcode:
DoDragDrop(DataObject, Self, DROPEFFECT_COPY, Effect);DoDragDrop(DataObject, Self, DROPEFFECT_COPY, Effect);
|
Re: Drag & Drop von Listbox in Explorer
Was funktioniert nicht, kommt eine Fehlermeldung oder kannst du das Programm nicht kompilieren?
|
Re: Drag & Drop von Listbox in Explorer
Beim Kompilieren kommt dann:
Inkompatible Typen: Listbox und pDropSource |
Re: Drag & Drop von Listbox in Explorer
Liste der Anhänge anzeigen (Anzahl: 1)
Das kommt, weil du
Delphi-Quellcode:
vergessen hast. Hier das Programm dazu, wie du siehst geht es auch mit einer Listbox.
TForm1 = class(TForm, IDropSource)
|
Re: Drag & Drop von Listbox in Explorer
Super, danke schön :thumb:
|
Re: Drag & Drop von Listbox in Explorer
So, ich hab mal versucht das Ganze in mein Programm einzubauen nur leider funktioniert es nicht.
Delphi-Quellcode:
Hier kommt nie ein TRUE bei mir raus, ergo arbeitet er die folgenden Befehle nicht ab.
if (SelCount > 0) and (csLButtonDown in ControlState)
and ((Abs(X - FDragStartPos.x) >= Threshold) or (Abs(Y - FDragStartPos.y) >= Threshold)) then begin... Ich habe so die Vermutung, dass der Grund dafür der ist dass ich auch folgenden code nutze: ![]() |
Re: Drag & Drop von Listbox in Explorer
:duck: *push* :duck: |
Re: Drag & Drop von Listbox in Explorer
Also ich glaube es liegt in der If..then Anweisung. Du kannst mit Klammern festlegen, was zusammen gehört und was nicht.
Du willst ja das die obere Zeile und die 2 Unteren Zusammen gehörten, dann must du das so machen if ((SelCount > 0) and (csLButtonDown in ControlState)) and (((Abs(X - FDragStartPos.x) >= Threshold) or (Abs(Y - FDragStartPos.y) >= Threshold))) then begin... Oder habe ich es falschverstahnden??? |
Re: Drag & Drop von Listbox in Explorer
And muss nicht geklammert werden.
|
Re: Drag & Drop von Listbox in Explorer
Zitat:
Die Klammerung um das erste AND kann/soll weggelassen werden. Im zweiten Fall wird die Klammer benötigt, weil das zweite Argument für das AND ein OR dabei hat. if .. AND ... AND (... OR ...) then Sonst würde es nämlich so interpretiert werden: if (.. AND ... AND ...) OR ... tben |
Re: Drag & Drop von Listbox in Explorer
Eben, das OR muss geklammert werden ;)
|
Re: Drag & Drop von Listbox in Explorer
Das selbe Geklammer funktioniert in der Demo doch auch so ;)
|
Re: Drag & Drop von Listbox in Explorer
Zitat:
Hier (SelCount > 0) oder hier (csLButtonDown in ControlState)? |
Re: Drag & Drop von Listbox in Explorer
Ich würde mal einen Breakpoint setzen und mir die Bedingungen mal einzeln ansehen.
|
Re: Drag & Drop von Listbox in Explorer
Wie kann ich mi die denn eigentlich anschauen? Ich weiß dass es dafür was gibt, aber ich finde es einfach nicht...
|
Re: Drag & Drop von Listbox in Explorer
Bei mir genügt es, mit der Maus auf die entsprechende Variable zu fahren.
|
Re: Drag & Drop von Listbox in Explorer
Geht bei mir irgendwie nicht (D7) :gruebel:
//bei SQLWindows hat man ein Fomular wo man im Debugmodus einfach die Variable eingeben brauch und der Wert dann angegeben wird. Sowas gibt es bei Delphi doch sicher auch... |
Re: Drag & Drop von Listbox in Explorer
Liste der Anhänge anzeigen (Anzahl: 1)
Bei mir geht das. Du musst den Breakpoint allerdings auf den Folgebefehl setzen, damit die Variablen auch zur Laufzeit gesetzt werden.
|
Re: Drag & Drop von Listbox in Explorer
Zitat:
bei der Delphi 7 Personal Version die ich hatte, wurde diese Option absichtlich herausgenommen (Funktionseinschränkung). Darum hatte ich Delphi 7 PE gleich wieder von der Platte geschmissen und mit Delphi 6 PE weitergemacht. |
Re: Drag & Drop von Listbox in Explorer
Ach so, das kann natürlich möglich sein, ich kenne die Personals nicht.
|
Re: Drag & Drop von Listbox in Explorer
Heißt das dass es sowas bei D7PE nicht gibt? das wäre aber sehr schade...
|
Re: Drag & Drop von Listbox in Explorer
Liste der Anhänge anzeigen (Anzahl: 2)
Habe jetzt nochmal schnell Delphi 7 PE installiert.
Du kannst versuchen dich zu behelfen, indem du direkt auf die Variable eimal mit der rechten Maustaste klickst (im Beispiel i) und dann das Menü Fehlersuche-> Auswerten/Ändern auswählst (mit Strg+F7 geht es ansonsten auch). Im darauf erscheinenden Fenster kannst du den Inhalt der Variablen sehen. Ist natürlich ziemlich umständlich aber ansonsten wird es wohl schwierig sein Fehler zu finden. Ansonsten kannst du noch den Cursor auf die Variable setzen und Strg+F5 drücken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 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