Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TListView Problem (https://www.delphipraxis.net/145757-tlistview-problem.html)

Jamah 7. Jan 2010 21:57


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

RWarnecke 7. Jan 2010 22:00

Re: TListView Problem
 
Stelle mal den Style auf vsReport.

s.h.a.r.k 7. Jan 2010 22:00

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;

Jamah 8. Jan 2010 13:33

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.

Luckie 8. Jan 2010 13:36

Re: TListView Problem
 
Wie hast du es denn probiert?

Jamah 8. Jan 2010 13:38

Re: TListView Problem
 
Delphi-Quellcode:
Keys:= Reg.GetValueNames(Keys);
Damit. Aber die Typen sind ja nicht kompatibel. Das ist mir auch klar aber ihc habe keine andere Idee.....

Ich habe ncoh nie vorher mit der Registry gearbeitet.

Luckie 8. Jan 2010 13:47

Re: TListView Problem
 
Delphi-Quellcode:
Reg.GetValueNames(Keys);

Jamah 8. Jan 2010 13:54

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:
ListView1.AddItem(Keys);
verwende geht es natürlich wieder nicht.

Wäre schön, wenn ihr mir da noch einmal helfen könntet.

hoika 8. Jan 2010 14:00

Re: TListView Problem
 
Hallo,

#3 zeigt dir das einfügen.

Da es sich um eine Liste (TStringList) handelt,
nimmst du eine for-Schleife.


Heiko

Jamah 8. Jan 2010 14:19

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.

Luckie 8. Jan 2010 14:27

Re: TListView Problem
 
Wie kann man denn eine Schleife durch eine Verzweigung ersetzen?

Matze 8. Jan 2010 14:33

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:
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;
Grüße, Matze

Edit: Wir haben "CloseKey" bisher ganz unterschlagen.

Luckie 8. Jan 2010 14:34

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;

Jamah 8. Jan 2010 14:45

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?

Luckie 8. Jan 2010 14:47

Re: TListView Problem
 
Hat dein Listview auch mindestens eine Spalte und steht der ViewStyle auf vsReport?

Jamah 8. Jan 2010 15:37

Re: TListView Problem
 
Jap

Luckie 8. Jan 2010 15:44

Re: TListView Problem
 
Wie "Jap"? Funktioniert es jetzt?

Matze 8. Jan 2010 15:45

Re: TListView Problem
 
Vermutlich nicht. Er hat die ListView so eingestellt, wie du es gefragt hast:

Zitat:

Zitat von Luckie
Hat dein Listview auch mindestens eine Spalte und steht der ViewStyle auf vsReport?

Zitat:

Zitat von Jamah
Jap


Luckie 8. Jan 2010 15:48

Re: TListView Problem
 
Dann kann ich auch nicht weiterhelfen ohne mehr Informationen.

Matze 8. Jan 2010 15:50

Re: TListView Problem
 
Ich auch nicht. Mein Beispiel funktioniert bei mir definitiv. Deines sieht sehr ähnlich aus und sollte auch klappen.

Luckie 8. Jan 2010 15:52

Re: TListView Problem
 
Ist getestet. Funktioniert einwandfrei.

Jamah 8. Jan 2010 22:50

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.

Luckie 8. Jan 2010 22:54

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. ;)

hoika 9. Jan 2010 07:01

Re: TListView Problem
 
Hallo,

ListView.GridLines:= Trure ?


Heiko

Jamah 9. Jan 2010 08:38

Re: TListView Problem
 
Liste der Anhänge anzeigen (Anzahl: 3)
Ok. hier ist es

Matze 9. Jan 2010 09:00

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).

Luckie 9. Jan 2010 09:41

Re: TListView Problem
 
Zitat:

Zitat von Matze
[i]Edit: Luckie nutzt "GetKeyNames". Ich habe in meinem oberen Code "GetValueNames" verwendet.

Ichhabe irgendwas genommen, was mir bei einem Schlüssel mehrere Einträge zurückgibt. Ich bin davon ausgegangen, dass Jamah sich das dann entsprechend anpassen kann, je nach dem, was er haben will.

Jamah 9. Jan 2010 10:51

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:
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;
Vielleicht postet ja noch jemand die Möglichkeit einen RegistryKey-Type als String zu bekommen.

Jamah 11. Jan 2010 14:42

Re: TListView Problem
 
Hat vielleicht noch jemand was dazu?
Ich bräuchte wirklich dringend den Type.

hoika 11. Jan 2010 15:19

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

Jamah 11. Jan 2010 15:37

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....

hoika 11. Jan 2010 15:55

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 11:49 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