Форум: "Начинающим";
Текущий архив: 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]f
unction 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