AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Entsprechendes Listbox item nach drag löschen

Entsprechendes Listbox item nach drag löschen

Ein Thema von Ajintaro · begonnen am 6. Mär 2014 · letzter Beitrag vom 6. Mär 2014
Antwort Antwort
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#1

Entsprechendes Listbox item nach drag löschen

  Alt 6. Mär 2014, 13:02
Hallo DP !

Ich habe 5 Listboxen und möchte die items hin- und her (ver)schieben.

Delphi-Quellcode:
 private
    { Private-Deklarationen }
    dragitem, drag_source:string;
    drag_integer:integer;


//SENDER
procedure TForm1.ListBox3MouseDown(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
    begin
      dragitem:=ListBox3.Items[ListBox3.ItemIndex];//Namen des Elements
      drag_integer := ListBox3.ItemIndex; //position des Elements
      drag_source := 'ListBox3'; //herkunft des Elements
      BeginDrag (false);
    end;
 end;
end;

//EMPFÄNGER
procedure TForm1.ListBox4DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
 if Source is TListBox then with ListBox4 do begin
    Text := dragitem; //Name des Elements
    listbox4.AddItem(Text,source);
     .Items.Delete(drag_integer); // <--- nach dem Drag Vorgang das item von Listbox-X an der Stelle drag_integer löschen
  end;
end;
Wie kann ich nach dem "Drop" das kopierte Element aus der Sender-Listbox löschen, wenn es theoretisch von 4 Listboxen stammen könnte?
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Entsprechendes Listbox item nach drag löschen

  Alt 6. Mär 2014, 13:06
Statt den privaten Feldern solltest du lieber dringendst Sender und Source beide nutzen. Du bekommst nämlich nicht nur die Listbox, von der das Ereignis kommt (Sender), sprich auf die gezogen wurde, sondern auch die Quelle (Source). Die kannst du direkt auswerten.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Entsprechendes Listbox item nach drag löschen

  Alt 6. Mär 2014, 14:21
Da ich es schon lange nicht gemacht habe, mal so zum Spaß:

Delphi-Quellcode:
{08/15 Klasse um sie als Objekt an ListBox-Item anzuheften. Kann auch was anderes sein, Hauptsache Objekt.}
type
  TTest = class
    private
      FText: String;
    public
      constructor Create(S: String);
      property Text: String read FText;
  end;

constructor TTest.Create(S: String);
begin
  inherited Create;
  FText := S;
end;

//------------------------------------------------------------------------

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  Test: TTest;
begin
  for i := 1 to 4 do
  begin
    Test := TTest.Create('Objekt von ListBox1' + IntToStr(i));
    with ListBox1 do Items.AddObject(Name + IntToStr(i), Test);
    Test := TTest.Create('Objekt von ListBox2' + IntToStr(i));
    with ListBox2 do Items.AddObject(Name + IntToStr(i), Test);
    Test := TTest.Create('Objekt von ListBox3' + IntToStr(i));
    with ListBox3 do Items.AddObject(Name + IntToStr(i), Test);
    Test := TTest.Create('Objekt von ListBox4' + IntToStr(i));
    with ListBox4 do Items.AddObject(Name + IntToStr(i), Test);
  end;

  with ListBox1 do DragMode := dmAutomatic;
  with ListBox2 do DragMode := dmAutomatic;
  with ListBox3 do DragMode := dmAutomatic;
  with ListBox4 do DragMode := dmAutomatic;
end;

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  LB1, LB2: TListBox;
begin
  if not ((Sender is TListBox) and (Source is TListBox)) then Exit;

  LB1 := TListBox(Source);
  LB2 := TListBox(Sender);

  if LB1.ItemIndex < 0 then Exit;

  LB2.AddItem(LB1.Items[LB1.ItemIndex], LB1.Items.Objects[LB1.ItemIndex]);
  LB1.Items.Delete(LB1.ItemIndex);
end;

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

procedure TForm1.ListBox1DblClick(Sender: TObject);
var
  Test: TTest;
  LB: TListBox;
begin
  if not (Sender is TListBox) then Exit;

  LB := TListBox(Sender);
  if LB.ItemIndex < 0 then Exit;

  Test := TTest(LB.Items.Objects[LB.ItemIndex]);

  ShowMessage('Text Item: ' + LB.Items[LB.ItemIndex] + ^j +
              'Text Objekt: ' + Test.Text );
end;
Eigentlich müßten die Objekte in den ListBoxen vorher noch freigegeben werden. Das habe ich hier gelassen.

//Achso, alle vier ListBoxen nutzen überall die gleichen Prozeduren.
Angehängte Dateien
Dateityp: zip ListBoxDragAndDrop.zip (3,9 KB, 2x aufgerufen)

Geändert von Popov ( 6. Mär 2014 um 14:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Entsprechendes Listbox item nach drag löschen

  Alt 6. Mär 2014, 14:28
Machst du das immer so mit dem WITH und wenn ja warum?
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Entsprechendes Listbox item nach drag löschen

  Alt 6. Mär 2014, 15:04
Ich machs nicht immer, aber hier bietet sich sowas an. Statt ListBox1.Items.AddObject(ListBox1.Name + IntToStr(i), Test); und das viel mal, und dann überall anpassen, einfach mit WITH. Müssen, muss man aber nicht.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Entsprechendes Listbox item nach drag löschen

  Alt 6. Mär 2014, 15:12
Ich wurde nur hier stutzig, deswegen die Nachfrage.
with ListBox1 do DragMode := dmAutomatic;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#7

AW: Entsprechendes Listbox item nach drag löschen

  Alt 6. Mär 2014, 15:34
Da ich es schon lange nicht gemacht habe, mal so zum Spaß:


Für den Spaß klappt das aber erstaunlich gut! Damit ist sogar mein selbst erstelltes "Duplicate"-Problem elilminiert.

Wirklich ganz große Klasse, vielen Dank !
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Entsprechendes Listbox item nach drag löschen

  Alt 6. Mär 2014, 16:02
Ich wurde nur hier stutzig, deswegen die Nachfrage.
with ListBox1 do DragMode := dmAutomatic;
Grund: klein wenig Copy&Paste, ist aber unnötig, stimmt.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:46 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