![]() |
Drag&Drop in Listbox
Hallo
Ich will in einer Listbox die Einträge per Drag&Drop ordnen können, aber wie mache ich das? :wiejetzt: Ich bin leider noch ziemlicher Anfänger. Gruß, herRrscher //p.s.:die listbox heisst 'listbox_bilder' |
Re: Drag&Drop in Listbox
Hi,
nichts für ungut, aber nutz mal kurz die Suche. 17 Seiten mit Beiträgen. Deine Stichworte sind Drag&Drop, BeginDrag, OnDragOver, OnEndDrag .... Wenn was unklar ist, sag Bescheid. Gruß oki |
Re: Drag&Drop in Listbox
Die Suche hab ich schon benutzt aber auf den ersten paar seiten nix gefunden was ich kapiert hätte
|
Re: Drag&Drop in Listbox
Moin,
die Hilfe bietet dir (zumindest die von Delphi 5) folgendes Beispiel:
Delphi-Quellcode:
Im Ereignis DragOver kannst du über den Parameter Accept festlegen, ob das gezogene Element an der aktuellen Mausposition akzeptiert werden soll. Für dich sollte dort natürlich auf deine ListBox geprüft werden.
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var
Accept: Boolean); begin Accept := Source is TLabel; end; In der folgenden Ereignisbehandlungsroutine für OnDragDrop wird der Ablegevorgang implementiert. procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); begin if (Sender is TListBox) and (Source is TLabel) then begin with Sender as TListBox do begin Font := (Source as TLabel).Font; Color := (Source as TLabel).Color; end; end; end; Im Ereignis DragDrop legst du fest, was mit deinem gezogenen Element passieren soll. Für dich heißt das dann, ermitteln, über welchem Eintrag die Maus los gelassen wurde und bewegen des gezogenen Eintrages an diese Position. Welches Item sich an der aktuellen Position befindet kannst du mit ItematPos ermitteln, mit Items.Move bewegst du deinen Eintrag an die neue Position.
Delphi-Quellcode:
Ich hab das jetzt nicht getestet. ist vom Grundsatz aber wohl ok.
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var TargetIndex : Integer; begin if (Sender is TListBox) and (Source is TListBox) then begin with Sender as TListBox do begin TargetIndex := -1; TargetIndex := ItemAtPos(Point(X, Y), True); if (ItemIndex > -1) and (TargetIndex > -1) then Items.Move(ItemIndex, TargetIndex); end; end; end; Gruß oki [edit] Ach so, mein Beispielcode unterstellt natürlich, das diese Operation in der selben Listbox erfolgt! [/edit] |
Re: Drag&Drop in Listbox
Hab ich grad ausprobiert aber das funst nicht. :wall:
|
Re: Drag&Drop in Listbox
Hi
Was funst nicht? Hast du auch das onDragOver Ereignis angepasst?
Delphi-Quellcode:
Falls du nicht mit Listbox1.BeginDrag() arbeitest, dann musst du noch DragMode auf mAutomatic stellen.
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); begin Accept := Source is TListbox; end; Dann sollte der Code eigentlich funktionieren, habe es ausprobiert. |
Re: Drag&Drop in Listbox
Macht immernoch nischt.
Ich habe vier Einträge in der ListBox, halte die LMT auf einem gedrückt um ihn zu ziehen und ziehe aber der Eintrag kommt nicht mit. :!: :?: :!: :?: :!: |
Re: Drag&Drop in Listbox
|
Re: Drag&Drop in Listbox
muss ich da dass TListbox durch den namen meiner listbox erstetzen :?:
|
Re: Drag&Drop in Listbox
Nein, du kannst den Code, wenn ich das richtig sehe, 1:1 ins OnDragOver-Ereignis deiner ListBox einfügen.
Es ist natürlich dennoch sinnvoll, sich den Code anzusehen, damit du grob weißt, was passiert. Dadurch lernst du viel und kannst den Source evtl. sogar selbst auf zukünftige Problemstellungen anwenden oder entsprechend anpassen. Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz