Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - listbox drag and drop
Chatfix - Mi 03.07.02 14:26
Titel: listbox drag and drop
hi
ich hab 2 Probleme, möchte das der User die einträge in der Listbox manuell per maus hoch und runter schieben kann (man kann nur einen eintrag markieren)
und 2. möchte ich wenn man eine datei in die listbox zieht das die listbox dann diese datei lädt (also loadfromfile)
kann mir jmd helfen, hab kein plan wie ich as machen könnte
Alfons-G - Do 04.07.02 18:01
Hi,
da hab' ich ein Stück Code für Dich:
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:
| procedure TMainForm.LMDListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if Source is TLMDListBox then Accept := true; end;
procedure TMainForm.LMDListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var i: integer;
begin i := LMDListBox1.ItemAtPos (Point(x,y),true); if i > -1 then begin LMDListBox1.Items.Move (Zeile ,i); end; end;
procedure TMainForm.LMDListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var LPos: integer;
begin LPos := LMDListBox1.ItemAtPos (Point(x,y),true) ; if LPos > -1 then begin try Zeile := LPos; LMDListBox1.BeginDrag (false); imgVorschau.Picture.LoadFromFile (strPixBase + '\' + LMDListBox1.Itempart (LPos, 0)); except end; end; end; |
In diesem Programm habe ich lediglich statt der normalen Listbox die LMDListBox aus den LMD-Komponenten verwendet. Diese ist mehrspaltig, man kann mit ItemPart(Zeile,Spalte) auf die einzelnen Spalten zugreifen.
Ansonsten geht es mit einer normalen Listbox genauso.
Das Programm, ein Tool zum Erstellen von Vorschau-Seiten als HTML-Datei, lädt jeweils das aktuell markierte Bild in sein Vorschaufenster.
:idea:
Moderiert von
Klabautermann: Code- durch Delphi-Tags ersetzt
Chatfix - Fr 05.07.02 13:14
sorry ich kann damit gar nix anfangen, kann mir nciht irgendjemand mal den code dafür geben, es reicht auch wenn nur eine problem gelöst wird...
ich hatte mal den code dafür und dachte er wäre aus diesem forum, hab aber nichts mehr gefunden...
Chatfix - Sa 06.07.02 10:01
also ich hab mich nochmal hingesetzt, und hab einwas geschaft. Mit folgendem code kann man jetzt einträge in der Listbox beliebig verschieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); begin ListBox1.Items.Move(ListBox1.ItemIndex,ListBox1.ItemAtPos(point(x,y),true)); end;
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if source is TListbox then accept:=true else accept:=false; end; |
Dann noch die Eigenschaft DragMode auf DmAutomatic und fertig ist der Spass.
Moderiert von
Klabautermann: Code- durch Delphi-Tags ersetzt
xcellent - Mi 04.07.07 13:32
Titel: weiterer Lösungsansatz
Man kann auch ohne Drag & Drop einfach die Zeilen tauschen...
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:
| var HoldIndex : Integer;
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin HoldIndex := TListBox(Sender).ItemAtPos(point(x,y),true); end;
procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin try if ((Holdindex > -1)and (HoldIndex <> TListBox(Sender).ItemAtPos(point(x,y),true))and (HoldIndex < TListBox(Sender).Items.Count) ) then begin
TListBox((Sender).Items.Move( HoldIndex, TListBox((Sender).ItemAtPos(point(x,y),true) );
HoldIndex := TListBox((Sender).ItemAtPos(point(x,y),true);
TListBox((Sender).Selected[HoldIndex] := true;
end; except end; end;
procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin HoldIndex := -1; end; |
Moderiert von
Klabautermann: Code- durch Delphi-Tags ersetzt
Chatfix - Mi 04.07.07 13:35
Auch wenn die Frage schon 5 Jahre alt ist ;) Danke :P
Klabautermann - Mi 04.07.07 14:13
Chatfix hat folgendes geschrieben: |
| Auch wenn die Frage schon 5 Jahre alt ist ;) Danke :P |
So kommt sie dann wenigstens noch zu der Ehre eingebuntet zu werden ;).
xcellent - Fr 06.07.07 12:49
:wink: Der Unterschied zwischen beiden Varianten ist das visuelle Ergebnis.
Die Drag & Drop-Variante lässt sich ""blöd"" handhaben, weil man mit der Maus
förmlich zielen muss, um seine Zeile korrekt neu zu platzieren.
Die Tausch-Variante dürfte um Längen einfacher zu bedienen sein :wink:
Und vielleicht hilft es ja noch anderen! :!:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!