Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Drag&Drop in Listbox (https://www.delphipraxis.net/115709-drag-drop-listbox.html)

herRrscher 16. Jun 2008 19:57


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'

oki 16. Jun 2008 21:22

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

herRrscher 17. Jun 2008 05:37

Re: Drag&Drop in Listbox
 
Die Suche hab ich schon benutzt aber auf den ersten paar seiten nix gefunden was ich kapiert hätte

oki 17. Jun 2008 06:25

Re: Drag&Drop in Listbox
 
Moin,

die Hilfe bietet dir (zumindest die von Delphi 5) folgendes Beispiel:
Delphi-Quellcode:
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 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.

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:
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;
Ich hab das jetzt nicht getestet. ist vom Grundsatz aber wohl ok.

Gruß oki

[edit] Ach so, mein Beispielcode unterstellt natürlich, das diese Operation in der selben Listbox erfolgt! [/edit]

herRrscher 21. Jun 2008 14:51

Re: Drag&Drop in Listbox
 
Hab ich grad ausprobiert aber das funst nicht. :wall:

extrem 21. Jun 2008 21:24

Re: Drag&Drop in Listbox
 
Hi


Was funst nicht?

Hast du auch das onDragOver Ereignis angepasst?
Delphi-Quellcode:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TListbox;
end;
Falls du nicht mit Listbox1.BeginDrag() arbeitest, dann musst du noch DragMode auf mAutomatic stellen.
Dann sollte der Code eigentlich funktionieren, habe es ausprobiert.

herRrscher 22. Jun 2008 10:31

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. :!: :?: :!: :?: :!:

Matze 22. Jun 2008 10:35

Re: Drag&Drop in Listbox
 
Hallo,

hast du das gesehen und versucht: ListBox-Einträge per Drag & Drop verschieben

Grüße

herRrscher 22. Jun 2008 11:08

Re: Drag&Drop in Listbox
 
muss ich da dass TListbox durch den namen meiner listbox erstetzen :?:

Matze 22. Jun 2008 11:21

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.
Seite 1 von 2  1 2      

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