Entwickler-Ecke
Sonstiges (Delphi) - Problem mit Drag and Drop (ShellListView -> CheckListBox)
DiamondDog - Do 18.11.10 10:35
Titel: Problem mit Drag and Drop (ShellListView -> CheckListBox)
Hallo Leute,
ich hab eine kleines Problem und zwar würde ich gerne aus ShellListView per Drag and Drop Dateien in eine CheckListBox eintragen lassen. Leider funktioniert das ganze nicht wie gewünscht und zwar wenn ich eine oder mehrer Dateien aus ShellListView über die CheckListBox ziehe dann kommt immer ein Verbotszeichen. Wie bzw was muß ich einstellen das die Dateipfade, in der ShellListView hinzugefügt werden wenn ich die Dateien darüber ziehe?
Danke schon mal für eure Hilfe.
Mfg Dog
MaxWurzel - Do 18.11.10 11:17
Guck dir mal das Ereignis OnDragOver von der CheckListBox an.
DiamondDog - Do 18.11.10 11:47
MaxWurzel hat folgendes geschrieben : |
Guck dir mal das Ereignis OnDragOver von der CheckListBox an. |
Es soll ja nicht bei Over funktionieren sondern per Drag and Drop oder ist dies nicht möglich? Oder muss ich bei Dragover noch parameter hinzufügen, die bei Mousup oder so greifen?
MaxWurzel - Do 18.11.10 12:09
Du musst zuerst das 'Drop' auf die CheckListBox erlauben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.CheckListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if sender = Name deiner ShellListView then Accept := True else Accept := False; end; |
Wenn Accept auf false steht, wird das Verbotszeichen angezeigt.
DiamondDog - Do 18.11.10 12:24
Hab es jetzt mal so versucht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| private Dragging : boolean;
procedure TForm1.CheckListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var Button: TMouseButton; begin if sender = CheckListBox1 then Accept := True else Accept := False; Dragging := True; end;
procedure TForm1.CheckListBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Dragging = True then begin Dragging := False; CheckListBox1.Items.Add('Test'); end; end; |
Das funktioniert aber nicht so ganz, das MouseUp Event funktioniert nicht wie gewünscht. Wenn aus der ShellListView eine Datei über die CheckListBox ziehe dann passiert garnichts.
DiamondDog - Do 18.11.10 15:00
Ok hab einwenig gelsen, nur eins hab ich nocht nicht ganz rausbekommen und zwar wie bekomme ich dann den Dateipafd in die ListBox?
So hab ich es jetzt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.CheckListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var Button: TMouseButton; begin if sender = CheckListBox1 then Accept := True else Accept := False; end;
procedure TForm1.CheckListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); var PCharFileName: PChar; begin CheckListBox1.Items.Add(PCharFileName); end; |
Nur das mit dem PCharFileName ist wohl nicht ganz richtig. Was muss ich dort einfügen das er den Dateipfad in die Liste einträgt?
MaxWurzel - Do 18.11.10 15:24
Ohne es auszuprobieren:
Delphi-Quelltext
1:
| CheckListBox1.Items.Add(shelllistview1.SelectedFolder.PathName); |
DiamondDog - Do 18.11.10 16:01
MaxWurzel hat folgendes geschrieben : |
Ohne es auszuprobieren:
Delphi-Quelltext 1:
| CheckListBox1.Items.Add(shelllistview1.SelectedFolder.PathName); | |
Dann wird nur der Datei Name in die Liste geschrieben, ohne den Pfad und es funtkkioniert auch nur bei einer Datei wenn ich mehrer ausgewählt habe, dann schreibt er nicht alle in die Liste.
Edit:
So funktioniert es, aber nur für eine Datei:
Delphi-Quelltext
1: 2: 3: 4:
| if Assigned(ShellListView1.Selected) then begin CheckListBox1.Items.Add(ShellListView1.Folders[ ShellListView1.Selected.Index ].PathName); end; |
Bergmann89 - Do 18.11.10 16:03
Hey,
ich glaube der ShellView hat auch eine Selected Eigenschaft vom Typ TStrings. Die musst du einfach mit ner Schleife durchzählen und die Strings im TStrings in deine ListBox einfügen.
MfG Bergmann.
DiamondDog - Do 18.11.10 16:42
Bergmann89 hat folgendes geschrieben : |
Hey,
ich glaube der ShellView hat auch eine Selected Eigenschaft vom Typ TStrings. Die musst du einfach mit ner Schleife durchzählen und die Strings im TStrings in deine ListBox einfügen.
MfG Bergmann. |
Leider find ich nicht das was du sagtest, ich hab es so versucht:
Delphi-Quelltext
1:
| for i := 0 to ShellListView1.Items.Count-1 do CheckListBox1.Items.Add(ShellListView1.Items[i].Caption); |
Aber so werden nur mehrere leere Einträge in die Liste geschrieben, weil ich die Pfadangabe der selectierten Dateien nicht rausbekomme.
Edit:
Die Lösung heist:
Delphi-Quelltext
1:
| for i := 0 to ShellListView1.Items.Count-1 do CheckListBox1.Items.Add(ShellListView1.Folders[i].PathName); |
MaxWurzel - Do 18.11.10 16:50
Benutze deine Schleife und prüfe jedes Element auf Selektion. Bei True kannst du den Filename so wie vorher gepostet einfügen.
Delphi-Quelltext
1:
| CheckListBox1.Items.Add(ShellListView1.Folders[ ShellListView1.Selected.Index ].PathName); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!