Мережа магазинів - кей - перегляд теми - faq створення autorun на delphi

FAQ по створенню автозапуску на Delphi.

1. Як зробити так, щоб моя програма стартувала при завантаженні диска в привід?

Тут ICON.ICO - це файл з іконкою. Якщо хочете використовувати іконку вашої програми, то необхідно вказати файл програми. AUTORUN.EXE - це і є додаток автозапуску, яке і буде стартувати при приміщенні диска в CD-привід.

2. Як з мого автозапуску запустити програму установки?

Для запуску програм використовується Win32API-функція ShellExecute. Для її використання до програми потрібно підключити модуль ShellAPI.

Код: Виділити все ShellExecute # 40; hwnd: HWND, lpOperation: LPCTSTR, lpFile: LPCTSTR, lpParameters: LPCTSTR, lpDirectory: LPCTSTR, nShowCmd: INT # 41 ;: HINSTANCE

Наприклад, щоб запустити notepad.exe, потрібно виконати наступний код
Код: Виділити все ShellExecute # 40; Handle, nil, PChar # 40; 'notepad.exe' # 41 ;, nil, nil, SW_ShowNormal # 41 ;;

Якщо змінна lpFile буде містити шлях до каталогу, то буде відкрито провідник з цим каталогом. Як шляхів можна використовувати як абсолютні, так і відносні.

3. Як зробити красиві текстові кнопки?

Красиві текстові кнопки можна зробити за допомогою компонента TLabel. Гарного ефекту можна досягти, якщо виставити у нього шрифт Comic Sans MS. Розмір шрифту теж можна зробити побільше а колір зробити яскравішою - синій, червоний.

За подією OnClick викликаємо функцію ShellExecute () з потрібними параметрами
Код: Виділити все procedure TForm1.Label1Click # 40; Sender: TObject # 41 ;;
begin
ShellExecute # 40; Handle, nil, '.. \ progi \ setup.exe', nil, nil, SW_SHOWNORMAL # 41 ;;
end;

За подією OnMouseMove поміняємо колір на новий
Код: Виділити все procedure TForm1.Label1MouseMove # 40; Sender: TObject; Shift: TShiftState; X,
Y: Integer # 41 ;;
begin
Label 1.Font.Color: = clLime;
end;

А за подією OnLeave поміняємо колір назад
Код: Виділити все procedure TForm1. Label 1MouseLeave # 40; Sender: TObject # 41 ;;
begin
Label 1.Font.Color: = clYellow;
end;

При наведенні курсора на Label поміняємо колір на синій, а стиль шрифту зробимо підкресленим.

Код: Виділити все procedure TForm1.Label1MouseMove # 40; Sender: TObject; Shift: TShiftState; X,
Y: Integer # 41 ;;
begin
Label1.Font.Color: = clBlue;
Label.Font.Style:=#91;fsUnderline#93 ;;
end;

Коли курсор виявиться за межами Label, то відновимо колір і стиль шрифту.
Код: Виділити все procedure TForm1.Label1MouseLeave # 40; Sender: TObject # 41 ;;
begin
Label1.Font.Color: = clBlack;
Label.Font.Style:=#91;#93 ;;
end;


5. Як зробити красиве оформлення для автозапуску?

У Delphi є чудовий компонент TImage. Зараз я покажу, як використовувати його в наших цілях.

Припустимо, у вас є картинка, яку ви хотіли б використовувати для прикраси програми. Потрібно помістити на чисту форму компонент TImage, в інспекторові об'єктів міняємо його властивість Align на alClient. Компонент розтягнувся по всій формі. Тепер потрібно завантажити картинку. Для цього клікніть два рази в інспекторові об'єктів по властивості picture. Відкриється вікно, в якому натисніть кнопку Load ... для завантаження картинки в компонент і натисніть OK.

Відмінно! Картинка з'явилася. Але яку картинку видно не повністю, або видно порожні місця форми. Це не добре. Для усунення несправності поставте властивість Stretch в true. Чудово виходить! Якщо вас не влаштовує те, що ви бачите, пограйте з властивостями center і proportional. Тільки одне попередження. Не чіпайте властивість Transperent. Можуть виникнути значні гальма з графікою.

6. Як прибрати заголовок у форми і зробити її розміри фіксованими?

Для того, щоб розміри форми не можна було змінити, встановимо її властивість BorderStyle в bsDialog, bsNone або bsSingle. При значенні bsSingle ще бажано властивість BorderIcons встановити в [].

Якщо ви вже перевірили всі режими BorderStyle, то помітили, що коли воно одно bsNone, то заголовок взагалі зникає. Тоді, якщо використовувати відповідь на питання 5, можна отримати досить гарний результат.

7. Якщо у форми немає заголовка, як її можна перетягнути мишкою?

Наприклад, можна перетягувати за Image1 з питання 5. У розділі private знадобитися додати три змінні
Код: Виділити все private
OldX, OldY: integer;
Moving: Boolean;

Тоді для Image1 потрібно обробити три події.

OnMouseDown:
Код: Виділити все if button = mbLeft then begin // Якщо натиснута ліва кнопка, то
moving: = true; // Стан перетягування
OldX: = X; // Запам'ятати X
OldY: = Y; // Запам'ятати Y
end;
OnMouseMove:
Код: Виділити все if moving then begin // Якщо в стані перетягування, то
Left: = Left + X-OldX; // Перемістити по X
Top: = Top + Y-OldY; // Перемістити по Y
end;
OnMouseUp:
Код: Виділити все if button = mbLeft then moving: = false; // якщо відтиснуті ліва кнопка, то
// НЕ перетягуйте

Ці ж функції можна написати і для будь-якого іншого компонента, за який хочеться перетягувати.

8. Якщо на диску багато програм, як можна запускати їх зі списку?

Суть прикладу така. У нас є ListBox1 типу TListBox. У нього забиваємо шляху до програм. По подвійному кліку на потрібній програмі вона запускається. Робиться це досить просто.

В обробник OnDblClick для ListBox1 пишемо такий код.
Код: Виділити все procedure TForm1.ListBox1DblClick # 40; Sender: TObject # 41 ;;
var
Name: String;
begin
Name: = ListBox1.Items.Strings # 91; ListBox1.ItemIndex # 93 ;;
ShellExecute # 40; Handle, 'open', PChar # 40; Name # 41 ;, nil, nil, SW_SHOWNORMAL # 41 ;;
end;

Якщо хочете, щоб у лістбоксе відображалися назви програм, а не шляхи до них, можна кинути на форму ListBox2, в який треба набити назви, відповідно шляхах в ListBox1. Потім властивість ListBox1.Visible ставимо в false. Оброблювач ListBox1DblClick вже не потрібен. Тепер можна написати обробник OnDblClick для ListBox2 у вигляді.
Код: Виділити все procedure TForm1.ListBox2DblClick # 40; Sender: TObject # 41 ;;
var
Name: String;
begin
Name: = ListBox1.Items.Strings # 91; ListBox2.ItemIndex # 93 ;;
ShellExecute # 40; Handle, 'open', PChar # 40; Name # 41 ;, nil, nil, SW_SHOWNORMAL # 41 ;;
end;


9. Як зробити музичний супровід?

Програвати музику найзручніше компонентом TMediaPlayer.

Кинемо на форму екземпляр TMediaPlayer1. Його властивість visible відразу встановимо в false. Заодно поставимо на форму і CheckBox1. У нього властивість caption перейменуємо в "Грати музику". Припустимо, треба програти файл 1.mp3, що знаходиться в папці music на диску.

Тоді в обробник OnCreate для форми напишемо такий код
Код: Виділити все try
MediaPlayer1.FileName: = '. \ Music \ 1.mp3';
MediaPlayer1.Open;
MediaPlayer1.Play;
CheckBox1.Checked: = true;
except
CheckBox1.Enabled: = false;
CheckBox1.Visible: = false;
CheckBox1.Checked: = false;
end;

Тут ми відкриваємо і включаємо програвання файлу. У тому випадку, якщо файлу не існує або в системі не встановлені кодеки, ми приховуємо CheckBox1 і нічого програвати не будемо.

Якщо все ж файл відкрився успішно і почав відтворюватися, то користувачеві треба дати можливість його відключити від мережі. Для цього напишемо обробник OnClick для CheckBox1.
Код: Виділити все procedure TForm1.CheckBox1Click # 40; Sender: TObject # 41 ;;
begin
if CheckBox1.Checked then
MediaPlayer1.Play
else
MediaPlayer1.Stop;
end;

Ваш час обмежений, тому не витрачайте його на чиюсь чуже життя.

madrat писал (а): Сама програма.


UPX ще ніхто не відміняв.


Ну так. Він мені більше подобається, хоча зі стиснення одне і теж. мабуть.

З повагою В'ячеслав.

Lite писал (а): хоча зі стиснення одне і теж. мабуть.


И? Як це одне і теж. Для порівняння стисни один і той-же файл Aspack'ом і UPX'ом - переконаєшся що не одне і теж.

Email / Jabber: andyeth0.spb.ru / andykorona-auto.com

Знайшли, про що сперечатися. Краще б відгуки якісь написали.

Цікаво про стиснення програм поговорити, так створіть окрему тему. Потім якийсь чол зайде і відразу її побачить, дізнається, що такі проги є, як UPX і ASPack. А то, що дане питання тут обговорювалося, він врятли запам'ятає. Знову виходить, двоє людей сказали дурницю і пішло-поїхало.

2Fatal Error: Можна все, що стосується стиснення, в окрему гілку перемістити?

Ваш час обмежений, тому не витрачайте його на чиюсь чуже життя.

Схожі статті