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]