Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Delphi. Π’Ρ€ΡŽΠΊΠΈ ΠΈ эффСкты». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 36

Автор Π’Π°Π»Π΅Ρ€ΠΈΠΉ Борисок

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎ Π΄Π΅Π»Π΅: Π΅ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ° для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ запроса ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ½Π° ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Π° Π½Π° рис. 7.7.

Рис. 7.7. Π€ΠΎΡ€ΠΌΠ° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° для поиска Ρ‚ΠΎΠ²Π°Ρ€Π°

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π΅ ΡΡƒΡ‚ΡŒ Π²Π°ΠΆΠ½ΠΎ, Π° Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ОК ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„ΠΎΡ€ΠΌΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Π±ΡƒΠ΄ΡƒΡ‚ сохранСны Π² рССстрС ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ SaveFilter (листинг 7.14).

...

Листинг 7.14.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹ Π² рССстрС

procedure TForm1.OKClick(Sender: TObject);

begin

SaveFilter();

//ВыполняСм Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ дСйствия…

end;

//ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° сохраняСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² рССстр

procedure TForm1.SaveFilter();

var

reg: TRegistry; //По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: RootKey = HKEY_CURRENT_USER

strShops: String;

i: Integer;

begin

reg := TRegistry.Create();

try

//ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΈΠ»ΠΈ создаСм Ρ€Π°Π·Π΄Π΅Π», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚

//сохранСны ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΎΡ€ΠΌΡ‹

reg.OpenKey(strBaseKey + \'\Form1\', True);

//Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

//1. Π Π°Π·ΠΌΠ΅Ρ€ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹

reg.WriteInteger(\'Width\', Width);

reg.WriteInteger(\'Height\', Height);

reg.WriteInteger(\'Top\', Top);

reg.WriteInteger(\'Left\', Left);

//2. ПослСднСС ввСдСнноС наимСнованиС

reg.WriteString(\'txtName.Text\', txtName.Text);

//3. Π’Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹

strShops := \'\

for i := 0 to lstShops.Count–1 do

if lstShops.Selected[i] then

strShops := strShops + lstShops.Items[i] + \',\

reg.WriteString(\'lstShops.Selection\', strShops);

//4. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ сортировки

reg.WriteBool(\'chkSort.Checked\', chkSort.Checked);

except

on ERegistryException do

MessageBox(Handle, \'Ошибка ΠΏΡ€ΠΈ сохранСнии Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°\',

\'Поиск Ρ‚ΠΎΠ²Π°Ρ€Π°\', MB_ICONEXCLAMATION)

;

end;

reg.CloseKey();

reg.Free();

end;

Π’ рассматриваСмом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ константа strBaseKey, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π° для сохранСния настроСк, Π·Π°Π΄Π°Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

...

const

strBasekey = \'Software\Delphi. Π’Ρ€ΡŽΠΊΠΈ ΠΈ эффСкты\Настройки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹\

ΠžΡ‚ΠΊΡ€Ρ‹Π² Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ рССстра, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ сохранСнии Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… Π½Π°ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (рис. 7.8).

Рис. 7.8. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΎΡ€ΠΌΡ‹, записанныС Π² рССстр

Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π΅Π΅ создании. Π’ΠΎΠ³Π΄Π° Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события Create достаточно ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ LoadFilter (листинг 7.15).

...

Листинг 7.15.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠ· рССстра

procedure TForm1.FormCreate(Sender: TObject);

begin

LoadFilter();

end;

//ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠ· рССстра

procedure TForm1.LoadFilter();

var

reg: TRegistry; //По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: RootKey = HKEY_CURRENT_USER

strShops: String;

shopStart, shopEnd: Integer;

begin

reg := TRegistry.Create();

try

//ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сохранСны ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΎΡ€ΠΌΡ‹

reg.OpenKey(strBaseKey + \'\Form1\', False);

//Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° сохранСнных Ρ€Π°Π½Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

//1. Π Π°Π·ΠΌΠ΅Ρ€ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹

Width := reg.ReadInteger(\'Width\');

Height := reg.ReadInteger(\'Height\');

Top := reg.ReadInteger(\'Top\');

Left := reg.ReadInteger(\'Left\');

//2. ПослСднСС ввСдСнноС наимСнованиС

txtName.Text := reg.ReadString(\'txtName.Text\');

//3. Π’Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π· ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹

strShops := reg.ReadString(\'lstShops.Selection\');

shopStart := 1;

for shopEnd := 0 to Length(strShops) do

if strShops[shopEnd] = \',\' then

begin

//ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π² спискС

SelectShop(Copy(strShops, shopStart,

shopEnd – shopStart));

shopStart := shopEnd + 1;

end;

//4. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ сортировки

chkSort.Checked := reg.ReadBool(\'chkSort.Checked\');

except

on ERegistryException do

//Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ ошибки (просто Π½Π΅

//Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ‡ΠΈΡ‚Π°Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· рССстра,

//Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹)

;

end;

reg.CloseKey();

reg.Free();

end;

//ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° выдСляСт ΠΌΠ°Π³Π°Π·ΠΈΠ½ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ

//(Ссли ΠΎΠ½ Π΅ΡΡ‚ΡŒ Π² спискС)

procedure TForm1.SelectShop(strShopName: String);

var

i: Integer;

begin

for i := 0 to lstShops.Count–1 do

if lstShops.Items[i] = strShopName then

begin

lstShops.Selected[i] := True;

Exit;

end;

end;

НСкоторая ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ списка Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ² обусловлСна ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ списка Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΡΠ»ΠΈΡΡŒ Ρ€Π°Π½Π΅Π΅ Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹ (ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ просто ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ индСксы).

...

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ LoadFilter Π½Π΅ появлялись сообщСния ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… (ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ Delphi), снимитС Ρ„Π»Π°ΠΆΠΎΠΊ Stop on Delphi Exceptions Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Language Exceptions Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Debugger Options (мСню Tools β†’ Debugger Options).

Автозапуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π’Π°ΠΊ ΡƒΠΆ повСлось, Ρ‡Ρ‚ΠΎ, рассматривая Ρ€Π°Π±ΠΎΡ‚Ρƒ с рССстром, Ρ€Π΅Π΄ΠΊΠΎ удаСтся ΡƒΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ ΠΎΡ‚ рассказа, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ автоматичСский запуск ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, минуя прСсловутоС мСню Автозагрузка. КоснСмся этой Ρ‚Π΅ΠΌΡ‹ ΠΈ ΠΌΡ‹: рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простыС способы автоматичСского запуска Π½Π΅ сСрвисных (!) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π˜Ρ‚Π°ΠΊ, Π² вСтвях рССстра HKEY_CURRENT_USER ΠΈ HKEY_LOCAL_MACHINE находятся Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Software\Microsoft\Windows\CurrentVersion\RunΠΈ Software\ Microsof t\Windows\CurrentVersion\RunOnce. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ (Run) ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΡƒΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, запускаСмых ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Windows. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΆΠ΅ RunOnce ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ прилоТСния Ρ‚ΠΈΠΏΠ° инсталляторов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° рСгистрации ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Windows, Π½ΠΎ Π΄ΠΎ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠŸΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊ. ΠŸΡ€ΠΈ запускС прилоТСния, зарСгистрированного Π² ΠΊΠ»ΡŽΡ‡Π΅ RunOnce, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ запись ΠΈΠ· этого Ρ€Π°Π·Π΄Π΅Π»Π° автоматичСски удаляСтся.

ΠžΡ‚ Π²Ρ‹Π±ΠΎΡ€Π° Π²Π΅Ρ‚Π²ΠΈ рССстра (HKEY_LOCAL_MACHINE Π˜Π›Π˜ HKEY_CURRENT_USER) зависит, Π² сСансС всСх Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Рассмотрим созданиС ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, способной ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, запускаСтся Π»ΠΈ ΠΎΠ½Π° автоматичСски, Π° Ссли запускаСтся, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² Π½ΡƒΠΆΠ½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… рССстра для задания Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° запуска.

ΠŸΡƒΡΡ‚ΡŒ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ прилоТСния располоТСны Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ (рис. 7.9). ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, привСдСнная Π² листингС 7.16, устанавливаСт состояния ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Π΅Ρ‚Π²ΠΈ HKEY_LOCAL_MACHINE располоТСн ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌ с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (это ΡƒΡΠ»ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Π° я Π½ΡƒΠΆΠ½Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°).

Рис. 7.9. Π€ΠΎΡ€ΠΌΠ° послС опрСдСлСния Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ€Π΅ΠΆΠΈΠΌΠ° запуска прилоТСния

...

Листинг 7.16.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° запуска прилоТСния

procedure TForm1.GetRunMode();

var

reg: TRegistry;

begin

reg := TRegistry.Create();

reg.RootKey := HKEY_LOCAL_MACHINE;

//ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ запускаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (ΠΏΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

//Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…)

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\Run\',

False)

then

begin

if reg.ValueExists(Application.Title) then

begin

//ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΅ΡΡ‚ΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Run β€”

//запускаСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Windows

optAutoRun.Checked := True;

reg.CloseKey();

Exit;

end;

reg.CloseKey();

end;

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\

RunOnce\', False)

then

begin

if reg.ValueExists(Application.Title) then

begin

//ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΅ΡΡ‚ΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ RunOnce β€”

//запускаСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ стартС Windows

optRunOnce.Checked := True;

reg.CloseKey();

Exit;

end;

reg.CloseKey();

end;

//Автозапуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (рассматриваСмым способом) Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½

optRunNone.Checked := True;

reg.Free();

end;

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запуска ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ (Π² рассматриваСмом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ) ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ (листинг 7.17).

...

Листинг 7.17. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° запуска

procedure TForm1.cmbApplyClick(Sender: TObject);

var

reg: TRegistry;

begin

reg := TRegistry.Create();

reg.RootKey := HKEY_LOCAL_MACHINE;

//ΠžΡ‚ΠΌΠ΅Π½Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ°

//..ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° Run

if not optAutoRun.Checked then

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\

Run\', False)

then

begin

reg.DeleteValue( Application.Title );

reg.CloseKey();

end;

//..ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° RunOnce

if not optRunOnce.Checked then

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\

RunOnce\',False)

then

begin

reg.DeleteValue( Application.Title );

reg.CloseKey();

end;

//Установка Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° (созданиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² ΡΠΎΠΎΡ‚Π²Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ

//Ρ€Π°Π·Π΄Π΅Π»Π΅)

if optAutoRun.Checked then

//..Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² Ρ€Π°Π·Π΄Π΅Π» Run

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\

Run\', True)

then

begin

reg.WriteString( Application.Title, Application.ExeName);

reg.CloseKey();

end;

if optRunOnce.Checked then

//..Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² Ρ€Π°Π·Π΄Π΅Π» RunOnce

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\

RunOnce\',True)

then

begin

reg.WriteString( Application.Title, Application.ExeName);

reg.CloseKey();

end;

//Для вСрности ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ показания Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ· рССстра

GetRunMode();

reg.Free();

end;

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ‚Π²ΡŒ рССстра Π½Π° HKEY_CURRENT_USER, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ) Π·Π°ΠΏΡƒΡΠΊΠ°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Запуск прилоТСния ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

Π‘Ρ€Π°Π·Ρƒ оговоримся, Ρ‡Ρ‚ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ стр ΠΎΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· ΠΎΠΊΠ½Π° Запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠŸΡƒΡΠΊ β†’ Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ) ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ любоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: достаточно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ввСсти Π΅Π³ΠΎ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ (ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΏΠ°ΠΏΠΊΠΈ) ΠΏΡƒΡ‚ΡŒ. Однако, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‡Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прилоТСния ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, просто вводя Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС имя прилоТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ msaccess ΠΈΠ»ΠΈ winword. ЗаймСмся обСспСчСниСм возмоТности запуска прилоТСния Ρ‚Π°ΠΊΠΈΠΌ ускорСнным способом.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для быстрого запуска, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΡƒΡ‚ΡŒ Π² Π²Π΅Ρ‚Π²ΡŒ рССстра SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° HKEY_CURRENT_USER Π˜Π›Π˜ HKEY_LOCAL_MACHINE. ΠŸΡƒΡ‚ΡŒ Π•Π₯Π•-Ρ„Π°ΠΉΠ»Π° прилоТСния Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ записан Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ имя, ΠΊΠ°ΠΊ ΠΈ Π•Π₯Π•-Ρ„Π°ΠΉΠ» прилоТСния (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для быстрого запуска, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 7.18.

...

Листинг 7.18.

РСгистрация прилоТСния для запуска ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

procedure RegisterQuickStart();

var

reg: TRegistry;