[Delphi] Writebool wil niet...

Pagina: 1
Acties:

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 20-08 20:59
Ik snap effe niks van, 2 dagen terug heb ik een writebool procedure omgezet in een writestring. Nu wil ik die weer terugzetten naar een writebool procedure en et gaat mis.

Ik heb dit commando:
SaveSetting1(Regkey, 'Checkafterstart', checkbox1.checked);

Regkey bevat de key naar waar de sleutels moeten komen te staan.

code:
1
2
3
4
5
6
7
8
procedure TForm1.SaveSetting1(Key, Item: String; Value: Boolean);
var
  Reg: TRegIniFile;
begin
  Reg := TRegIniFile.Create(Key);
  Reg.WriteBool('', Item, Value);
  Reg.Free;
end;


En deze procedure. Nou hij schrijft het wel lekker weg, maar volgens mij schrijft hij geen boolean in het register maar een keiharde asci waarde 8)7

Ja wa's da nou, het moet toch een REG_DWORD worden?

Het gaat namelijk ook mis bij Readbool , want hij zegt dus dat het type onjuist is, ja logisch want het staat gewoon als string in het register. Wat kan er nou fout zijn?

Ik heb het ook simpel zo gedaan:


code:
1
2
3
4
5
6
7
8
procedure 1ofandereprocedure_blabla
var
  Reg: TRegIniFile;
begin
  Reg := TRegIniFile.Create(Key);
  Reg.WriteBool('', 'Checkafterstart', checkbox1.checked);
  Reg.Free;
end;


Maar die knal dus ook ascii in m'n register. :( Voordat ik em omzette naar string deed hij het wel goed, en ik had dat stukje code van writebool van internet maar ik kan het niet meer vinden... :(

[ Voor 3% gewijzigd door Cheater op 20-08-2003 21:13 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Waarom geen echte TRegistry. Wellicht dat dit een beperking is van TRegIni aangezien een INI bestand alleen maar strings kent.

We adore chaos because we like to restore order - M.C. Escher


  • Just_a_Gamer
  • Registratie: November 2001
  • Nu online
Je kan dit proberen:

( Reg as TRegistry ).WriteBool( '', 'Checkafterstart', checkbox1.checked);

Nu gebruikt ie expliciet de writebool van TRegistry ipv TRegIniFile. Dit staat ook in de help file van Delphi.
Note: This function overrides the WriteBool procedure of TRegistry, from which TRegIniFile is derived. To call the WriteBool procedure of TRegistry instead of this procedure, cast the call to WriteBool as TRegistry.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Maar als je dán naar een INI file gaat schrijven (waarom anders zou je een RegIni gebruiken, gebeurt er dus niets.

Het zou iig mijn voorkeur verdienen om aparte routines te schrijven voor INI en het register. Dan weet je zeker dat er wordt weggeschreven en ingelezen wat je verwacht.

日本!🎌


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 20-08 20:59
code:
1
2
3
4
5
6
7
8
procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  Reg.WriteBool('Checkafterstart', checkbox1.checked);
  Reg.Free;
end;
Nee wil ook al niet lukken. Hij zegt:
'Failed to set data for 'Checkafterstart''

En bij:
code:
1
2
3
4
5
6
7
8
procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegIniFile;
begin
  Reg := TRegIniFile.Create(RegKey);
  Reg.WriteBool('', 'Checkafterstart', checkbox1.checked);
  Reg.Free;
end;


Slaat hij wel een 0 of een 1 op, maar in ascii waarde, dus ik kan ze met readbool niet meer uitlezen. "Invalid data type for 'Checkafterstart'" :'(

[ Voor 59% gewijzigd door Cheater op 21-08-2003 13:33 ]


Verwijderd

De help zegt:
"Call WriteBool to store a Boolean value in a data value associated with the current key."

En er staat ook een voorbeeld bij...
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.WMEndSession(var Message: TWMEndSession);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\RunOnce', True) then
   begin
      Reg.WriteString('MyApp','"' + ParamStr(0) + '"');
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
    inherited;
  end;
end;


Go figure out...

[ Voor 7% gewijzigd door Verwijderd op 21-08-2003 13:44 . Reden: typo ]


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 20-08 20:59
Het is gelukt met deze code. Ik had toch al wel een keer geprobeerd met OpenKey erbij maar toen werkte het niet. Wellicht had ik toen TRegIniFile gebruikt in combinatie met OpenKey. Afijn: de werkende code omdat er al zo weinig over writebool voor Delphi op GOT staat.


code:
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  Reg.OpenKey(RegKey, False);
  Reg.WriteBool('Checkafterstart', checkbox1.checked);
  Reg.CloseKey;
  Reg.Free;

Verwijderd

Cheater schreef op 21 August 2003 @ 13:55:
Afijn: de werkende code omdat er al zo weinig over writebool voor Delphi op GOT staat.
Nee, dit is de werkende code...
code:
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.OpenKey(RegKey, False);
    Reg.WriteBool('Checkafterstart', checkbox1.checked);
    Reg.CloseKey;
  finally
    Reg.Free;
  end;

[ Voor 3% gewijzigd door Verwijderd op 21-08-2003 14:50 . Reden: missing tag ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 21 August 2003 @ 14:49:
[...]

Nee, dit is de werkende code...
code:
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.OpenKey(RegKey, False);
    Reg.WriteBool('Checkafterstart', checkbox1.checked);
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
De code hiervoor werkt ook prima hoor :+

Maar deze is wel wat meer af, aangezien het kan voorkomen dat de openkey of de writebool een exception kan geven

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

En vergeet niet om de RootKey property in te vullen... zo is het niet echt duidelijk of ie nu in HKCU of in HKLM of een andere gaat poken.

日本!🎌


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 20-08 20:59
Nee in de RegKey const, staat duidelijk HKEY_blabla voor de subkeys.
Dus daar kan niks mis bij gaan. Geen ROOTKEY noodzakelijk dus.
Pagina: 1