Results 1 to 7 of 7

Thread: Registry entry

  1. #1

    Registry entry

    Wanneer ik onderstaande code gebruik werkt die netjes de 1e keer en de entries worden aangemaakt.

    Code:
    procedure TForm1.Button1Click(Sender: TObject);
      var
      RegFile         : TRegistry;
      RegKey        : string;
      bOpenResult : boolean;
      Today       : TDateTime;
    
    begin
      RegFile         := TRegistry.Create(KEY_READ);
      RegFile.RootKey := HKEY_CURRENT_USER;
      RegKey          := 'Software\Bedrijf\Software';
    
      if (not RegFile.KeyExists(RegKey)) then begin
          RegFile.Access  := KEY_WRITE;
          bOpenResult     := RegFile.OpenKey(RegKey,True);
    
      if not RegFile.KeyExists('Installatie') then begin
              Today := Now;
           		RegFile.WriteDateTime('Installatie', today);
      end;
    
      if not RegFile.KeyExists('Installcode') then begin
     		     Regfile.WriteString('InstallCode', '123456');
      end;
      if not RegFile.KeyExists('Machinecode') then begin
     		     Regfile.WriteString('Machine', '300463');
      end;
    
    
      end;
      regFile.CloseKey();
      regFile.Free;
    Stel dat ik de code uitbreid met een extra entry en run het opnieuw dan
    wordt deze laatste toevoeging in registry niet aangemaakt.

    Verwijder ik de registry entry of het niveau van '\Software' dan worden
    alle entries wel aangemaakt.

    Wat zie ik over het hoofd ?

    Code:
      if not RegFile.KeyExists('Locatiecode') then begin
     		     Regfile.WriteString('Locatiecode', 6021XX');
      end;

  2. #2
    Waarom zet de alleen binnen de eerste IF RegFile.Access := KEY_WRITE; ?

  3. #3
    Die eerste
    Code:
    if (not RegFile.KeyExists(RegKey)) then begin
    Deze begin omsluit je hele code. Zodra de hoofdkey dus eenmaal gemaakt is, controleer je nooit meer of de keys eronder nog gemaakt moeten worden. Je moet die hoofdkey dus altijd openen, en voor elk van de onderliggende altijd de check uitvoeren.

    Het duurde voor mij ook even voordat ik het zag, maar dat zit 'm vooral in de creatieve inspringing. Met die `begin` aan het eind van de regel, zag ik niet dat de `end` daarvan ontbrak (d.w.z., een heel stuk verderop stond), zeker aangezien de code binnen het blok niet ingesprongen is.
    Dringend advies om `begin` en `end` niet aan het einde van een regel te zetten.
    1+1=b

  4. #4
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Quote Originally Posted by GolezTrol View Post
    Het duurde voor mij ook even voordat ik het zag, maar dat zit 'm vooral in de creatieve inspringing. [...]
    Dringend advies om `begin` en `end` niet aan het einde van een regel te zetten.
    Bekend probleem: ik heb een buitenlandse collega dit deze vorm van inspringen aanhoudt, heel verwarrend.

    Tip: mocht je je afvragen hoe code (ongeveer) volgens de coding guidelines geschreven "Hoort" te worden: selecteer een stuk code en druk op CTRL+D.
    Het zijn guidelines, dus niet in steen gebeiteld en er zitten verschillen tussen bijvoorbeeld GNU-pascal, FPC-pascal en Delphi-pascal, maar grotendeels zijn ze het wel eens over begin...end-blokken.
    TMemoryLeak.Create(Nil);

  5. #5
    Hi

    Dank voor terugkoppeling...inderdaad overheen gekeken

    En de code is normaal ook volgens de coding guidelines...weet
    niet waarom deze anders is...

  6. #6
    Misschien is het geschreven door VideoRipper's collega
    1+1=b

  7. #7
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Vast een Java programmeur geweest
    Delphi is great. Lazarus is more powerfull

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •