Delphi-PRAXiS

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 Mehrer einträge verschieben (https://www.delphipraxis.net/75949-mehrer-eintraege-verschieben.html)

mimi 27. Aug 2006 17:19


Mehrer einträge verschieben
 
Hallo,
ich möchte gerne mehrer einträge einer TJVCChecklistbox verschieben.
mit einem eintrag habe ich es hinbekommen...

das ganze soll in etwa so werden wie im Windows MediaPlayer oder Winamp geht.

hier ist mein qullcode:
Delphi-Quellcode:
var
  index,newIndex:Integer;
  i:Integer;
begin
  if Sender <> Source then begin
//    TJvCheckListBox(Source).MoveSelection(TJvCheckListBox(sender));
    TJvCheckListBox(Source).CopySelection(TJvCheckListBox(sender));
  end
  else begin
//    index:=TJvCheckListBox(Source).ItemIndex;
    newIndex:=TJvCheckListBox(Source).ItemAtPos(Point(x,y),true);
    for i:=0 to TJvCheckListBox(Source).Count-1 do begin
      if TJvCheckListBox(Source).Selected[i] = True then begin
        TJvCheckListBox(Source).items.exchange(i,newIndex);

        TJvCheckListBox(Source).Selected[NewIndex]:=True;
      end;
    end;
  end;
aufjedenfall geht das so nicht, ich weiß auch noch nicht warum(leider).
es gibt keine fehlermeldung er verschiebt auch nur an die falsche position

(ich arbeitet mit unendliche vielen listboxen dahrer habe ich den oben gezeigten weg gewählt !
ich hoffe ihr könnt das problem nachvollziehen !

mimi 27. Aug 2006 19:32

Re: Mehrer einträge verschieben
 
ich habe einen weg gefunden allerdings geht dieser weg nur wenn nicht das letzte item in der liste ausgwält wird beispiel:
Item1
Item2
Item3
Item4
Item5

jetzt ziehe ich item1 und 2 auf Item5 dann vertauschen sich die einträge von item1 und 2 die reinfolge ändert sicht dann sieht die liste so aus:
Item5
Item3
Item4
Item2
Item1
wobei sie eigentlich so aussehen sollte:
Item5
Item3
Item4
Item1
Item2

hier der code:
Delphi-Quellcode:
procedure TForm1.DraqDrop(Sender, Source: TObject; X, Y: Integer);
var
  index,newIndex:Integer;
  i:Integer;
begin
  if Sender <> Source then begin
//    TJvCheckListBox(Source).MoveSelection(TJvCheckListBox(sender));
    TJvCheckListBox(Source).CopySelection(TJvCheckListBox(sender));
  end
  else begin
//    index:=TJvCheckListBox(Source).ItemIndex;
    newIndex:=TJvCheckListBox(Source).ItemAtPos(Point(x,y),true);
    if newIndex > -1 then begin
      for i:=0 to TJvCheckListBox(Source).Count-1 do begin
        if TJvCheckListBox(Source).Selected[i] = True then begin
          TJvCheckListBox(Source).items.exchange(i,newIndex);

          TJvCheckListBox(Source).Selected[i]:=false;
          TJvCheckListBox(Source).Selected[NewIndex]:=True;

          if newIndex+1 < TJvCheckListBox(Source).items.count then
            newIndex:=newIndex+1
          else
            newIndex:=newIndex-1
        end;
      end;
    end;
  end;
end;
ich hoffe ihr könnt mir folgeden

Khabarakh 27. Aug 2006 20:33

Re: Mehrer einträge verschieben
 
Kannst du etwas genauer beschreiben, wie die neue Reihenfolge zustande kommen soll? Denn dein Drag & Drop-Beispiel ist mir nicht nur aus keinem anderen Programm bekannt, ich sehe auch überhaupt keine Logik dahinter. So sähe dein Beispiel in Winamp aus:
Zitat:

1 + 2 markieren, auf 4 oder niedriger ziehen

3
4
5
1
2

mimi 27. Aug 2006 22:26

Re: Mehrer einträge verschieben
 
naja so änliches solltes es auch bei mir funktinieren.... das problem es halt die letztzeile.
ich sage ja immer +1 bei newindex und am ende geht das nicht mehr wenn ich jetzt es prüfe und dann garnichts mache bzw. -1 hinschreibe bekomme ich die reinfolge durcheinader....

das problem trit nur auf wenn ich zwei einträge makiert habe wenn ich mehr als zwei makiert habe dann geht es bzw. dann bleibt die reinfolge erhalten.
der grund wird das +1 sein und genau das ist das problem !

edit: das beispiel im zweiten post sollte es nur verdeutlichen wie es aussehen sollte wenn ich was verschoben das war nur einbeispiel !

Khabarakh 27. Aug 2006 22:30

Re: Mehrer einträge verschieben
 
Wie sollen wir dir denn helfen können, wenn du nicht verrätst, wie die Einträge verschoben werden sollen?

mimi 28. Aug 2006 08:25

Re: Mehrer einträge verschieben
 
das verschieben soll mit der mauß passieren mit einem eintrag geht das ja auch schon.
d.h.
ich ziehe die Maus auf einen neuen eintrag und dort sollen die makierten einträge landen.
(und zwawr alle makieren einträge)
so wie in winamp und dem mediaplayer halt....
Ich möchte meine einträge mit der Maus per Draq und Drop verschieben können und zwar alle die makiert sind sollen an die neue position gebracht werden und genau da habe ich probleme !


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 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