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/)
-   -   dragDrop mit TListbox, Objekt übernehmen (https://www.delphipraxis.net/152288-dragdrop-mit-tlistbox-objekt-uebernehmen.html)

khh 17. Jun 2010 13:51


dragDrop mit TListbox, Objekt übernehmen
 
hallo zusammen,
mit
Delphi-Quellcode:
self.moeglichezusatzstoffelistbox.Items.AddObject(Tlisteninhalt(Fzusatzstoffelist.items[i]).Bezeichnung, Tlisteninhalt(Fzusatzstoffelist.items[i]));
fülle ich in einer Schleife eine Listbox aus der DB.

mit
Delphi-Quellcode:
eintrag := moeglichezusatzstoffeListBox.Items[moeglichezusatzstoffeListBox.Itemindex];
 enthaltenezusatzstoffeListBox.Items.Add(eintrag);
im ondragdrop einer empfangenden Listbox empfange ich die Einträge per Drag and Drop in eine 2te Listbox.

Leider habe ich so nur die Bezeichnung aus der Liste, die ID kommt nicht mit rüber :-(
Wie bekomme ich auch die ID in die "Empfängerbox" ohne dass diese angezeigt wird?

Danke für eure Hilfe Gruss KHH

Keldorn 17. Jun 2010 16:48

AW: dragDrop mit TListbox, Objekt übernehmen
 
Hallo,

was verstehst Du unter ID?

du fügst doch in die neue Listbox den Eintrag nur mit "add" hinzu, also ohne addobject ?

Gruß Frank

shmia 17. Jun 2010 17:04

AW: dragDrop mit TListbox, Objekt übernehmen
 
Zitat:

Zitat von khh (Beitrag 1029634)
mit
Delphi-Quellcode:
self.moeglichezusatzstoffelistbox.Items.AddObject(Tlisteninhalt(Fzusatzstoffelist.items[i]).Bezeichnung, Tlisteninhalt(Fzusatzstoffelist.items[i]));
fülle ich in einer Schleife eine Listbox aus der DB.

Mach doch erst mal den obigen Code sauber (unter Verwendung einer Zwischenvariablen):
Delphi-Quellcode:
var
  inhalt : Tlisteninhalt;
begin
  for i := 0 to .... do
  begin
    //...
    inhalt := Tlisteninhalt(Fzusatzstoffelist.items[i]);
    Assert(Assigned(inhalt)); // zur Sicherheit
    // hier Breakpoint setzen und nachschauen, was in "inhalt" steht
     
    moeglichezusatzstoffelistbox.Items.AddObject(inhalt.Bezeichnung, inhalt);
    ...
  end;

PS: unter Datei -> Neu... -> Formulare gibt es den
Dialog mit zwei Listenfeldern

Ich würde den Sourcecode studieren und dann abkupfern.
Mir scheint, du hast zwei Listen: MöglicheZusatzstoffe (Quelle )und Zusatzstoffe (Ziel).
Der Benutzer soll dann einige oder alle Stoffe von "links" nach "rechts" ziehen.
Dabei sollen auch die Objekte im Property Objects[] mitgezogen werden.
Genau dies kann der Dialog leisten.

khh 17. Jun 2010 17:17

AW: dragDrop mit TListbox, Objekt übernehmen
 
Zitat:

Zitat von shmia (Beitrag 1029705)
Zitat:

Zitat von khh (Beitrag 1029634)
mit
Delphi-Quellcode:
self.moeglichezusatzstoffelistbox.Items.AddObject(Tlisteninhalt(Fzusatzstoffelist.items[i]).Bezeichnung, Tlisteninhalt(Fzusatzstoffelist.items[i]));
fülle ich in einer Schleife eine Listbox aus der DB.

Mach doch erst mal den obigen Code sauber (unter Verwendung einer Zwischenvariablen):
Delphi-Quellcode:
var
  inhalt : Tlisteninhalt;
begin
  for i := 0 to .... do
  begin
    //...
    inhalt := Tlisteninhalt(Fzusatzstoffelist.items[i]);
    Assert(Assigned(inhalt)); // zur Sicherheit
    // hier Breakpoint setzen und nachschauen, was in "inhalt" steht
     
    moeglichezusatzstoffelistbox.Items.AddObject(inhalt.Bezeichnung, inhalt);
    ...
  end;

PS: unter Datei -> Neu... -> Formulare gibt es den
Dialog mit zwei Listenfeldern

Ich würde den Sourcecode studieren und dann abkupfern.
Mir scheint, du hast zwei Listen: MöglicheZusatzstoffe (Quelle )und Zusatzstoffe (Ziel).
Der Benutzer soll dann einige oder alle Stoffe von "links" nach "rechts" ziehen.
Dabei sollen auch die Objekte im Property Objects[] mitgezogen werden.
Genau dies kann der Dialog leisten.

Du liegst richtig mit deiner Vermutung.
Sorry, hatte vergessen zu erwähnen dass das Ganze unter lazarus läuft, da gibts diesen Dialog leider nicht :-(

shmia 17. Jun 2010 19:05

AW: dragDrop mit TListbox, Objekt übernehmen
 
Zitat:

Zitat von khh (Beitrag 1029712)
Sorry, hatte vergessen zu erwähnen dass das Ganze unter lazarus läuft, da gibts diesen Dialog leider nicht :-(

Ich könnte Dir das Formular hier einstellen oder mailen - ich weiss aber nicht, ob das legal ist.

Aber ich geb' Dir mal etwas Code zum Verschieben von Listbox-Items.
Delphi-Quellcode:
// Alle selektierten Items einer ListBox in die Liste "Items" verschieben
// die Reihenfolge der selektierten Items bleibt erhalten
// anhängende Objekte werden mitverschoben
class procedure TDualListDlg.MoveSelected(List: TCustomListBox; Items: TStrings);
var
  I, ipos: Integer;
  tmp:string;
begin
  ipos := Items.Count; // Einfügeposition (am Ende)
  for I := List.Items.Count - 1 downto 0 do
    if List.Selected[I] then
    begin
      Items.InsertObject(ipos, List.Items[I], List.Items.Objects[I]);
      List.Items.Delete(I);
    end;
end;

Beispielaufrufe:
Delphi-Quellcode:
MoveSelected(ListBoxAlleStoffe, ListBoxGewaehlteStoffe.Items);
// oder rückwärts
MoveSelected(ListBoxGewaehlteStoffe, ListBoxAlleStoffe.Items);

khh 18. Jun 2010 07:30

AW: dragDrop mit TListbox, Objekt übernehmen
 
danke dir, werd ich so mal probieren

Gruss KHH

khh 18. Jun 2010 10:43

AW: dragDrop mit TListbox, Objekt übernehmen
 
oki
mit
Code:
class procedure TDualListDlg.MoveSelected(List: TCustomListBox; Items: TStrings);
var
  I, ipos: Integer;
  tmp:string;
begin
  ipos := Items.Count; // Einfügeposition (am Ende)
  for I := List.Items.Count - 1 downto 0 do
    if List.Selected[I] then
    begin
      Items.InsertObject(ipos, List.Items[I], List.Items.Objects[I]);
      List.Items.Delete(I);
    end;
end;
in etwas abgeänderter Form
und
Code:
MoveSelected(moeglichezusatzstoffeListBox, enthaltenezusatzstoffeListBox.Items);
kopiere(verschiebe) ich die Einträge in die ZielLisbox
funktioniert einwandrei.
Aber ich steh immer noch auf dem Schlauch :-(

Wie komm ich jetzt an die Eintrage in der Zielbox ran? ich brauch dort nur die id?


Danke Gruss KHH

khh 18. Jun 2010 11:45

AW: dragDrop mit TListbox, Objekt übernehmen
 
ich habs,
für die die es interessiert: :-)

Code:
 Fzusatzstoffe := Thwdlisteninhalt(Fhwdzusatzstoffelist.items[i]);
 id := Fzusatzstoffe.DATENBANK_ID;
Ich danke euch

Gruss KHH


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