Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit TStrings (https://www.delphipraxis.net/950-probleme-mit-tstrings.html)

Thurgen 1. Okt 2002 09:23


Probleme mit TStrings
 
Hi,

ich habe versucht mit der Registry procedure "GetKeyNames(Strings: TStrings);" einen Registry Baum in eine TStrings Variable einzulesen. Das Programm startet ohne Error aber sobalt die Zuweisung kommt bricht das Programm mit einem Speicher Zugriffs Fehler ab. Tausche ich die TString Varibale mit einem Memo Feld aus funktioniert es.

with TRegistry.create(KEY_READ) do
begin
Rootkey:=HKEY_LOCAL_MACHINE;
OpenKey('Enum\PCI', false);
getKeyNames(memo1.lines);
closekey;
free;
end;

Hat vieleicht jemand eine Idee wie ich das Programm mit TStrings zum laufen bekomme?

Daniel 1. Okt 2002 09:31

Hallo,
Zitat:

Zitat von Delphi-Hilfe
TStrings contains abstract methods and should not be directly instantiated.

Benutze einfach die Klasse "TStringList". :wink:

Thurgen 1. Okt 2002 09:39

Selber fehler mit TstringList

Im Projekt Regsearch.exe ist eine Execption der Klasse EAccesViolation Meldung: Zugriffsverletzung bei Adresse........

Daniel 1. Okt 2002 09:48

An welcher Stelle hast Du denn die TStringList instanziiert? Folgendes Beispiel funktioniert bei mir (ichhabe lediglich den Pfad abgeändert, da er bei mir unter Windows XP nicht existierte).
Code:
procedure TForm1.Button1Click(Sender: TObject);
var someLines : TStringList;
begin

  [b]someLines:= TStringList.Create;[/b]

  with TRegistry.create(KEY_READ) do
  begin
    Rootkey:=HKEY_LOCAL_MACHINE;
    OpenKey('Software', false);
    getKeyNames(someLines);
    closekey;
    free;
  end;

  // Nun einfach in einem Memo anzeigen
  Memo1.Lines.Assign(someLines);

  [b]someLines.Free;[/b]
end;

Thurgen 1. Okt 2002 09:57

Danke,

Tstringlist.create;

wars gewesen was gefehlt hat, jetzt läufts :)

Luckie 1. Okt 2002 10:04

Fehlerbehandlung fehlt komplett :!:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var someLines : TStringList;
begin

  someLines:= TStringList.Create;
  [b]try[/b]
    with TRegistry.create(KEY_READ) do
    begin
      [b]try[/b]
        Rootkey:=HKEY_LOCAL_MACHINE;
        OpenKey('Software', false);
        getKeyNames(someLines);
        closekey;
      [b]finally[/b]
        free;
      [b]end;[/b]
    end;

    Memo1.Lines.Assign(someLines);
  [b]finally[/b]
    someLines.Free;
  [b]end;[/b]
end;

sakura 1. Okt 2002 11:02

Zitat:

Zitat von Luckie
Fehlerbehandlung fehlt komplett :!:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var someLines : TStringList;
begin

  someLines:= TStringList.Create;
  [b]try[/b]
    with TRegistry.create(KEY_READ) do
    [color=#ff0022]begin[/color]
      [b]try[/b]
        Rootkey:=HKEY_LOCAL_MACHINE;
        OpenKey('Software', false);
        getKeyNames(someLines);
        closekey;
      [b]finally[/b]
        free;
      [b]end; [/b]
[color=#ff0000]   end;[/color]

    Memo1.Lines.Assign(someLines);
  [b]finally[/b]
    someLines.Free;
  [b]end;[/b]
end;

Hi Luckie, die roten Zeilen kannst Du Dir sparen ;)

Thurgen 1. Okt 2002 11:05

lol :)

Luckie 1. Okt 2002 11:06

Die Zeilen, die du rot gemacht hast, stammen nicht von mir. Ich habe nur die Fehlerbehandlung in vorhandenen Code einegebaut.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 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