Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Registry Werte auslesen

45 views
Skip to first unread message

Simon Lang

unread,
Jun 5, 2002, 12:52:19 PM6/5/02
to
Hallo zusammen !
Ich will für mein kleines Info Programm verschiedene Werte
aus der Registry auslesen, darunter auch
z.b. die Version des Betriebssystems, aktuelle
Bildschirmauflösung, Version des Internet
Explorers u.s.w.
Ich habe Delphi 6.
Wie Lautet generell die Syntax für das auslesen von
Registry Werten ?
Bin noch Delphi Anfänger, bitte verständlich
erklären :-)
Danke für eure Tipps !

SIMON

Klaus Rascher

unread,
Jun 5, 2002, 1:42:42 PM6/5/02
to
Hi
"Simon Lang" <sla...@web.de> schrieb im Newsbeitrag
news:1103_10...@news.t-online.de...

> Hallo zusammen !
> Ich will für mein kleines Info Programm verschiedene Werte
> aus der Registry auslesen [..].

Suche in der OH unter TRegIniFile. Dort findest du ein komplettes Beispiel.

Bye Klaus


Roland Illig

unread,
Jun 5, 2002, 1:51:04 PM6/5/02
to
"Simon Lang" <sla...@web.de> schrieb ...

Ich nehme an, daß "Delphi-Anfänger" nicht "Windows-Anfänger" ist. Das heißt,
Du hast schon mal regedit.exe gestartet und damit rumgespielt. Weiter weißt
Du auch, wie man in regedit Schlüssel anlegt und Werte einträgt.

Um das ganze in Delphi nachzuspielen, gehst Du so vor:

1. Die Registry-Unit einbinden:

uses
Registry;

{**
* Die Registry-Unit hatte in Delphi3 einen Bug: Wenn
* ein einzulesender String nicht existierte, wurde
* keine Exception erhoben/geworfen/wasauchimmer, sondern
* stillschweigend ein leerer String zurückgegeben.
*}

2. Eine beliebige Prozedur sieht so aus:

procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.Create();
reg.RootKey := HKEY_CLASSES_ROOT;
if (reg.OpenKey('\.doc', False)) then
begin
Caption := reg.ReadString('');
// Die Beschreibung einer Word-Datei
// Wahrscheinlich Word.Document.8 oder so
reg.CloseKey();
end;
reg.Free;
end;

3. Erweitere das Beispiel so, wie Du es brauchst:

reg.OpenKey(name, True) erzeugt einen Schlüssel
reg.WriteString(name, value) schreibt einen Wert
und das und viel, viel mehr steht in der Online-Hilfe.

Roland


Tillmann Rendel

unread,
Jun 5, 2002, 8:27:34 PM6/5/02
to
Roland Illig schrieb:

>>[Registry-Zugriff]
>2. Eine beliebige Prozedur sieht so aus: [...]

Allerdings sollte man seine TRegistry per try-finally-end schützen, selbst in
Trivialbeispielen.

Tillmann

Simon Lang

unread,
Jun 6, 2002, 2:12:06 PM6/6/02
to
Ok, ich habe jetzt anhand eines Tutorials ein kleines Beispielprogramm
geschrieben, das mir als orientiering dienen soll. Zuerst wird ein
neuer Schlüssel mit den DWord werten Left und Top, die die Fensterposition von Form1
enthalten, angelegt. Beim auslesen sollen die werte als caption in den labels
Label1 und Label2 angezeigt werden, ich habe aber schwierigkeiten mit der Syntax
bei Label1 und Label2............
---------------------- Hier mein SourceCode : --------------------------------
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Registry, StdCtrls, ActnList, StdActns;

type
TForm1 = class(TForm)
StaticText1: TStaticText;
StaticText2: TStaticText;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); {Button Schreiben}
var regist: TRegistry;

begin
regist:=TRegistry.Create; {Schreiben}
regist.RootKey:=HKEY_CURRENT_USER;
regist.OpenKey('Software\MyName\MyProgram\1.0', true);
regist.WriteInteger('Left', Form1.Left);
regist.WriteInteger('Top', Form1.Top);
regist.free;
end;

procedure TForm1.Button2Click(Sender: TObject); {Button Lesen}
var regist: TRegistry;

begin
regist:=TRegistry.Create(KEY_READ); {Nur Lesezugriff}
regist.RootKey:=HKEY_CURRENT_USER;
try
regist.OpenKey('Software\MyName\MyProgram\1.0', false);
Form1.Left:=regist.ReadInteger('Left');
Form1.Top:=regist.ReadInteger('Top');
except
Form1.Left:=0;
Form1.Top:=0;
end;
{Die ausgelesenen RegistryWerte von Left und Top
sollen in den Textfeldern (Left in Label1 und Top in Label2)
angezeigt werden, wie lautet die syntax dafür ?}
Label1.caption:='';
Label2.caption:='';
regist.free;
end;
end.
----------------------- Ende ---------------------------------------

Felix Möller

unread,
Jun 6, 2002, 3:41:49 PM6/6/02
to

Moin Simon

> {Die ausgelesenen RegistryWerte von Left und Top
> sollen in den Textfeldern (Left in Label1 und Top in Label2)
> angezeigt werden, wie lautet die syntax dafür ?}
> Label1.caption:='';
> Label2.caption:='';

Soweit ich dich richtig verstanden habe ist das:
Label1.caption:=IntToStr(regist.ReadInteger('Left'));
Label2.caption:=IntToStr(regist.ReadInteger('Top'));

HTH
Felix


Simon Lang

unread,
Jun 8, 2002, 1:43:01 PM6/8/02
to
Am Thu, 6 Jun 2002 21:41:49 +0200 hat "Felix Möller" <felixm...@t-online.de> geschrieben:
Super :-)
Genau das wollte ich noch wissen.
DANKE !!


0 new messages