Autor Beitrag
bernd29
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116

winxp
D7 und VB6
BeitragVerfasst: Di 22.03.05 08:59 
Hallo :tongue:

Ich hab da folgendes problem da ich mich eigenlich noch nicht mit drag drob beschäftigt habe hätte ich gerne mal gewust in wie weit der folgenne code verändert werden muss um von einer filelistbox nach einer listbox zu schieben.


ausblenden volle Höhe 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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
 
 Type  
  TForm1 = class(TForm)  
    ListBox1: TListBox;  
  protected  
    Procedure WMDropFiles (Var aMsg: tMessage);  message WM_DROPFILES;  
  end
 

Procedure TForm1.WMDropFiles (Var aMsg: tMessage);  
Var  
  Idx,  
  Size,  
  FileCount: Integer;  
  Filename: pChar;  
Begin  
  Inherited;  

 
  FileCount := DragQueryFile (aMsg.WParam, $FFFFFFFFnil255);  
  For Idx := 0 To FileCount -1 Do  
    Begin  
      Size := DragQueryFile (aMsg.WParam, Idx, nil0) + 1;  
      Filename := StrAlloc (Size);  
      If DragQueryFile (aMsg.WParam, Idx, Filename, Size) = 1 Then  
        { nothing } ;  

 
      ListBox1.Items.Add (pChar (Filename));  
      StrDispose (Filename);  
    End;  

 
  DragFinish (aMsg.WParam);  
End

procedure TForm1.FormCreate(Sender: TObject);  
begin  
  DragAcceptFiles (Handle, True);  
end;


Gruss an Alle :wink2:
bernd29 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116

winxp
D7 und VB6
BeitragVerfasst: Di 22.03.05 14:51 
Hallo,

das ganze habe ich jetzt so gelöst meine frage wie komme ich von einer tfilelistbox zu einer tlistbox.

ausblenden volle Höhe 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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TListBox;
end;

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var i,i2 : integer;
    lbSource,lbSender : TListBox;
begin
  lbSource := Source as TListBox;
  lbSender := Sender as TListbox;
  //Drag and drop der gleichen LB verhindern
  if lbSource <> lbSender then
    begin
      //items kopieren
      //du löschst items, deswegen müßte die for Schleife rückwärts zählen, dann würden die itmes aber spiegelverkehrt hinzugefügt
      //ich nehm da lieber eine while schleife, eine for-schleife macht dir das leben schwerer (finde ich)
      i:=0;
      while i<=lbSource.count-1 do //hier muß Source stehen, du willst von source nach Sender! 
        begin
          if lbSource.Selected [i] then 
            begin 
              //Variante 1 = hinzufügen
              //lbSender.Items.Add(lbSource.Items[i]); 

              //Variante 2 = Einfügen
              i2:=lbSender.ItemAtPos(point(x,y),false); 
              lbSender.Items.insert(i2,lbSource.Items[i]); 

              //Einträge in sourceListbox löschen
              lbSource.Items.Delete (i); 
              continue; //inc(i) "überspringen" und mit gleichem item (wegen Löschung) weiterarbeiten
            end
          inc(i); 

end
   end
  end;

procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if button = mbLeft then with Sender as TListBox do begin
    if ItemAtPos (Point (x,y),true) >= 0 then
      BeginDrag (false);
  end;
end;