AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listbox Einträge verschieben

Ein Thema von ebber · begonnen am 3. Mär 2007 · letzter Beitrag vom 20. Nov 2019
 
Thomasl

Registriert seit: 19. Jun 2006
Ort: Vreden
66 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Listbox Einträge verschieben

  Alt 4. Mär 2007, 22:36
Weil ich es für mein eigenes Programm brauche und hier die ansätze gefunden habe
(ich Programmiere mir einen MP3 Player mit BASS.DLL)

Das rüberschieben zu einer anderen listbox dürfte einfacher sein (brauche ich aber nicht).

Gibt es noch einen einfacheren weg?
Bekommt man das flacken beim verschieben noch weg?


dragmode := dmAutomatic
multiselect := true
extendedselect := true

Delphi-Quellcode:
var
  Form1: TForm1;
  Listindex : integer;

implementation

{$R *.dfm}

procedure TForm1.ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
 n,offset,maxoffset,minoffset : integer;
 SourceSel : array of boolean;
begin
 if (Sender = Source) and (Sender is TListbox) and ((Source as Tlistbox).ItemIndex <> -1) then
 begin
  with Source as TListbox do
   begin
    //Selected Sichern und max offset feststellen
    SetLength(SourceSel,Count);
    for n := 0 to Count -1 do
     begin
      SourceSel[n] := Selected[n];
      if SourceSel[n] then maxoffset := n - Count;
     end;

    //Min Offset feststellen
    for n := Count -1 downto 0 do
     if SourceSel[n] then minoffset := n ;

    //Um wieviele Felder verschieben
    offset:= Listindex - ItemAtPos(point(x,y),true);

    //Verschieben begrenzen
    if (ItemAtPos(point(x,y),true) = -1) then exit;
    if (offset <= maxoffset) then exit;
    if (offset > minoffset) then exit;

    //Verschieben
    if offset > 0 then
     begin
      for n := 0 to Count -1 do
       if SourceSel[n] then Items.Move(n,n - offset);
     end
    else if offset < 0 then
     begin
      for n := Count -1 downto 0 do
       if SourceSel[n] then Items.Move(n,n - offset);
     end;

    //Selected setzen
    for n := 0 to Count -1 do
     if (n + offset) >= Count then Selected[n] := false else
     Selected[n] := SourceSel[n + offset];

    //Itemindex neu setzen
    Listindex := Listindex - offset;
    itemindex := Listindex;

  end; //with listbox
  Accept:= true
 end
 else Accept:= false;
end;

procedure TForm1.ListBox2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 with Sender as TListBox do
  Listindex := ItemAtPos(point(x,y),true);
end;
Thomas Levering
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz