![]() |
TListView Problem
Hallo.
Ich habe hier zwei kleine Probleme. Erstens: Wenn ich einen TListView erstelle und Columns einfüge sehe ich sie nicht. Da ist bestimmt wieder etwas ganz einfaches daneben gegangen, das ich nur wieder nicht erkenne..... Und zweitens: Wie kann ich einen Registry-Key, (auslesen bekomme ich hin) am besten noch alle, in einem Ordner, so in die LiestVew, wie sie in den drei Kategorien im RegEditor stehen? Also Name | Typ | Wert ? Danke schonmal |
Re: TListView Problem
Stelle mal den Style auf vsReport.
|
Re: TListView Problem
Hallo,
1. Eigentlich kommt pro Thread nur eine Frage dran ;) 2. schau dir mal die Eigenschaft ViewStyle an. 3. Schau dir mal die Methode Add von der Items-Eigenschaft an:
Delphi-Quellcode:
var
li : TListItem; begin li := ListView1.Items.Add; li.Caption := 'Spalte 1'; li.SubItems.Add('Splate 2'); end; |
Re: TListView Problem
Okay nächstes mal nur eine Frage.
Aber ich muss trotzdem noch einmal nachfragen:
Delphi-Quellcode:
var
Keys: TStringList; Reg: TRegistry; begin reg:= TRegistry.Create; Keys:= TStringList.Create; reg.RootKey:= HKEY_LOCAL_MACHINE; if reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', False) then begin //hier sollen die Keys in die ListView1 (mit 3 Columns, wie im regedit) end; Reg.Free; end; Ich bekomm dort wo die Anmerkung ist nichts hin. Ich kann die RegistryKeys (oder besser ValueNames) nicht in eine String List schreiben. Auch wenn cih das schaffte, bekäme ich sie von dort aus nicht in die Columne hinein. Ich verstehe nciht ganz, warum. |
Re: TListView Problem
Wie hast du es denn probiert?
|
Re: TListView Problem
Delphi-Quellcode:
Damit. Aber die Typen sind ja nicht kompatibel. Das ist mir auch klar aber ihc habe keine andere Idee.....
Keys:= Reg.GetValueNames(Keys);
Ich habe ncoh nie vorher mit der Registry gearbeitet. |
Re: TListView Problem
Delphi-Quellcode:
Reg.GetValueNames(Keys);
|
Re: TListView Problem
/"(/&§)("§/)"§("§ <- Zensiert xD
Warum bin ich da jetzt nicht drauf gekommen? Mit dem einfügen in die Tabelle des Listview ist es wahrscheinlich nicht viel anders oder? Wenn ich dies:
Delphi-Quellcode:
verwende geht es natürlich wieder nicht.
ListView1.AddItem(Keys);
Wäre schön, wenn ihr mir da noch einmal helfen könntet. |
Re: TListView Problem
Hallo,
#3 zeigt dir das einfügen. Da es sich um eine Liste (TStringList) handelt, nimmst du eine for-Schleife. Heiko |
Re: TListView Problem
Irgendwie erschließt sich mir das nicht.
Sorry, dass ich nochmal fragen muss. For schleife hab ich schonmal benutzt....War dann aber unpassend und bin dann zu ner Case Of schleife gesprungen, also hab ich wenig ahnung von for-Schleifen. Ich rall nciht, wie ich das da rein krieg? Hoffe ihr könnt mir das nochmal erklären. |
Re: TListView Problem
Wie kann man denn eine Schleife durch eine Verzweigung ersetzen?
|
Re: TListView Problem
Jupp, die Case-Of-Anweisung ist keine Schleife. Dort wird nichts wiederholt ausgeführt.
Das folgende Beispiel zeigt mal einen Ansatz, macht aber noch nicht ganz das, was du haben möchtest (selber groß ;) ). Das Beispiel ist dazu da, damit du siehst, wie man mit der Registry arbeitet. Die Try-Finally-Blöcke sind wichtig. Falls Fehler dazwischen auftreten, wird der Speicher für die Objekte dennoch freigegeben. Auch zeigt das Beispiel, wie man lesend auf die Registry zugreift (dir reicht der lesende Zugriff). Mit eingeschränkten Benutzerrechten bleibt deine ListView sonst immer leer (soeben getestet)!
Delphi-Quellcode:
Grüße, Matze
Reg:= TRegistry.Create;
try Keys := TStringList.Create; try Reg.RootKey:= HKEY_LOCAL_MACHINE; if Reg.OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion\Run') then begin Reg.GetValueNames(Keys); for i := 0 to Keys.Count - 1 do begin lItem := ListView1.Items.Add; lItem.Caption := Keys[i]; end; Reg.CloseKey; end; finally Keys.Free; end; finally Reg.Free; end; Edit: Wir haben "CloseKey" bisher ganz unterschlagen. |
Re: TListView Problem
Dann will ich auch noch mal:
Delphi-Quellcode:
uses
Registry; procedure TForm2.Button1Click(Sender: TObject); var Keys: TStringList; Reg: TRegistry; i: Integer; li: TListItem; begin Reg := TRegistry.Create(KEY_READ); Keys := TStringList.Create; try try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('SOFTWARE\Microsoft\Microsoft Antimalware', False) then begin Reg.GetKeyNames(Keys); for i := 0 to Keys.Count - 1 do begin li := ListView1.Items.Add; li.Caption := Keys.Strings[i]; end; end else raise Exception.Create('Schlüssel konnte nmicht geöffnet werden'); except on E: Exception do ShowMessage(E.Message); end; finally Reg.Free; Keys.Free; end; end; |
Re: TListView Problem
Die sehen beide gut aus, und ich hab es auch beides ausprobiert. Es gibt auch keine Errormeldung bis auf die Tatsache, dass ich einfach keine Ausgabe in der ListView bekomme.....
Oder hab ich wieder was leichtes übersehen? |
Re: TListView Problem
Hat dein Listview auch mindestens eine Spalte und steht der ViewStyle auf vsReport?
|
Re: TListView Problem
Jap
|
Re: TListView Problem
Wie "Jap"? Funktioniert es jetzt?
|
Re: TListView Problem
Vermutlich nicht. Er hat die ListView so eingestellt, wie du es gefragt hast:
Zitat:
Zitat:
|
Re: TListView Problem
Dann kann ich auch nicht weiterhelfen ohne mehr Informationen.
|
Re: TListView Problem
Ich auch nicht. Mein Beispiel funktioniert bei mir definitiv. Deines sieht sehr ähnlich aus und sollte auch klappen.
|
Re: TListView Problem
Ist getestet. Funktioniert einwandfrei.
|
Re: TListView Problem
Weitere Infos:
Vielleicht ist das das Problem: Ich sehen in meinem ListView zwar die Columns aber nicht das Raster. Hat das was zu sagen? 2.:Ich hab gemerkt, dass der Scroll-Balken immer kleiner wird, wenn cih oft drauf drücke ( auf den button ), und tatsächlich steht in der Column[0] 'OptionalComponents'. Allerdings ist davor so ca 20 Zeilen leer. Irgendwie komisch. |
Re: TListView Problem
Hänge mal ein Demo-Projekt mit deinem Code an. Dann gucke ich mir das mal an. Aber beeile dich nach meinem fünften Southern-Cola könnte das nicht mehr klappen. ;)
|
Re: TListView Problem
Hallo,
ListView.GridLines:= Trure ? Heiko |
Re: TListView Problem
Liste der Anhänge anzeigen (Anzahl: 3)
Ok. hier ist es
|
Re: TListView Problem
Liste der Anhänge anzeigen (Anzahl: 3)
Wenn ich "Application.MainFormOnTaskbar := True;" in der dpr-Datei auskommentiere, geht der Code bei mir einwandfrei.
Ich sehe nach Klick auf "Get" einen Eintrag in der ListView "OptionalComponents". Wähle ich als Pfad z.B. "SOFTWARE\Microsoft\Windows", dann sehe ich entsprechend mehrere Einträge. Um die Spalten 2 und 3 musst du dich natürlich noch selbst kümmern (steht übrigens alles in der DP). Aber die erste Spalte wird korrekt gefüllt. Edit: Luckie nutzt "GetKeyNames". Ich habe in meinem oberen Code "GetValueNames" verwendet. Vielleicht suchst du das (einfach "GetKeyNames" durch "GetValueNames" ersetzen). Je nachdem, was du anzeigen möchtest. Mein Code erzeugt die Ausgabe im Anhang "matze", deins das im Anhang "luckie". Der Anhang "matze_erweitert" erzeugt eine Ausgabe, wie du sie dir vielleicht vorstellst, nur für einen anderen Registry-Schlüssel (ich kaue dir aber nicht alles vor). |
Re: TListView Problem
Zitat:
|
Re: TListView Problem
Wow. Das einzige was falsch war, war dass ich die ganze Zeit über GetKeyNames genommen hab. Das funktioniert natürlich nciht. Danke Leute ich hab es jetzt.
Falls nachfolgende nocheinmal das Problem haben, hier mein code. (Vorhanden ist ein LiestView1 mit 3 Subitems, in denen die Registry aufgeführt werden soll.
Delphi-Quellcode:
Vielleicht postet ja noch jemand die Möglichkeit einen RegistryKey-Type als String zu bekommen.
procedure GetValues(Sender: TObject);
var Keys: TStringList; Reg: TRegistry; i: Integer; li: TListItem; begin Reg := TRegistry.Create(KEY_READ); Keys := TStringList.Create; try try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', False) then begin Reg.GetValueNames(Keys); for i := 0 to Keys.Count - 1 do begin li := ListView1.Items.Add; li.Caption := Keys.Strings[i]; li.ImageIndex := 1; //li.SubItems.Add(); Hier liest man dann noch den KeyType aus. Das versuche cih auch grade noch aber ihr findet mit Sicherheit was. li.ImageIndex := 2; li.SubItems.Add(Reg.GetDataAsString(Keys.Strings[i])); end; end else raise Exception.Create('Schlüssel konnte nicht geöffnet werden'); except on E: Exception do ShowMessage(E.Message); end; finally Reg.Free; Keys.Free; end; end; |
Re: TListView Problem
Hat vielleicht noch jemand was dazu?
Ich bräuchte wirklich dringend den Type. |
Re: TListView Problem
Hallo,
also ich schaue mir immer dazu zuerst mal die Hilfe an, in diesem Fall also TRegistry. Dort steht dann TRegistry.GetDataInfo Die Methode liefert Informationen über einen bestimmten Datenwert, der zum aktuellen Schlüssel gehört. Heiko |
Re: TListView Problem
Danke.
Sonst schau ich wohl in die hilfe aber mein RAD Studio sagt mir immer n ellenlangen code und dann "Klasse nicht registriert"[...], wenn cih auf Hilfe Drücke.... |
Re: TListView Problem
Hallo,
was mal wieder ein neuer Thread ist ... Dazu steht aber auch was in Google (fehlende Registry-Einträge). Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 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 by Thomas Breitkreuz