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 2 von 3     12 3      
oki

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

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 21:55
ah, sorry, hab das whith sender as übersehen.

Ähm, da fällt mir auf, muss der ItemIndex nicht von Source gelesen werden? Ist wohl schon zu spät für mich.

Gruß
42
  Mit Zitat antworten Zitat
AlexII

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

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 21:56
Und hast du Idee wie man die Items der ListBox2 parallel verschiebt?
  Mit Zitat antworten Zitat
oki

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

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 21:58
welche ListBox2?

Wenn die genauso aussieht, einfach die Items aus 1 nach 2 mittels Assign kopieren.

Gruß
42
  Mit Zitat antworten Zitat
AlexII

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

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 22:00
Hab das so gemacht:

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 := ItemAtPos(Point(X, Y), True);
      if (ItemIndex > -1) and (TargetIndex > -1) then
      begin
      Items.Move(ItemIndex, TargetIndex);
      ListBox2.Items.Move(ListBox2.ItemIndex, TargetIndex); <-----
      end;
    end;
  end;
end;
Ist das ok was meinst du?
  Mit Zitat antworten Zitat
oki

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

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 22:04
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 := ItemAtPos(Point(X, Y), True);
      if (ItemIndex > -1) and (ItemIndex > -1) then
      begin
        Items.Move(ItemIndex, TargetIndex);
      end;
    end;
    ListBox2.Items.Assign(ListBox1.Items);
  end;
end;
Ich tu mich heute aber schwer
42
  Mit Zitat antworten Zitat
AlexII

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

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 22:07
Danke dir
Kannst du das vllt noch in dem Code #6 ändern? Der gefällt mir besser, für das Auge verschiebt er besser.
  Mit Zitat antworten Zitat
oki

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

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 22:10
Oh man eh. Teste erst mal obs klappt. Bin heut nicht mehr so gut drauf.
42
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#18

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 22:11
Mir kommt das zu kompliziert vor, was hier fabriziert wird.

Prinzipiell geht das jedenfalls so :

Delphi-Quellcode:
unit draguni;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ListBox2: TListBox;
    procedure ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure ListBox2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if button = mbLeft then with Sender as TListBox do begin
    if ItemAtPos (Point (x,y),true) >= 0 then
      BeginDrag (false);
  end;
end;

procedure TForm1.ListBox2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if button = mbLeft then with Sender as TListBox do begin
    if ItemAtPos (Point (x,y),true) >= 0 then
      BeginDrag (false);
  end;
end;

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);
begin
  if Source is TListBox then with ListBox1 do begin
    Text := ListBox2.Items[ListBox2.ItemIndex];
    ListBox1.AddItem(Text,source);
    ListBox2.Items.Delete (ListBox1.ItemIndex);
  end;
end;

procedure TForm1.ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TListBox;
end;

procedure TForm1.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source is TListBox then with ListBox2 do begin
    Text := ListBox1.Items[ListBox1.ItemIndex];
    listbox2.AddItem(Text,source);
    ListBox1.Items.Delete (ListBox2.ItemIndex);
  end;
end;

end.
MultiSelect ist da zwar nicht drin, aber man kann die Items hin und her schieben. Aber, was heißt "parallel verschieben" ?
Gruß
Hansa
  Mit Zitat antworten Zitat
AlexII

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

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 22:13
Zitat von oki:
Oh man eh. Teste erst mal obs klappt. Bin heut nicht mehr so gut drauf.
Mein Methode klappt, aber ich würde das in dem Code #6 haben. Na gut, hab schon eine Lösung.
  Mit Zitat antworten Zitat
oki

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

Re: Items einer ListBox mittels DragDrop verschieben?

  Alt 28. Mai 2009, 22:19
Dein Code ist auch ok. Das Assign ist auch nur zu empfehlen, wenn die Anzahl der Items nicht zu hoch ist. Das gleiche gilt für deinen Code in #6. Warum soll denn alles schon beim DragOver verschoben werden? Das ist bei vielen Items sicher auch mächtig Performance lastig.

Gruß
42
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 13: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