C++Builder
Scrierea şi citirea datelor în/din Windows Registry
Registry este o bază de date pe care o aplicatie o poate
folosi pentru a stoca sau citi date legate de configuraţie.
Această informaţie este structurată asemenea unui arbore.
Fiecare nod principal se numeşte CHEIE (KEY). Fiecare cheie
poate conţine SUBCHEI (SUBKEYS) şi valori care reprezintă
configuraţia. Toate cheile pe care o aplicaţie le deschide, le
citeşte , le scrie sau le crează fac parte din CHEI RĂDĂCINĂ
(ROOT KEYS) predefinite. Pentru a vedea structura Windows
Registry deschideţi programul livrat cu Windows
(Start->Run->regedit).
În general pentru a stoca informaţii referitoare la
configuraţia aplicaţiei dumneavoastră veţi crea sau modifica
chei şi valori în cheile rădăcină HKEY_LOCAL_MACHINE sau
HKEY_CURRENT_USER.
Pentru accesarea serviciilor Windows Registry în Cbuilder şi
Deplhi se foloseşte obiectul TRegistry.
Voi prezenta pas cu pas modul de realizare a unei
aplicaţii-exemplu ce scrie şi citeşte valori din Registry
folosind cheile create de noi.
1.Pornim la drum cu un proiect nou în care avem grijă să
includem headerul registry:
#include <vcl/registry.hpp>
2.Definim variabila-obiect TRegistry şi variabila de root
HKEY:
TRegistry *r=new
TRegistry;
HKEY root=HKEY_LOCAL_MACHINE;
Observam ca "r" este pointer la o adresa de memorie, deci vom folosi
operatorul de selecţie "->" pentru a accesa
proprietăţile şi metodele obiectului nou creat.
3.Vom considera că ne interesează să citim şi să
modificăm numele firmei care apare în antetele documentelor
generate de aplicaţia noastră. Vom crea o subcheie în
HKEY_LOCAL_MACHINE\Software cu numele de EmptyPockets. Folosim
pentru aceasta un câmp de introducere text (TEdit) ce îl
aşezăm cu mous-ul pe form. La deschiderea aplicaţiei se va
încerca citirea din Registry a valorii cu numele
"Firma" din HKEY_LOCAL_MACHINE\Software\EmptyPockets.
Dacă această cheie nu există, va fi creată automat. Afişăm
în câmpul Edit1 valoarea citită din Registry. Punem şi un
buton simplu (TButton) pe form cu textul OK (Caption). La
apăsarea acestui buton valorea pe care o vom scrie în câmpul
Edit1 va fi scrisă în registry. Să analizăm codul sursă:
/---------------------------------------------------------------------------
#include <vcl\vcl.h>
#include <vcl\registry.hpp> //includem headerul...
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
HKEY root=HKEY_LOCAL_MACHINE; //declaram variabila root de tip
HKEY initializand-o cu HKEY_LOCAL_MACHINE
TRegistry *r=new TRegistry; //declarăm varibila r de tip
TRegistry
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
r->RootKey=root; //stabilim cheia radacina ca fiind cea
retinuta de var. root
if(r->OpenKey("Software\\EmptyPockets",true))
//deschidem cheia ;daca nu exista este creata
Edit1->Text=r->ReadString("Firma"); //citim
valoarea "Firma" din Registry ca String
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
/*functia se executa la apasarea butonului OK
Daca nu s-a scris nimic in campul Edit1 se afiseaza mesaj de
atentionare*/
if(Edit1->Text==""){
MessageBox(NULL,"Numele firmei este obligatoriu
!","Atentie",MB_ICONEXCLAMATION);
return;
}
r->WriteString("Firma",Edit1->Text); //scrie
valoarea in Registry
Application->Terminate();//aplicatia se termina la apasarea OK
}
//---------------------------------------------------------------------------
Nu uitati sa eliberati memoria alocata dinamic in *r prin delete r; in evenimentul OnClose a form-ului principal, eventual.
|