Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];

Вниз

Сохранить число в реестр   Найти похожие ветки 

 
aslanbek   (2008-10-11 17:20) [0]

Мне недо сохранять число одно (счетчик)  в реестр. Как это можно сделать в Delphi? Не только сохранять ну и при нужде открывать для сравнивания.


 
Юрий Зотов ©   (2008-10-11 17:22) [1]

Для открывания реестра при нужде существует класс TRegistry. И он хорошо описан в справке Delphi, даже с готовыми примерами.


 
aslanbek   (2008-10-11 17:24) [2]

И важно ли в какое ветке реестра сохранять? Или это не имеет значения?


 
Palladin ©   (2008-10-11 17:26) [3]


> aslanbek   (11.10.08 17:24) [2]

:) а тебе важно куда файл сохранить на диске или ты все в корень пихаешь?


 
aslanbek   (2008-10-11 17:28) [4]

значит хоть куда? :)) спасибо


 
Юрий Зотов ©   (2008-10-11 17:29) [5]

> aslanbek   (11.10.08 17:24) [2]

Может иметь, а может и не иметь. Это зависит от задачи.

Но одно совершенно точно - "чужуе" ветки реестра лучше не трогать, если точно не знаешь, что это за ветка, для чего она предназначена, что и как в нее нужно писать. Иначе и до краха системы недалеко.

Лучше завести свою, уникальную ветку - вот в ней можно упражняться сколько угодно.


 
Palladin ©   (2008-10-11 17:31) [6]


> aslanbek   (11.10.08 17:28) [4]

Не хоть куда, а туда куда будет позволено текущей учетной записи пользователя. Это раз, два не нужно разводить бардак в реестре, и лезти куда не следует, отведи себе местечко и развлекайся.


 
aslanbek   (2008-10-11 17:49) [7]

dnei:integer;

TRegistry.Create.RootKey:= HKEY_CLASSES_ROOT ;
TRegistry.Create.OpenKey("audit",true);
TRegistry.Create.WriteString(inttoStr(dnei)," %1");
TRegistry.Create.CloseKey;

Где ошибка??  Что обозначает %1?


 
{RASkov} ©   (2008-10-11 17:56) [8]

> [7] aslanbek   (11.10.08 17:49)
> Где ошибка??

Везде :) Ужас какой-то...


 
{RASkov} ©   (2008-10-11 17:59) [9]

> [7] aslanbek   (11.10.08 17:49)
> TRegistry

Это класс. Тебе нужен объект данного класса и с ним работать, а ты что делаешь?
...понасоздавал "безпризорных" объектов(память занял и всё), причем несколько, и каждому дал по задаче из общей кучи, но так разве делают?
:)


 
Юрий Зотов ©   (2008-10-11 18:07) [10]

> aslanbek   (11.10.08 17:49) [7]

А вот в ветку HKEY_CLASSES_ROOT как раз лазить и не стоит. Опасно это. Играйтесь с HKEY_CURRENT_USER.


 
{RASkov} ©   (2008-10-11 18:25) [11]

> [7] aslanbek   (11.10.08 17:49)
> Что обозначает %1?

Не, не верно.....
Эт ж твой код и у тебя нужно интересоваться что же значит "%1" - этож строка и пишешь ты ее как строку а нужно вроде число...


 
Palladin ©   (2008-10-11 19:37) [12]

мне интересно какой логикой руководствовал автор этих строк


 
Riply ©   (2008-10-11 20:02) [13]

> [12] Palladin ©   (11.10.08 19:37)
> мне интересно какой логикой руководствовал автор этих строк

Мне так кажется, что это вольный перевод, ой - вольный копи-пайст
чего-то типа:
with TRegistry.Create do
begin

:)


 
Anatoly Podgoretsky ©   (2008-10-11 20:55) [14]


> значит хоть куда? :))

Хоть куда не получится.


 
MsGuns ©   (2008-10-11 21:37) [15]

Вот почеиу не следует рекомендовать новичкам сохранять настройки в реестре. Пусть забавляется с TIniFile


 
Тын-Дын ©   (2008-10-11 23:28) [16]

function IncCounter: Integer;
var
 R: TRegistry;
begin
 Result := -1;
 R := nil;
 try
   R := TRegistry.Create;
   if not R.OpenKey(Application.Title, True)
     then raise Exception.Create("Íå ìîãó ñîçäàòü â ðååñòðå êëþ÷ "+Application.Title);
   if R.ValueExists("Counter") then Result := R.ReadInteger("Counter");
   Inc(Result);
   R.WriteInteger("Counter",Result);
 finally
   R.Free;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.Title := "Super Puper Application";
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Label1.Caption := IntToStr(IncCounter);
end;


 
Германн ©   (2008-10-12 01:37) [17]


> Тын-Дын ©   (11.10.08 23:28) [16]

А зачем R := nil;?


 
aslanbek   (2008-10-12 02:08) [18]

спасибо всем, но я передумал лезть в реестр.


 
Германн ©   (2008-10-12 02:14) [19]


> aslanbek   (12.10.08 02:08) [18]
>
> спасибо всем, но я передумал лезть в реестр.
>

И на том спасибо! :)


 
aslanbek   (2008-10-12 02:17) [20]

))


 
{RASkov} ©   (2008-10-12 08:43) [21]

> [18] aslanbek   (12.10.08 02:08)
> но я передумал лезть в реестр

Да никто не против... лазей, но только в свой.... А ко мне, например, не нужно :)
Вот ты скажи, ты работаешь программистом или это так для себя?
Если для себя, то это поучительно, а если работаешь - то не допустимо!
:о)


 
Тын-Дын ©   (2008-10-12 12:52) [22]


> А зачем R := nil;?


Для R.Free.


 
Тын-Дын ©   (2008-10-12 15:18) [23]


> aslanbek   (12.10.08 02:08) [18]
> спасибо всем, но я передумал лезть в реестр.


А что так?
Счётчик удобно хранить в реестре.


 
Игорь Шевченко ©   (2008-10-12 16:50) [24]

Тын-Дын ©   (12.10.08 12:52) [22]

А зачем R := nil ?

Обычно создание объекта выносят выше, чем блок try finally с освобождением созданного объекта.


 
Тын-Дын ©   (2008-10-12 19:53) [25]


> Обычно создание объекта выносят выше, чем блок try finally
> с освобождением созданного объекта.


Не так давно было обсуждение о вложенных блоках try..finally при создании нескольких объектов последовательно.

Мне кажется, что пара лишних операторов присвоения будет не слишком высокой платой за хорошую прозрачность кода.

function IncCounter: Integer;
var
 R: TRegistry;
 L: TStringList;
 Ini: TIniFile;
begin
 Result := -1;
 R := nil;
 L := nil;
 Ini := nil;
 try
   L := TStringList.Create;
   Ini := TIniFile.Create;
//
// здесь работаем с L и Ini...
//
   R := TRegistry.Create;
   if not R.OpenKey(Application.Title, True)
    then raise Exception.Create("Не могу открыть ключ реестра "+Application.Title);
   if R.ValueExists("Counter") then Result := R.ReadInteger("Counter");
   Inc(Result);
   R.WriteInteger("Counter",Result);
 finally
   R.Free;
   L.Free;
   Ini.Free;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.Title := "Super Puper Application";
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(IncCounter);
end;



 
Riply ©   (2008-10-12 20:12) [26]

>  [25] Тын-Дын ©   (12.10.08 19:53)

Например, на строчке "L := TStringList.Create" или "здесь работаем с L и Ini..." ловим
исключение, после чего в блоке finally мужественно освобождаем не существующий объект R ?
:)


 
KilkennyCat ©   (2008-10-12 20:33) [27]


> Riply ©

а ты что здесь делаешь?! а ну, марш на письма отвечать! :)


 
Тын-Дын ©   (2008-10-12 21:35) [28]


> исключение, после чего в блоке finally мужественно освобождаем
> не существующий объект R ?


Да, мужественно-)
но при этом учитываем логику метода Free.;)


 
Игорь Шевченко ©   (2008-10-12 21:49) [29]


> Мне кажется, что пара лишних операторов присвоения будет
> не слишком высокой платой за хорошую прозрачность кода.


мне кажется, что пара лишних операторов заведомо будет ухудшать прозрачность кода. но дело даже не в этом. я на собеседовании задаю вопросы из опросника Юрия Зотова, за что ему респект и уважение безусловно. Так вот, один из вопросов звучит так:

"Что неправильно в этом коде:

...
 try
   Obj := TSomeObject.Create;
   ...
 finally
   Obj.Free;
 end;
...


"


 
KilkennyCat ©   (2008-10-12 21:52) [30]

хм... детский вопрос. Мне казалось, опросник сложнее.


 
Игорь Шевченко ©   (2008-10-12 21:59) [31]

KilkennyCat ©   (12.10.08 21:52) [30]

Так он лет пять назад в потрепаловке активно обсуждался. Тем не менее, есть кандидаты, которые и на этотвопрос не отвечают.


 
Riply ©   (2008-10-12 22:05) [32]

> [29] Игорь Шевченко ©   (12.10.08 21:49)
> я на собеседовании задаю вопросы из опросника Юрия Зотова, за что ему респект и уважение безусловно.

А как можно посмотреть этот "опросник" ? Уж очень интересно.

P.S.
Это не для того, чтобы, подготовившись, пройти у Вас собеседование :)


 
Игорь Шевченко ©   (2008-10-12 22:06) [33]


> А как можно посмотреть этот "опросник" ? Уж очень интересно.


Очевидно, спросить у автора ? :)


 
oxffff ©   (2008-10-12 22:25) [34]

Можно даже так. :)

procedure Guard(GuardCode:TProc;GuardObject:Tobject);inline
begin
 try
 GuardCode;
 finally
 GuardObject.Free;
 end;
end;

procedure UseIt;
var a,b,c:Tobject;
begin
A:=TObject.Create;
Guard(procedure
      begin
      showmessage(a.ClassName);
      b:=TObject.Create;
           Guard(procedure
                 begin
                 showmessage(b.ClassName);
                 c:=TObject.Create;
                     Guard(procedure
                            begin
                            showmessage(c.ClassName);
                            end,
                            C);
                 end,
                 B);
      end,A);
end;


 
Тын-Дын ©   (2008-10-13 00:31) [35]


> Игорь Шевченко ©   (12.10.08 21:49) [29]
> мне кажется, что пара лишних операторов заведомо будет ухудшать
> прозрачность кода. но дело даже не в этом. я на собеседовании
> задаю вопросы из опросника Юрия Зотова, за что ему респект
> и уважение безусловно. Так вот, один из вопросов звучит
> так:"Что неправильно в этом коде:...  try    Obj := TSomeObject.
> Create;    ...  finally    Obj.Free;  end;..."


Давай сравним прозначность и читабельность кода:

function CheckFile1(const FileName: String): Integer;
var
 Ini: TIniFile;
 FC: TFileChecker;
 L: TStringList;
begin
 Ini := nil;
 FC := nil;
 L := nil;
 Result := -1;
 try
   Ini := TIniFile.Create("app.ini");
   FC := TFileChecker.Create;
   L := TStringList.Create;
   L.LoadFromFile(INi.ReadString("Files","MainFile",""));
   Result := FC.Check(L);
 finally
   Ini.Free;
   FC.Free;
   L.Free;
 end;
end;

function CheckFile2(const FileName: String): Integer;
var
 Ini: TIniFile;
 FC: TFileChecker;
 L: TStringList;
begin
 Result := -1;
 Ini := TIniFile.Create("app.ini");
 try
   L := TStringList.Create;
   try
     FC := TFileChecker.Create;
     try
       L.LoadFromFile(INi.ReadString("Files","MainFile",""));
       Result := FC.Check(L);
     finally
       FC.Free;
     end;
   finally
     L.Free;
   end;
 finally
   Ini.Free;
 end;
end;


И какая из них легче читается?


 
Тын-Дын ©   (2008-10-13 00:34) [36]

Что касается кода

...
try
  Obj := TSomeObject.Create;
  ...
finally
  Obj.Free;
end;
...


То здесь 2 ответа на вопрос.
1.
...
 Obj := nil;
 try
   Obj := TSomeObject.Create;
   ...
 finally
   Obj.Free;
 end;
...


2.
...
 Obj := TSomeObject.Create;
 try
   ...
 finally
   Obj.Free;
 end;
...


 
Германн ©   (2008-10-13 00:53) [37]


> Тын-Дын ©   (13.10.08 00:34) [36]

Ну если ты нашёл 2 ответа, то есть ещё и третий :)


 
Тын-Дын ©   (2008-10-13 01:03) [38]


> Ну если ты нашёл 2 ответа, то есть ещё и третий :)


Видимо ты его знаешь?


 
Германн ©   (2008-10-13 01:06) [39]


> Тын-Дын ©   (13.10.08 01:03) [38]

Знаю. Он у ЮЗ самый любимый. :)


 
Юрий Зотов ©   (2008-10-13 01:33) [40]

> Германн ©   (13.10.08 01:06) [39]

Как правило, в достаточно коротких конструкциях, чтоб на одном экране весь блок умещался.

Вообще, странно. Одни люди мне говорят, что мой код читается с трудом, другие - наоборот, что он прост и прозрачен. Где правда, брат?



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.009 c
2-1223819376
lewka
2008-10-12 17:49
2008.11.23
WebBrowser


2-1224048798
ekto
2008-10-15 09:33
2008.11.23
курсор не возвращает записи


15-1222086830
clickmaker
2008-09-22 16:33
2008.11.23
Браузеры и локальные ссылки


2-1223702031
Vinum
2008-10-11 09:13
2008.11.23
Измерить отрезок времени


15-1222152524
IceBeerg
2008-09-23 10:48
2008.11.23
программное обновление конфигурации windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский