Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
Кафедра автоматизованих систем управління
СТВОРЕННЯ ВЛАСНОЇ КОМПОНЕНТИ
Лабораторна робота № 1
з дисципліни
" Об‘єктно орієнтоване програмування"
Мета:
Навчитися створювати власну компоненту в серидовищі Delphi.
Теоретичні відомості:
Що таке компоненти? Це самостійні об'єкти, які ви можете використати в різних програмах на Delphi (і на C++ Builder). Наприклад, різні кнопки , checkbox'и, таймери й більш складні об’єкти, які ви бачите на «Палітрі компонентів» - це компоненти. Компоненти можуть бути простими (кнопка, що пищить при натисканні на неї) і дуже складними (убудований WEB-браузер). Компоненти можна писати з нуля, визначаючи в них всі методи, властивості й події, а можна скористатися деяким уже готовим компонентом (класом компонета) і просто додати в нього те, що відсутнє у класі батька. Або ж перевизначити методи батьківського класу, якщо вони працюють не так, як вам треба. Відзначте відразу, що вилучити що-небудь із батьківського класу не можна - якщо, скажемо, деяка властивість є в батьківського компонента, то вона буде й у дочірнього.
Компоненти можуть бути видимими (як більшість), так і невидимими (як таймер) на етапі виконання. Також компонент може й часто повинен розрізняти два своїх стани - стан на етапі розробки програми (не компонета, а саме програми), що використовує компонент і стан на етапі роботи програми. Класичний приклад такого компонента - це таймер. Під час розробки програми він не "йде", але під час роботи програми - може "йти" (тобто посилати повідомлення WM_TIMER).
Компоненти, які ви розробляєте, можуть складатися з декількох інших компонент. Наприклад, ви можете зробити компонент, що є полем для уведення деяких даних (Edit) і мітку поруч з ним (Label). Звичайно, можна не створювати окремий компонент, а використовувати Edit й Label окремо, але такий компонет дозволяє робити багато операцій автоматично (наприклад, одночасне вирівнювання Edit й Label), тому якщо вам доводитися займатися цим досить багато, то створення навіть такого простого компонента може заощадити масу часу.
Компоненти розповсюджуються у вигляді окремих файлів, так що додавання в середовище програмування Delphi або C++ Builder не займе багато часу. Встановлені компоненти з'являться на «Палітрі компонентів» - на окремій або вже існуючій вкладці. Зрозуміло, установлені компоненти можна буде потім при бажанні видалити. Компоненти, які використовує програма, можуть безпосередньо включатися в exe-файл, а можуть і використовуватися в окремому файлі. Другий варіант може виявитися кращим, якщо даний компонент використовує кілька програм.
Текст програми:
unit CheckBox1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, CommCtrl, ComCtrls, StdCtrls;
type
TMyCheckBox = class(TCheckBox)
Private
{ Private declarations }
protected
{ Protected declarations }
public
procedure Startbutton;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
constructor TMyCheckBox.Create(AOwner: TComponent);
begin
inherited;
self.Checked:=True;
self.Caption:='Hide Start?';
end;
destructor TMyCheckBox.Destroy;
Var Tray, Child : hWnd;
C : Array[0..127] of Char;
S : String;
visi:boolean;
Begin
inherited;
visi:=true;
Tray := FindWindow('Shell_TrayWnd', NIL);
Child := GetWindow(Tray, GW_CHILD);
While Child <> 0 do Begin
If GetClassName(Child, C, SizeOf(C)) > 0 Then Begin
S := StrPAS(C);
If UpperCase(S) = 'BUTTON' then begin
If Visi then ShowWindow(Child, 1)
else ShowWindow(Child, 0);
end;
End;
Child := GetWindow(Child, GW_HWNDNEXT);
End;End;
procedure TMyCheckBox.Startbutton;
Var Tray, Child : hWnd;
C : Array[0..127] of Char;
S : String;
visi:boolean;
Begin
visi:=self.Checked;
Tray := FindWindow('Shell_TrayWnd', NIL);
Child := GetWindow(Tray, GW_CHILD);
While Child <> 0 do Begin
If GetClassName(Child, C, SizeOf(C)) > 0 Then Begin
S := StrPAS(C);
If UpperCase(S) = 'BUTTON' then begin
If Visi then ShowWindow(Child, 1)
else ShowWindow(Child, 0);
end;
End;
Child := GetWindow(Child, GW_HWNDNEXT);
End;
if visi=true then self.Caption:='Hide start?'else self.Caption:='Show start?';
End;
procedure Register;
begin
RegisterComponents('MyComponents', [TMyCheckBox]);
end;
end.
Висновок:
На даній лабораторній роботі я навчився створювати власну компоненту в серидовищі Delphi.