Homepage

Lucian SABO

Lucian Sabo dezvoltă aplicații web bazate pe triada Apache/PHP/MySQL din 2003, deși încă din 2000 a realizat pagini web statice. A acumulat o bogată experiență profesională ca programator web și project manager. Din 2004 este omul din spatele CRIOSWEB - o agentie web românească.
Așa cum îi place să spună despre el, este multifuncțional, ocupându-se cu plăcere de grafică, fotografie, muzică, lucruri ce îl pasionează poate la fel de mult ca programarea clasică în C++.
Este implicat ca programator în mai multe proiecte open-source, dar a dezvoltat și câteva aplicații freeware, printre care cunoscutul program RIOT (Radical Image Optimization Tool).

Contact

Cei care doresc sa mă contacteze o pot face telepatic.
În caz ca această tentativa nu reușește, îmi puteți trimite un email la:
luciansabo at gmail dot com

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.


Home | Despre mine | Programare | Ganduri