Autor Beitrag
DiamondDog
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 77
Erhaltene Danke: 10



BeitragVerfasst: Do 18.11.10 11:17 
Guck dir mal das Ereignis OnDragOver von der CheckListBox an.
DiamondDog Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Do 18.11.10 11:47 
user profile iconMaxWurzel hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 77
Erhaltene Danke: 10



BeitragVerfasst: Do 18.11.10 12:09 
Du musst zuerst das 'Drop' auf die CheckListBox erlauben.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Do 18.11.10 12:24 
Hab es jetzt mal so versucht:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 77
Erhaltene Danke: 10



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Do 18.11.10 15:00 
user profile iconMaxWurzel hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 77
Erhaltene Danke: 10



BeitragVerfasst: Do 18.11.10 15:24 
Ohne es auszuprobieren:
ausblenden Delphi-Quelltext
1:
 CheckListBox1.Items.Add(shelllistview1.SelectedFolder.PathName);					

Für diesen Beitrag haben gedankt: DiamondDog
DiamondDog Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Do 18.11.10 16:01 
user profile iconMaxWurzel hat folgendes geschrieben Zum zitierten Posting springen:
Ohne es auszuprobieren:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  if Assigned(ShellListView1.Selected) then
  begin
   CheckListBox1.Items.Add(ShellListView1.Folders[ ShellListView1.Selected.Index ].PathName);
  end;
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Do 18.11.10 16:42 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
for i := 0 to ShellListView1.Items.Count-1 do CheckListBox1.Items.Add(ShellListView1.Folders[i].PathName);					
MaxWurzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 77
Erhaltene Danke: 10



BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
CheckListBox1.Items.Add(ShellListView1.Folders[ ShellListView1.Selected.Index ].PathName);