- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 Forum

Grundkurs
  »Introduktion
  »Snabbguide
  »Komponenter
  »Händelser
  »Strängar
  »Räkna med Delphi   »Egna typer
  »Selektion
  »Iteration
  »Menyer
  »Funktioner
  »Arraystrukturer

Tips & Tricks
  »Nya tips
  »Blandat
  »Databaser
  »Filer
  »Forms
  »Grafik
  »Internet
  »Komponenter
  »Matematik
  »Multimedia
  »Objekt/ActiveX
  »Skrivare
  »Strängar
  »System
  »Mest lästa tips

Artiklar
  »Delphi och ADO
  »Bygga en DLL
  »Skapa en enkel rapport
  »Hantera registret
  »Enheter, units
  »Klassen TCanvas
  »Använd LookUp Controls

 Nya tips
 Lägg till tips
 Delphilänkar
 Gästbok

 



 FuzzyDizzie » Delphi » Artiklar » Hantera registret
Operativsystem: Windows 95/98/ME/2000/XP
Delphiversion: Delphi 4 eller senare
Komponenter: TEdit, TButton, TRegistry
  Publicerad: 2002-10-27
Läst: 4680
Röster: 11
Skribent: Staffan Berg

Rösta på artikeln


Förord


I denna artikel tänkte jag beskriva hur du kan använda Windowsregistret för att lagra värden i. Jag kommer att visa ett par exempel för att skriva och lagra värden samt att läsa in samma värden från registret till ditt Delphiprogram.

Windowsregistret - en bakgrund
Microsoft implementerade registret i samband med att de lanserade Windows 95. Tidigare var det vanligt att man använde textfiler för att lagra information och inställningar i, s k ini-filer. I takt med allt större och mer komplexa operativsystem så bestämde sig Microsoft att lagra alla system och program inställningar i en enda stor databas, Registret, för det är det registret är: en stor databas. Det enklaste sättet att visa innehållet i registret är att köra programmet Regedit som du hittar i Windows-mappen (eller skriv in Regedit under Kör i Startmenyn). Nu visas två fönster. I det vänstra fönstret finner du de sex huvudnycklarna, representerade som mappar:

  • HKEY_CLASSES_ROOT
  • HKEY_CURRENT_USER
  • HKEY_LOCAL_MACHINE
  • HKEY_USERS
  • HKEY_CURRENT_CONFIG
  • HKEY_DYN_DATA

Dessa mappar kallar vi för root keys. Under varje root key finner vi en ansenlig mängd undermappar som vi kallar för sub keys. I vårt Delphiprogram kommer vi att använda oss av HKEY_LOCAL_MACHINE för att lagra våra värden. Under varje sub key finns det an rad med registernycklar. Det är i dessa som alla värden lagras. Varje nyckel har ett namn och ett värde. Varje nyckel kan innehålla ett eller flera lagrade värden.

Skapa och förbered ett formulär
Begär ett nytt projekt och infoga ett textruta och ge den namnet txtName. Infoga därefter två kommandoknappar och döp dem till btnWrite och btnRead. Namnge deras respektive Caption-egenskap förslagsvis till Skriv till registret respektive Läs från registret.

Förbered komponenten TRegistry
Den finns två komponenter i Delphi 6 som kan användas för registerhantering; TRegistry och TRegIni. I denna artikel kommer vi att använda oss av TRegistry. Den första åtgärd som vi skall vidta är att implementera ordet Registry i Uses sektionen i editorn. När detta är gjort skapar vi en instans ett objekt för klassen TRegistry under Private Declarations. Namnge detta objekt till myReg. När det är klart kommer det att se ut så här.


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

type
TForm1 = class(TForm)
btnWrite: TButton;
txtName: TEdit;
btnRead: TButton;
procedure btnWriteClick(Sender: TObject);
procedure btnReadClick(Sender: TObject);

private
{ Private declarations }
myReg:TRegistry;

public
{ Public declarations }
end;


Om ditt projekt består av flera formulär kan det vara mer praktiskt att lägga deklarationen under Public Declarations

Lagra värden i registret
Nästa steg är att skriva in några värden till registret. Dubbelklicka på knappen btnWrite. Delphi skriver ut ett skelett i editorn. Skriv in följande kod så att helheten för kommandoknappen btnWrite ser ut så här:


procedure TForm1.btnWriteClick(Sender: TObject);
begin
try

myReg := TRegistry.Create;
myReg.RootKey := HKEY_LOCAL_MACHINE;
if myReg.OpenKey('SOFTWARE\minApp\', TRUE) then
begin

myReg.WriteString('Mitt Namn', txtName.Text);
myReg.WriteInteger('Top', Form1.Top);
myReg.WriteInteger('Left', Form1.Left);
end;
finally

myReg.Free;
end;

end;


Det första som händer är att vi skapar en instans av TRegistry som vi kallar myReg. Därefter definierar vi vår Root Key (HKEY_LOCAL_MACHINE). Det betyder att alla skrivning och läsning sker under denna huvudnyckel.  Därefter öppnar vi upp sektionen "Software\minApp\". Sektionen Software existerar redan som standard men troligen inte minApp. Den andra parametern som i exemplet är satt till True ser till att skapa undermappen om den inte redan existerar. Vi har även satt koden i en If...Then-sats. Om öppnandet av nyckeln av någon anledning skulle misslyckad utlöses i vilket fall som helst inte något fel. Efter detta skriver vi in tre värden. Den första raden skriver in strängvärdet som du angett i textrutan på formuläret. De andra två raderna med metoden WriteInteger sparar programmets fönsterposition. När alla värden är inskrivna frigör vi objektet genom att skriva myReg.Free.

Läs in värden från
registret
Nu är det dags att läsa värdet från registret till vårt program. Dubbelklicka på kanppen btnRead.  Skriv in koden enligt exemplet i rutan nedan.


procedure TForm1.btnReadClick(Sender: TObject);
begin
try
myReg := TRegistry.Create;
myReg.RootKey := HKEY_LOCAL_MACHINE;
if myReg.OpenKey('SOFTWARE\minApp', FALSE) then
begin
txtName.Text := myReg.ReadString('Mitt Namn');
Form1.Top := myReg.ReadInteger('Top');
Form1.Left := myReg.ReadInteger('Left');
end;
finally
myReg.Free;
end;
end;




 
Precis som i det föregående exemplet skapar vi först

Det första som händer är att vi skapar en instans av TRegistry och anger huvudnyckeln på samma sätt.  Sedan använder vi oss av metoderna ReadString och ReadInteger för att läsa strängvärden och talvärden från våra registernycklar. Strängvärdet hamnar i textrutan txtName på formuläret och talvärdena hamnar i formulärets båda egenskaper Top och Left. Det är dessa som ser till att positionen på formuläret hamnar på exakt samma plats som när det sparades.
De exempel som jag nu demonstrerat är nog de mest användbara när det gäller registerhantering. Förutom sträng och talvärden går det att lagra mycket annat smått och gått, men det får komma som en uppföljning i en framtida artikel. Nedan följer dock en listning över de egenskaper och metoder som komponenten TRegistry tillhandahåller.

Egenskaper:
  • Access
  • CurrentKey
  • CurrentPath
  • LazyWrite
  • RootKey

Metoder:

  • CloseKey
  • Create
  • CreateKey
  • DeleteKey
  • DeleteValue
  • Destroy
  • GetDataInfo
  • GetDataSize
  • GetDataType
  • GetKeyInfo
  • GetKeyNames
  • GetValueNames
  • HasSubKeys
  • KeyExists
  • LoadKey
  • MoveKey
  • OpenKey
  • OpenKeyReadOnly
  • ReadBinaryData
  • ReadBool
  • ReadCurrency
  • ReadDate
  • ReadDateTime
  • ReadFloat
  • ReadInteger
  • ReadString
  • ReadTime
  • RegistryConnect
  • RenameValue
  • ReplaceKey
  • RestoreKey
  • SaveKey
  • UnLoadKey
  • ValueExists
  • WriteBinaryData
  • WriteBool
  • WriteCurrency
  • WriteDate
  • WriteDateTime
  • WriteExpandString
  • WriteFloat
  • WriteInteger
  • WriteString
  • WriteTime




Vid tangentbordet
/Staffan Berg

 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -