AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Items einer ListBox mittels DragDrop verschieben?
Thema durchsuchen
Ansicht
Themen-Optionen

Items einer ListBox mittels DragDrop verschieben?

Ein Thema von AlexII · begonnen am 28. Mai 2009 · letzter Beitrag vom 28. Mai 2009
Antwort Antwort
Seite 1 von 3  1 23      
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 20:42
Kann mir jemand auf die Sprünge helfen wie ich die Items bzw. ein Item einer ListBox mittels DragDrop verschiebe?

Alex
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 20:54
OnDragOver, OnEndDrag usw.

Gruß oki
42
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 20:57
Ja das ist klar, aber weiter?

Hab jetzt folgendes gefunden, aber irgendwie funkt der Code nicht

Delphi-Quellcode:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TListbox;
end;


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;
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 21:01
Ist DragMode auf Automatic?
42
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 21:02
Also in der CodeLibrary ist auch ein Beitrag (Suchbegriff dort einfach Drag Drop)

Der Code soll sogar mit MultiSelect funktionieren.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 21:09
Hab jetzt folgende Lösung gefunden, die auch gut funktioniert. Jetzt muss ich das aber so machen, dass die Items der ListBox2 parallel mit verschoben werden müssen. Wer hat da eine Idee?

Delphi-Quellcode:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
  verschieben, ItemPos, i: integer;
begin
  Accept := false;
  if not (Source is TListBox) then
    Exit;
  if (Source as TListBox).MultiSelect then
  begin
    if (Source as TListBox).SelCount < 0 then
      Exit;
  end else begin
    if ((Source as TListBox).ItemIndex < 0) then
      Exit;
  end;

  with Source as TListBox do
  begin
    ItemPos := ItemAtPos(point(x,y), true);
    if (ItemPos < 0) or (ItemPos >= Items.Count) then
      Exit;
    if Selected[ItemPos] then
      ItemIndex := ItemPos;

    verschieben := ItemIndex - ItemPos;

    if verschieben <> 0 then
    begin
      if verschieben > 0 then
        i := 0
      else
        i := pred(Items.Count);

      while (i >= 0) and (i < Items.Count) do
      begin
        if Selected[i] then
        begin
          if (i-verschieben >= 0) and (i-verschieben < Items.Count) then
          begin
            Items.Move(i, i-verschieben);
            Selected[i]:=false;
            Selected[i-verschieben]:=true;
          end else begin
            break;
          end; // if
        end; // if

        if verschieben > 0 then
          inc(i)
        else
          dec(i);
      end; // while
    end; // if
  end; // with
  Accept := true;
end;
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 21:30
Na gut, damit wird aber nur zusätzlich das Verschieben aller selektierten Items anstatt nur eines realisiert. Abgesehen davon, dass in deinem vorherigen Post zwei mal auf TargetIndex > -1 geprüft wird fällt mir auf die Schnelle nicht auf.

Ach ja, wo kommt bei dir ItemIndex her?

Gruß oki
42
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 21:40
Zitat von oki:
Ach ja, wo kommt bei dir ItemIndex her?
Was meinst du damit? ItemIndex von ListBox2?
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 21:43
Zitat von AlexII:
Ja das ist klar, aber weiter?

Hab jetzt folgendes gefunden, aber irgendwie funkt der Code nicht

Delphi-Quellcode:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TListbox;
end;


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); // <--- hier
    end;
  end;

end;
42
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 21:47
Hab diesen Code hier im Forum gefunden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 16:57 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