AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Drag & Drop in TListView mit TStringList

Ein Thema von linus_wildcat · begonnen am 25. Mai 2020 · letzter Beitrag vom 26. Mai 2020
Antwort Antwort
linus_wildcat

Registriert seit: 25. Jun 2008
Ort: Hamburg
33 Beiträge
 
Delphi 10.3 Rio
 
#1

Drag & Drop in TListView mit TStringList

  Alt 25. Mai 2020, 22:09
Hallo zusammen,

ich habe echt gesucht und gelesen und war sogar "in der Schweiz", aber meine Problemstellung, bzw. die Lösung habe ich noch nicht gefunden.

Ich habe eine TListview, welche Elemente anzeigt (MP3s-Namen).
Dahinter verbirgt sich aber eine Stringlist, in der diese Namen und einige Metadaten dazu mit ; getrennt abgelegt sind.
Wenn ich also visuell mit der Maus oder über Buttons an der Reihenfolge etwas mache, habe ich ja immer den Index des Elementes und kann über StringList.Move auch die Elemente in der Stringlist tauschen.
Auch bei Drag & Drop für EIN Element habe ich eine Methode gefunden.

Aber wenn ich mehrere markierte Elemente per DnD verschieben möchte scheitere ich.

Das Beispiel aus dem SwissDelphiCenter würde ich ja gerne verwenden, kapier es aber irgendwie nicht.
Wie bekomme ich hier für jedes Element den Quellindex und den Zielindex?

Vielleicht sehe ich ja den Wald vor lauter Bäumen nicht.....

Danke schon mal...

Kai
Kai
  Mit Zitat antworten Zitat
Strict

Registriert seit: 25. Mär 2020
47 Beiträge
 
#2

AW: Drag & Drop in TListView mit TStringList

  Alt 25. Mai 2020, 22:12
Zitat:
Dahinter verbirgt sich aber eine Stringlist, in der diese Namen und einige Metadaten dazu mit ; getrennt abgelegt sind.
Schonmal an eine virtuelle ListView gedacht?
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
779 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Drag & Drop in TListView mit TStringList

  Alt 25. Mai 2020, 22:36
Also du hast eine einzige StringList mit einem Eintrag pro TListItem? Das ist extrem unklug, da der einzige Bezug über TListItem.Index erfolgt, was aber variabel ist. Viel einfacher wäre es, wenn sich die Daten gezwungenermaßen mit dem TListItem bewegen. Dazu gibt es verschiedene Ideen:
  • Den String in TListItem.SubItems.Text ablegen, sofern das sonst nicht genutzt wird
  • Statt der TStringList ein TDictionary<TListItem, string> verwenden
  • In der TStringList nichts tun, was die Indizes der Einträge verändert, und diese Indizes über einen Cast von/nach NativeInt in TListItem.Data speichern
  • TListItem vererben und den String in einem neuen Feld speichern
Danach kann man nochmal über DnD sprechen, wenn es da nicht schon was Fertiges gibt, da man dann so ziemlich jeden Algorithmus nutzen kann, der die TListItems verschiebt.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
linus_wildcat

Registriert seit: 25. Jun 2008
Ort: Hamburg
33 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Drag & Drop in TListView mit TStringList

  Alt 26. Mai 2020, 12:14
Asche auf mein Haupt.....das passiert wenn man zwischen Delphi 7 und 10.3 mit dem Programmieren pausiert

Aber danke, ihr habt mich auf die richtige Fährte geschickt.

Die Stringliste mit zig Einträgen im Format NAME;Meta1;Meta2;Meta3 habe ich nun komplett verworfen und arbeite nur noch mit der Listview und Items (= NAME) und SubItems (= Metas).
Durch den Spalteneditor kann ich ja dafür sorgen, dass ich nur die Namen sehe.

Und da ich nur noch mit einem "Objekt" arbeite, ist das speichern und eben auch Dnd deutlich einfacher.

Kai
  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 +2. Es ist jetzt 22:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf