Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > TRegIniFile


Автор: Kirgston 31.8.2008, 10:00
Всем доброго времени суток! Я пишу программу которая будет работать с реестром. Вот у меня незадача выходит... я пишу в реестр WriteInteger и оно отображается как тип REG_SZ а мне надо чтоб оно там было в ввиде REG_DWORD , подскажите пожалуйста как это сделать! Зарание ОЧЕНЬ благодарен!

Автор: THandle 31.8.2008, 10:51
Kirgston, TRegistry использовать можно? Тогда вот:
Код


  with TRegistry.Create do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      OpenKey('Software\MyProgram',true);
      WriteInteger('Int1', 123);
    finally
      free;
    end;

Автор: Alexeis 31.8.2008, 11:02
Если глянуть на метод WriteInteger то ясно почему это происходит

Код

procedure TRegIniFile.WriteInteger(const Section, Ident: string; Value: LongInt);
var
  Key, OldKey: HKEY;
begin
  CreateKey(Section);
  Key := GetKey(Section);
  if Key <> 0 then
  try
    OldKey := CurrentKey;
    SetCurrentKey(Key);
    try
      inherited WriteString(Ident, IntToStr(Value));
    finally
      SetCurrentKey(OldKey);
    end;
  finally
    RegCloseKey(Key);
  end;
end;


Вместо TRegIniFile следует использовать TRegistry
см. ниже

Код

procedure TForm1.FormCreate(Sender: TObject);
var
  r : TRegIniFile;
  b : Boolean;
  r1 : TRegistry;
begin
{  r := TRegIniFile.Create('');
  r.RootKey := HKEY_CURRENT_USER;
  b := r.OpenKey('Software\7-Zip', false);
  r.WriteInteger('', 'smf', 123456);
  r.CloseKey;
  r.Free;  }
  r1 := TRegistry.Create;
  r1.RootKey := HKEY_CURRENT_USER;
  r1.OpenKey('Software\7-Zip', false);
  r1.WriteInteger('smf', 123456);
  r1.CloseKey;
  r1.Free;
end;

Автор: Kirgston 31.8.2008, 11:12
Да большое спасибо! Помогло! Но скажите пожалуйста мне такому оболдую. Какая разница в коде что вы создали и етом?

Код

procedure TForm2.Button1Click(Sender: TObject);
begin
if RadioGroup1.ItemIndex=0 then
Regini.WriteInteger('Config', 'Resolution', 0)
else
if RadioGroup1.ItemIndex=1 then
Regini.WriteInteger('Config', 'Resolution',1)
else
if RadioGroup1.ItemIndex=2 then
Regini.WriteInteger('Config', 'Resolution',2)
else
if RadioGroup1.ItemIndex=3 then
Regini.WriteInteger('Config', 'Resolution',3);
if RadioGroup2.ItemIndex=0 then
Regini.WriteInteger('Config', 'ColorDepth',0)
else
if RadioGroup2.ItemIndex=1 then
Regini.WriteInteger('Config', 'ColorDepth',1);
if CheckBox1.Checked then
Regini.WriteInteger('Config', 'WindowMode',1)
else
Regini.WriteInteger('Config', 'WindowMode',0);
if CheckBox2.Checked then
Regini.WriteInteger('Config', 'SoundOnOff',1)
else
Regini.WriteInteger('Config', 'SoundOnOff',0);
if CheckBox3.Checked then
Regini.WriteInteger('Config', 'MusicOnOff',1)
else
Regini.WriteInteger('Config', 'MusicOnOff',0);
if Edit1.Text<>'' then
Regini.WriteString('Config', 'ID',Edit1.Text);
Close;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
Regini:=TReginiFile.Create('Software');
RegIni.OpenKey('WebZen', true);
RegIni.OpenKey('Mu', true);
end;

Автор: Alexeis 31.8.2008, 11:21
Код

Regini:=TReginiFile.Create('Software'); //- создается объект класса TReginiFile

r1 := TRegistry.Create; //Создается объект класса TRegistry


Это просто 2 разных класса и все.

Автор: Kirgston 31.8.2008, 11:48
Аааа большое спасибо! Разобрался smile Просто я не мог создать TRegIniFiles пока в uses не вписал TRegistry. Потому думал что это одно и тоже. Большое спасибо!

Автор: CodeMonkey 31.8.2008, 12:30
Цитата(Kirgston @  31.8.2008,  11:48 Найти цитируемый пост)
пока в uses не вписал TRegistry

Не TRegistry, а Registry! Имя класса с именем модуля не путаем.

Автор: aqually 13.10.2022, 10:35
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)