Rejestr

0

Witam przy stworzeniu formy sprawdzam czy dany klucz w rejestrze istnieje

procedure TForm6.FormCreate(Sender: TObject);
var
        reg: TRegistry;
begin
        Reg:= Tregistry.Create;
        Reg.RootKey:=HKEY_CURRENT_USER;
        Reg.OpenKey('Software\0831aukc\rejst', False);
        if not reg.KeyExists('zarejstrowany') then
        Form1.Show;
end;

Ale jesli klucz istnieje ma mi pokazać forme1 ale nie pokazuje jest dziwny błąd.

Najperw taki:
user image

A potem w tym miejscu w kodzie błąd:

user image

Próbowałem też robić tak ale to samo sie działo:

        
Reg:= Tregistry.Create;
        Reg.RootKey:=HKEY_CURRENT_USER;
        Reg.OpenKey('Software\0831aukc\rejst', False);
        if Reg.ReadInteger('zarejstrowany')=1 then
        Form1.Show;
        Form6.Hide;
0

daj ten kodzik w on show formy 6 ijeszcze fajnie by było żeby sprawdzał czy wszystkie podklucze potrzebne są obecne w rejestrze

0

Thx ale jest następny błąd nie wiem dlaczego jak teraz mam:

[code]Cannot change Visible in OnShow or OnHide[/code]

0

[code]Cannot change Visible in OnShow or OnHide[/code]

Jak nie wolno to nie wolno, tego juz nie zmienisz. Zamiast dawac ten kod w OnCreate Form1 daj go przy tworzeniu form:

program NNN;

uses
  Forms,
  Registry,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

var
  Reg: TRegistry;

begin
  Application.Initialize;
  Reg:= Tregistry.Create;
  Reg.RootKey:=HKEY_CURRENT_USER;
  Reg.OpenKey('Software\0831aukc\rejst', False);
  if not reg.KeyExists('zarejstrowany') then  
    Application.ShowMainForm := True;
  Reg.Free //może by tak zwolnić pamięć ??

  Application.CreateForm(TForm1, Form1);
  //i inne formy
  Application.Run;
end.         
0

program NNN;

uses
Forms,
Registry,
Unit1 in 'Unit1.pas' {Form1};

czemu tu? :|

begin
Application.Initialize;

tego posunięcia to już w ogóle nie rozumiem

Application.ShowMainForm := True;

o ile mi wiadomo, to mainForm pokazuje się przy starcie programu. To raz. Dwa nie można zniemić visible formy w onShow

<quote> Application.CreateForm(TForm1, Form1); //i inne formy Application.Run; <quote>

zaraz... teraz to już nic nie rozumiem... Co to jest za kod? Czego?

0

Hey! Aby dojść do opowiedzi na zadane pytanie musiałbyś przedstawić nam cały kod swego programu (tzn. OnShow, OnCreate, ewentualnie jak masz jakieś Timery to ich procki też). Często zdarzają mi sie podobne problemy w dużych programach i albo udaje mi sie je naprawić wyszukując błędów w tych zdarzeniach, albo wrzucam projekt (pocieszające :P ).

0

OK, chyba troche namieszałem :| . Przy założeniu że Form6 to głowna forma kod powinien wygladac troche inaczej:

program Project1; //przykładowo

uses
  Forms,
  Registry,
  Windows,
  Unit1 in 'Unit1.pas' {Form6},
  Unit2 in 'Unit2.pas' {Form1}; //i tak dalej reszta form

{$R *.res}
var
   Reg: TRegistry;

begin
  Application.Initialize;
  Application.CreateForm(TForm6, Form6);
  Application.CreateForm(TForm1, Form1); //i tak dalej reszta form

  Reg:= TRegistry.Create;
  Reg.RootKey:= HKEY_CURRENT_USER;
  Reg.OpenKey('Software\0831aukc\rejst', False);
  if not reg.KeyExists('zarejstrowany') then 
    Form1.Show;
  Reg.Free;

  Application.Run; //czemu tu ? bo inaczej nie zadziała pokazywanie form1
end.

Przypuszczam że istnieja inne sposoby na rozwiązanie tego problemu ale ten kod też działa.

0

A "zarejestrowany" to klucz czy wartość w kluczu, jeśli to wartość a nie klucz to powinieneś zastosować

ValueExists

a nie

KeyExists

1 użytkowników online, w tym zalogowanych: 0, gości: 1