Einzelnen Beitrag anzeigen

Benutzerbild von TERWI
TERWI
Online

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Listbox Einträge verschieben

  Alt 19. Nov 2019, 15:14
Das ist zwar schon fast ein prähistorischer Thread ... hole den aber trotzdem noch mal hoch.
Weil: War auf der Suche nach eben so einer Funktion, aber das funzte alles nicht wirklich toll und war n.E.n. etwas überladen.
Hier mal meine (Kurz-) Version, die beim Live-Verschieben auch die Listbox richtig scrollt.
Delphi-Quellcode:
procedure TForm.OnDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
  Position, BotIndex : integer;
begin
  with Sender as TListBox do // or TCheckListBox ...
  begin
    Position := ItemAtPos(point(x,y), true); // get position
    if (Position < 0) then exit; // position outside listbox ?
    if (ItemIndex = Position) then exit; // position changed ?
    BotIndex := TopIndex + ClientHeight div ItemHeight; // get act. bottom-index
    if (TopIndex > 0) AND ((Position - 1) < TopIndex) then // pos. near top-index ?
      SendMessage(Handle,WM_VSCROLL,SB_LINEUP,0); // scroll up line
// SendMessage(Handle,WM_VSCROLL,SB_PAGEUP,0); // scroll up page
    if (BotIndex < (Count - 2)) AND ((Position + 2) > BotIndex) then // pos. near bot-index ?
      SendMessage(Handle,WM_VSCROLL,SB_LINEDOWN,0); // scroll down line
// SendMessage(Handle,WM_VSCROLL,SB_PAGEDOWN,0); // scroll down page
    Items.Move(ItemIndex, Position); // move entry
    // move dependend data here same as item !
    ItemIndex := Position; // DO NOT FORGET: set index to new position !!!
  end;
end;
Das funzt aktuell nur mit jeweils einem Eintrag, den man beliebig hin- und herschieben kann.
Werde noch daran basteln, das mit MulitSelect zu erweitern.

Geändert von TERWI (19. Nov 2019 um 15:38 Uhr)
  Mit Zitat antworten Zitat