Delphi-Version: 10 Berlin
ListView - Text auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Tag zusammen,
Ich Kündige vorher an : ich bin ein absoluter Neuling was Delphi (RAD-Studio 10.1) angeht und habe auch schon die Suchfunktion benutzt-> leider bin ich nicht fündig geworden. Es geht um folgendes: Ich habe ein "ListView" Erstellt der mit Daten einer SQLite Datenbank bestückt wird. Hierbei geht es um 3 "Spalten" pro "Item" [das habe ich einfach mit 3 Text Feldern innerhalb des Items realisiert]. -> siehe Screenshot1. Frage : Nun muss ich aber an den Inhalt des 3ten Text Elements, der Aktuell ausgewählten Zeile rankommen und diesen abspeichern können - was brauche ich dafür? Wenn ich irgendwelche Informationen Vergessen habe gebt mir einfach bescheid :) Mein bisheriger (bester) Ansatz sah ca. so aus -> var := Listview1.Items[Listview1.Selected].Item[3].tostring Ich danke euch jetzt schon einmal! Grüße Gerri |
AW: ListView - Text auslesen
Zitat:
|
AW: ListView - Text auslesen
Hi Glados,
Sorry wenn ich mich unklar ausgedrückt habe. Würde das was ich brauche als den "wert" bezeichnen der dem Textfeld("Text3") hinterlegt ist. |
AW: ListView - Text auslesen
Du meinst aber nicht irgendwas innerhalb einer DB oder?
Wenn du die gelb markierten Dinger meinst, das nennt man Nodes oder Knoten. Ich weiß jetzt nicht wie das Property bei der Komponente heißt. Aber "Text3" <= bei dem Ding spricht man in der Regel von Caption oder Text. Ich habe das jetzt so verstanden, dass du den Text des Knotens haben willst? |
AW: ListView - Text auslesen
Hört sich so an als würdest du das richtige verstanden haben.
Die DB hat damit nichts mehr zu tun, brauche dann von dem Node nur den Text. Ich verbessere mich falls wir doch an einander vorbei reden :) Gerri |
AW: ListView - Text auslesen
Guck dir das hier mal an >> http://www.delphipraxis.net/113201-l...-subitems.html
Eines verstehe ich nur nicht. Ich habe noch nie eine ListView mit Nodes gesehen?! Sicher, dass deine Komponente einen TListView ist? |
AW: ListView - Text auslesen
Kann es sein, dass das ListView in Wahrheit ein TreeView ist? :-) :glaskugel:
|
AW: ListView - Text auslesen
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.
|
AW: ListView - Text auslesen
Wobei ich bei noch genauerem Hingucken glaube, dass das dort oben im Bild die "Struktur"-Anzeige aus der Delphi-IDE ist... :-)
Also vielleicht doch TListView. In dem Fall wäre "SubItems" das hoffentlich richtige Stichwort für den TE. |
AW: ListView - Text auslesen
Was man da sieht ist glaub ich nicht seine ListView oder eine TreeView sondern das Ding aus der IDE, weiß gerade nicht wie es heißt. Projekt-Explorer?
Davon ggf. nicht verwirren lasen. |
AW: ListView - Text auslesen
Zitat:
|
AW: ListView - Text auslesen
Hi Leute,
ist tatsächlich die Ansicht aus der IDE -> sollte aber ein listview sein !:) Ich lese mich mal in das Subitem Thema ein und melde mich dann noch einmal :) Gruß Gerri edit :jip ist von FMX @ Glados & Uwe |
AW: ListView - Text auslesen
Hallöle...:P
Unabhängig von der verwendeten Komponente, ließt man die Werte nie aus dem visuellen Control sondern aus den Quelldataset. :thumb: |
AW: ListView - Text auslesen
Zitat:
|
AW: ListView - Text auslesen
Guten Abend,
Vorab: ich komme erst morgen dazu mir das ganze nochmal anzuschauen. Grundsätzlich sollte das auslesen aus dem Listview erst einmal reichen(ist ein Einarbeitungs Projekt). Allerdings bin ich natürlich auch für "Best Practice" - Lösungen Offen. Mein Problem Dabei ist das ich keine Ahnung habe wie ich von den Bereits eingetragenden Items (aus der DB) einen Rückschluss auf den PK des Datensatzes bekomme - wenn da jemand eine schöne Lösung kennt würde ich auch das in betracht ziehen :-D Melde mich Morgen wieder, einen Schönen Abend euch ! P.S. Anfänger heißt bei mir 40 Stunden insgesamt damit auseinander gesetzt und davon 20 Stunden Dokumentation gelesen :lol: |
AW: ListView - Text auslesen
Speichere die PK als Objekt in den Items der ersten Spalte.
|
AW: ListView - Text auslesen
Hi :)
Wäre über ein kleines Code Beispiel(oder kleine Anleitung für "Klick Klick hurra" Sehr Dankbar. Mir fehlt Aktuell einfach der Durchlick, da die IDE durch das ganze "klick klick Hurra" einfach die sicht auf die Dinge Extrem Trübt. |
AW: ListView - Text auslesen
Zwar für eine Listbox, aber das Prinzip ist das gleiche.
http://michael-puff.de/Programmierun...ddObject.shtml |
AW: ListView - Text auslesen
Zitat:
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. :-D 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. |
AW: ListView - Text auslesen
Moin...:P
Zitat:
...zum Thema: Beispiel mit Objekten:
Delphi-Quellcode:
Werte auslesen:
// 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;
Delphi-Quellcode:
Beispiel mit Dataset:
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)
Delphi-Quellcode:
Werte auslesen:
// 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;
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 |
AW: ListView - Text auslesen
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
|
AW: ListView - Text auslesen
Erstmal ein Großes Danke an alle Antwortenden ! :D
Ich werde jetzt versuchen das ganze zeug zu verstehen und umzusetzen und wenn probleme auftreten melde ich mich :) Gruß Gerri:-D |
AW: ListView - Text auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
AW: ListView - Text auslesen
Liste der Anhänge anzeigen (Anzahl: 2)
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
Delphi-Quellcode:
sieht soweit OK aus. Allerdings heißt das nicht, dass du nicht evtl. vergessen hast, überhaupt (Sub)Items hinzuzufügen.
ListView1.Items[1].Subitem[3];
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:
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.
0 = Text vom Hauptitem
1 = Text vom Subitem 1 2 = Text vom Subitem 2 3 = Text vom Subitem 3 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 ... :wink:
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. |
AW: ListView - Text auslesen
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. :oops: Gruß Gerri |
AW: ListView - Text auslesen
Item muss als
Delphi-Quellcode:
deklariert werden.
TListItem
Das T beachten. Hast du dir mein Beispielprojekt angeschaut? |
AW: ListView - Text auslesen
Zitat:
Ist es bei mir natürlich auch ein "TListItem" - trotzdem das selbe Problem :lol: - das ganze kommt aus deinem beispiel, ich probiere gerade ein wenig herum :) |
AW: ListView - Text auslesen
Zitat:
|
AW: ListView - Text auslesen
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:
Kann natürlich auch sein, das ich irgendwas nicht mitbekommen habe, dann bitte ignorieren. :)
var
item: TListViewItem; begin item := ListView1.Items.Add; item.Text := 'asdasd'; end; |
AW: ListView - Text auslesen
Zitat:
|
AW: ListView - Text auslesen
Gerne Doch :
Also Ich arbeite mit einem TListView Namens "ListView_DB" für diesen gibt es im "Type" bereich die folgende Dekleration:
Code:
Dazu muss ich sagen das der Listview nicht per Hand erstellt wurde, sondern einfach per Drag and Drop reingezogen und einer "BindingList" und "Live-Bindings" mit der Datenbank verknüpft ist.
ListView_DB: TListView;
Danach folgt weiter unten die procedure die ein Button auslöst -> nur aktuell zum testen gedacht.
Code:
procedure TForm_Main_Main.btn_del_from_DBClick(Sender: TObject);
var i : Integer; Item: TListItem; begin showmessage(ListView_DB.Items.AppearanceItem[1].Text); Item := ListView_DB.Items.Add; item.caption := Format('Main Item &d' , [1]); end; Das ist nun auch der Code der so 1 zu 1 im Quellcode seht :) Wenn wir über den Punkt des erstellens der Subitems weg sind, würde ich diese gerne per live-binding einbinden -> nur als Leitfaden wo ich hin möchte. Wenn irgend etwas relevantes fehlt bitte bescheid geben:shock: |
AW: ListView - Text auslesen
Und nein ich kenne den unterschied nicht ! :D
Wie gesagt 40 Stunden -> mehr Erfahrung habe ich nicht. Danke für eure Geduld :-P |
AW: ListView - Text auslesen
Zitat:
Delphi-Quellcode:
oder eher
VCL.Forms, VCL.Controls
Delphi-Quellcode:
. Wenn ersteres, dann sprechen wir von der gleichen Art von Projekt. Wenn letzteres, dann ist es FMX und ich bin raus. Auch mein Beispiel ist dann zum Großteil ungültig würde ich sagen. Lediglich die Art wie ich es gemacht habe kannst du dann übernehmen.
FMX.Forms, FMX.Controls
Das wäre mal ein Anhaltspunkt um das noch sicherzustellen. |
AW: ListView - Text auslesen
Habe gerade nochmal drübergelesen. Dein SourceCode sagt es eigentlich schon. Habe es gerade ausprobiert. Du hast doch eine FMX Anwendung. Dann ist es klar, warum mein Beispiel nicht funktioniert. Da wäre jetzt höchstens noch die Frage, ob es unbedingt für den Anfang eine FMX Anwendung sein muss.
|
AW: ListView - Text auslesen
es ist FMX ... :(
Danke dir trotzdem ! - was ist im groben der unterschied zwischen den beiden ? :) |
AW: ListView - Text auslesen
Naja - ich habe nun schon alles mit FMX gemacht und mir fehlen nur noch 2-3 Punkte dann bin ich durch.
Von daher dachte ich, ich bring das erstmal zuende bevor ich wieder alles über den haufen werfe :) |
AW: ListView - Text auslesen
VCL = nur Windows
FMX = plattformübergreifend (also auch iOS und Android) So ganz grob. :-D Du kannst unter FMX auch schönere Animationen machen als unter VCL usw. Aber ich habe mich damit wie gesagt noch nicht beschäftigt. Daher kann ich an dieser Stelle auch nicht mehr weiterhelfen. |
AW: ListView - Text auslesen
Multiplatform ist leider unumgänglich -> Deswegen habe ich erst mit Delphi angefangen.
Ich danke dir trotzdem für deine Zeit! :) Damit wären wir wieder bei meinem alten Problem : Wie füge ich einem FMX.TListView Subitem hinzu ?:-D Gruß Gerri |
AW: ListView - Text auslesen
Fals du noch nicht weitergekommen bist. Subitems gibt es in der FMX ListView nicht,
jedenfalls nicht in der selben Begrifflichkeit wie in VCL. Ist ein bischen aufwendiger das Ganze, aber dafür individualisierbarer. Ich hoffe ich gebe das richtig wieder, aber in FMX gibt es nicht nur DAS Item in einer Listview, sondern ein Hauptobjekt das als Container dient aber selbst keine Daten zur Anzeige bereithält und beliebig viele andere Objekte mit den einzelnen Bedürfnissen (Buttons, Text, Bilder usw.). Laut deinem Screenshot hast du das ja schon mit Text1, Text2, Text3 als DynamicAppearance unter ItemAppearance eingestellt, sonst würde es da ja glaub ich nicht so drin stehen (können). Ansonsten hier nochmal vom Schöpfer: DynamicAppearance. Anbei das einfachste Hinzufügen und Auslesen der Items. Gibt bestimmt noch unzählige andere Wege damit zu arbeiten. Hinzufügen:
Delphi-Quellcode:
2x Auslesen
procedure TForm1.FormShow(Sender: TObject);
var item: TListViewItem; textItem: TListItemText; begin item := ListView1.Items.Add; textItem := item.Objects.FindObjectT<TListItemText>('Text1'); textItem.Text := 'Item 1 Hallo 1'; textItem := item.Objects.FindObjectT<TListItemText>('Text2'); textItem.Text := 'Item 1 Hallo 2'; textItem := item.Objects.FindObjectT<TListItemText>('Text3'); textItem.Text := 'Item 1 Hallo 3'; item := ListView1.Items.Add; textItem := item.Objects.FindObjectT<TListItemText>('Text1'); textItem.Text := 'Item 2 Hallo 1'; textItem := item.Objects.FindObjectT<TListItemText>('Text2'); textItem.Text := 'Item 2 Hallo 2'; textItem := item.Objects.FindObjectT<TListItemText>('Text3'); textItem.Text := 'Item 2 Hallo 3'; end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; begin for i := 0 to ListView1.Items.Count - 1 do begin ShowMessage(ListView1.Items[i].Objects.FindObjectT<TListItemText>('Text3').Text); end; end;
Delphi-Quellcode:
procedure TForm1.ListView1ItemClick(const Sender: TObject;
const AItem: TListViewItem); begin ShowMessage(AItem.Objects.FindObjectT<TListItemText>('Text3').Text); end; |
AW: ListView - Text auslesen
Hi Towmuz!
du bist mein Retter-> Genau das brauchte ich :thumb: Es läuft so wie ich es wollte bzw erwartet habe :) Danke an alle die mir versucht haben zu helfen und besonderen dank an Towmuz! Thema kann geschlossen werden. Viele Grüße Gerri |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 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