Autor |
Beitrag |
DiamondDog
      
Beiträge: 460
|
Verfasst: Do 18.11.10 10:35
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
      
Beiträge: 77
Erhaltene Danke: 10
|
Verfasst: Do 18.11.10 11:17
Guck dir mal das Ereignis OnDragOver von der CheckListBox an.
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: 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
      
Beiträge: 77
Erhaltene Danke: 10
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: DiamondDog
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: 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.
|
|
MaxWurzel
      
Beiträge: 77
Erhaltene Danke: 10
|
Verfasst: Do 18.11.10 12:30
Das MouseUp-Event brauchst du nicht. Das erledigt OnDragDrop. Und der Sender beim OnDragOver-Event ist in deinem Falle deine ShellListView. Am Besten liest du dir mal dieses Tutorial durch:
www.delphi-treff.de/...n-delphi/einleitung/
Für diesen Beitrag haben gedankt: DiamondDog
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: Do 18.11.10 15:00
MaxWurzel hat folgendes geschrieben : | Das MouseUp-Event brauchst du nicht. Das erledigt OnDragDrop. Und der Sender beim OnDragOver-Event ist in deinem Falle deine ShellListView. Am Besten liest du dir mal dieses Tutorial durch:
www.delphi-treff.de/...n-delphi/einleitung/ |
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
      
Beiträge: 77
Erhaltene Danke: 10
|
Verfasst: Do 18.11.10 15:24
Ohne es auszuprobieren:
Delphi-Quelltext 1:
| CheckListBox1.Items.Add(shelllistview1.SelectedFolder.PathName); |
Für diesen Beitrag haben gedankt: DiamondDog
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: Do 18.11.10 16:01
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: 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
      
Beiträge: 77
Erhaltene Danke: 10
|
Verfasst: 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); |
|
|