AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListView - Text auslesen

Ein Thema von Gerri · begonnen am 28. Sep 2017 · letzter Beitrag vom 4. Okt 2017
Antwort Antwort
Seite 1 von 2  1 2      
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: ListView - Text auslesen

  Alt 29. Sep 2017, 00:30
Wenn es um TreeViews jeglicher Art geht, dann ist der Profi hier im Forum Aviator. Sicherlich auch noch andere aber mir ist nur er bekannt.
Danke für das Lob.

Allerdings beschränkt sich mein (doch ganz gutes) Wissen über TreeViews hauptsächlich auf den VirtualTreeView. Mit dem Standard TreeView arbeite ich eigentlich kaum bis gar nicht. Aber klar. Der normale TreeView arbeitet auch nur mit ParentNodes und ChildNodes. Als ebenso guten TreeView Kenner würde ich aber gerne noch jeanicke in den Raum werfen wenn wir schon dabei sind.

Es wäre nur doch interessant zu wissen, ob es sich hier um ein TTreeView oder TListView handelt. Weil das sind zwei total unterschiedliche Komponenten. Es sei denn ich habe es überlesen.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#2

AW: ListView - Text auslesen

  Alt 29. Sep 2017, 07:41
Moin...
Zitat:
Ich denke für einen Anfänger ist das Auslesen aus dem Control erst einmal alles was er braucht.
Das denke ich nicht. Ich hätte manche Fehler damals nicht gemacht, wenn ich die DP schon gehabt hätte und mir jemand gezeigt hätte wie man es "richtig" (Da gibt es 1000 Varianten ) macht. Klar muß man sich auf den Kenntnisstand einstellen, aber die visuellen Komponenten als Datenablage zu mißbrauchen rächt sich später. Was kostet es mehr es gleich richtig zu machen... Erst recht als Einsteiger sollte man DRY und KISS schon gehört haben.

...zum Thema:
Beispiel mit Objekten:
Delphi-Quellcode:
// das Datenobjekt (ähnlich wie der Datensatz im Dataset)
  TCustomer = class
  strict private
    FName: string;
    FTown: string;
    FFirstName: string;
  public
    constructor Create;
    destructor Destroy; override;
    property Name: string read FName write FName;
    property FirstName: string read FFirstName write FFirstName;
    property Town: string read FTown write FTown;
  end;
...
// die Liste (ähnlich wie TDataSet)
  TCustomerList = TObjectList<TCustomer>; // generische Liste
...
//Implementierung
procedure TfoMain.ShowCustomerList(List: TCustomerList);
var
  Item: TListItem;
  Customer: TCustomer;
begin
  lvCustomers.Items.Clear;
  for Customer in List do
  begin
    Item:= lvCustomers.Items.Add;
    Item.Data:= Customer; // Das komplette Objekt (Pointer) hängt an dem Eintrag
    Item.SubItems.Add(Customer.Name);
    Item.SubItems.Add(Customer.FirstName);
    Item.SubItems.Add(Customer.Town);
    Item.ImageIndex:= 99; // der Index des Images aus der Imagelist der Listview
  end;
  lvCustomers.Items.Item[0].Selected := True; // ersten Eintrag markieren...oder so
end;
Werte auslesen:
Delphi-Quellcode:
var
  Customer: TCustomer;
  Town: string
...
Customer := TCustomer(lvCustomer.Data); // über die Zwischenvariable ist der Quelltext dann besser lesbar :-)
Town := Customer.Town; // nicht aus dem ListView lesen sondern aus der Liste über den Pointer (automatisch)
Beispiel mit Dataset:
Delphi-Quellcode:
// das TDataSet
* auf dem Datenmodul als Komponente
...
//Implementierung
procedure TfoMain.ShowCustomerList(DataSet: TDataSet);
var
  I: Integer;
  Item: TListItem;
begin
  lvCustomers.Items.Clear;
  DataSet.First;
  while not DataSet.Eof do
  begin
    Item:= lvCustomers.Items.Add;
    Item.Data:= TObjekt(Dataset.FieldByName('ID').AsInteger); // Der PK (PrimaryKey) hängt an dem Eintrag
    Item.SubItems.Add(Dataset.FieldByName('NAME').AsString);
    Item.SubItems.Add(Dataset.FieldByName('FIRSTNAME').AsString);
    Item.SubItems.Add(Dataset.FieldByName('TOWN').AsString);
    Item.ImageIndex:= 99; // der Index des Images aus der Imagelist der Listview
    DataSet.Next;
  end;
  lvCustomers.Items.Item[0].Selected := True; // ersten Eintrag markieren...oder so
end;
Werte auslesen:
Delphi-Quellcode:
var
  Town: string
...
DataSet.Locate('ID', Integer(lvCustomer.Data),[]); // positionieren des DataSets auf den Datensatz mit dem richtigem PK
Town := DataSet.FieldByName('TOWN').AsSting; // nicht aus dem ListView lesen sondern aus dem DataSet
  Mit Zitat antworten Zitat
Towmuz

Registriert seit: 21. Sep 2016
Ort: Minden
127 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: ListView - Text auslesen

  Alt 29. Sep 2017, 10:46
Da es sich scheinbar um eine FMX Anwendung handelt und das Listview dort nicht gleich zu behandeln ist wie das in VCL, würde ich mal hier lesen und probieren http://www.delphipraxis.net/183937-t...ect-daten.html
Thomas
  Mit Zitat antworten Zitat
Gerri

Registriert seit: 28. Sep 2017
26 Beiträge
 
#4

AW: ListView - Text auslesen

  Alt 29. Sep 2017, 11:17
Erstmal ein Großes Danke an alle Antwortenden !

Ich werde jetzt versuchen das ganze zeug zu verstehen und umzusetzen und wenn probleme auftreten melde ich mich


Gruß
Gerri
  Mit Zitat antworten Zitat
Gerri

Registriert seit: 28. Sep 2017
26 Beiträge
 
#5

AW: ListView - Text auslesen

  Alt 29. Sep 2017, 14:12
Nach langem hin und her eine kurze Zusammenfassung:

Ich habe mich nun über die "Objekt in Listview.Item" Idee informiert und bin zu dem entschluss gekommen das ich erst einmal nicht damit arbeiten möchte.[Würde nämlich heißen das ich alles bisher geschriebene umschreiben müsste - beim nächsten projekt wird das dann von vorne rein anders gehandhabt ]


Also zurück zu der Subitem-asulesen Idee:

Ich habe nun Versucht(wie hierbeschrieben http://www.delphipraxis.net/113201-l...-subitems.html) via

ListView1.Items[1].Subitem[3];


#1 Allerdings bekomme ich da nur die meldung das "items" kein Subitem enthält und kann mich somit nicht weiter durch die methoden hangeln um den entsprechenden string zu erhalten.


komme mir wenn ich danach google vor wie der ochse vorm Wald -> Es scheint für alle selbstverstädnlich zu sein -> für mich ist es allerdings ein misterium.


Und um die Frage ob es ein Listview ist oder nicht zu klären -> Ja es ist definitiv einer (Siehe Anhang)


Ich hoffe ihr könnt mir weiterhalfen

Gruß
Gerri
Angehängte Grafiken
Dateityp: png Listview.PNG (1,5 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: ListView - Text auslesen

  Alt 29. Sep 2017, 14:42
Hallo Gerri,

ich habe dir mal schnell ein kleines Beispiel zusammengeklickt mit dem du etwas rumspielen kannst. Vielleicht bringt es dich ja weiter.

Deine Zeile ListView1.Items[1].Subitem[3]; sieht soweit OK aus. Allerdings heißt das nicht, dass du nicht evtl. vergessen hast, überhaupt (Sub)Items hinzuzufügen.



Kurze Erklärung zum Programm:

Beim Start der Anwendung wird im OnShow Event der Form der Header der TListView Komponente erzeugt. Danach werden ein paar Items hinzugefügt. Das ist ein Random Wert zwischen 1 und 100.

In der SpinEdit Komponente kannst du auswählen, welcher Text in dem Label unter dem ListView angezeigt werden soll.

Code:
0 = Text vom Hauptitem
1 = Text vom Subitem 1
2 = Text vom Subitem 2
3 = Text vom Subitem 3
Im Anhang ist ein kompiliertes Beispiel enthalten. Da du im Eröffnungspost angegeben hast, dass du Delphi Berlin verwendest, sollte es aber kein Problem für dich sein, die Anwendung erneut (mit Änderungen) zu kompilieren.


Anbei mal noch der SourceCode und ein Bild der Anwendung, damit andere da direkt Einblick haben ohne sich das ganze Projekt laden zu müssen.


Viel Spaß damit. Wenn du Fragen dazu hast ...

Delphi-Quellcode:
unit Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.Samples.Spin, System.UITypes;

type
  TfrmListViewSample = class(TForm)
    lv1: TListView;
    Label1: TLabel;
    btnGetItemText: TButton;
    seColumnSelector: TSpinEdit;
    lblItemCaption: TLabel;
    procedure FormShow(Sender: TObject);
    procedure btnGetItemTextClick(Sender: TObject);
  private
    procedure CreateHeader;
    procedure CreateItems;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmListViewSample: TfrmListViewSample;

implementation

{$R *.dfm}

procedure TfrmListViewSample.FormShow(Sender: TObject);
begin
  CreateHeader;
  CreateItems;
end;

procedure TfrmListViewSample.btnGetItemTextClick(Sender: TObject);
begin
  if Assigned(lv1.Selected) then
  begin
    if (seColumnSelector.Value = 0) then
      lblItemCaption.Caption := lv1.Selected.Caption
    else
      lblItemCaption.Caption := lv1.Selected.SubItems[seColumnSelector.Value - 1];
  end
  else
  begin
    MessageDlg('Es wurde kein Item ausgewählt.', mtWarning, [mbOK], 0);
  end;
end;

procedure TfrmListViewSample.CreateHeader;
var
  i: Integer;
  Column: TListColumn;
begin
  for i := 0 to 3 do
  begin
    Column := lv1.Columns.Add;
    Column.Caption := Format('Column %d', [i]);
    Column.Width := 75;
  end;
end;

procedure TfrmListViewSample.CreateItems;
var
  Item: TListItem;
  i: Integer;
begin
  for i := 0 to Random(100) + 1 do // Damit wenigstens immer 1 Item hinzugefügt wird
  begin
    Item := lv1.Items.Add;
    Item.Caption := Format('Main Item %d', [i]);
    Item.SubItems.Add(Format('Subitem %d.1', [i]));
    Item.SubItems.Add(Format('Subitem %d.2', [i]));
    Item.SubItems.Add(Format('Subitem %d.3', [i]));
  end;
end;
end.
Angehängte Grafiken
Dateityp: png ListViewSample.png (8,4 KB, 17x aufgerufen)
Angehängte Dateien
Dateityp: zip ListViewSample.zip (974,3 KB, 14x aufgerufen)
  Mit Zitat antworten Zitat
Gerri

Registriert seit: 28. Sep 2017
26 Beiträge
 
#7

AW: ListView - Text auslesen

  Alt 2. Okt 2017, 10:28
Hi Leute,

soo... habe nun ganz einfach mal versucht ein Item mit den
besagten Code dem ListView hinzuzufügen, bereits an der Stelle

1. wo ich ein Item erstellt habe

und

2. diesem item eine caption zuweisen möchste:


Code:
.
.
.
var
    Item: ListItem;
begin
                Item := ListView_DB.Items.Add;
                item.caption:= Format('Main Item &d' , [1]);
end
.
.
.

Doch bereits hier schreit die IDE das es für "Item" keine "Caption" gibt.
Habe ich vergessen etwas zu importieren oder was tue ich falsch Oo.




Gruß
Gerri

Geändert von Gerri ( 2. Okt 2017 um 10:28 Uhr) Grund: wer schreiben kann...
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: ListView - Text auslesen

  Alt 2. Okt 2017, 10:33
Item muss als TListItem deklariert werden.

Das T beachten. Hast du dir mein Beispielprojekt angeschaut?
  Mit Zitat antworten Zitat
Gerri

Registriert seit: 28. Sep 2017
26 Beiträge
 
#9

AW: ListView - Text auslesen

  Alt 2. Okt 2017, 10:37
Item muss als TListItem deklariert werden.

Das T beachten. Hast du dir mein Beispielprojekt angeschaut?

Ist es bei mir natürlich auch ein "TListItem" - trotzdem das selbe Problem - das ganze kommt aus deinem beispiel, ich probiere gerade ein wenig herum
  Mit Zitat antworten Zitat
Towmuz

Registriert seit: 21. Sep 2016
Ort: Minden
127 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: ListView - Text auslesen

  Alt 2. Okt 2017, 10:45
Wie oben schon erwähnt, aus deinem Anfangspost und dem darin beigefügten Screenshot ergibt sich, dass du eine Geräteübergreifende Anwendung (FMX) erstellt hast.
Das VCL Listview hat keine Header und Footer in der Standard Komponente.

Anbei das Itemhinzufügen in FMX

Delphi-Quellcode:
var
  item: TListViewItem;
begin
  item := ListView1.Items.Add;
  item.Text := 'asdasd';
end;
Kann natürlich auch sein, das ich irgendwas nicht mitbekommen habe, dann bitte ignorieren.
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 08:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz