Professional Documents
Culture Documents
ȽɈɋɍȾȺɊɋɌȼȿɇɇɈȿ ɈȻɊȺɁɈȼȺɌȿɅɖɇɈȿ
ɍɑɊȿɀȾȿɇɂȿ
ȼɕɋɒȿȽɈ ɉɊɈɎȿɋɋɂɈɇȺɅɖɇɈȽɈ ɈȻɊȺɁɈȼȺɇɂə
«ȼɈɊɈɇȿɀɋɄɂɃ ȽɈɋɍȾȺɊɋɌȼȿɇɇɕɃ
ɍɇɂȼȿɊɋɂɌȿɌ»
ɊȺɁɊȺȻɈɌɄȺ ɄɈɆɉɈɇȿɇɌɈȼ
ȼ DELPHI
ɍɱɟɛɧɨ-ɦɟɬɨɞɢɱɟɫɤɨɟ ɩɨɫɨɛɢɟ ɞɥɹ ɜɭɡɨɜ
ɋɨɫɬɚɜɢɬɟɥɢ:
Ƚ.ɗ. ȼɨɳɢɧɫɤɚɹ,
ȼ.Ƚ. Ɋɭɞɚɥɟɜ,
Ɇ.Ⱥ. Ⱥɪɬɟɦɨɜ
ɂɡɞɚɬɟɥɶɫɤɨ-ɩɨɥɢɝɪɚɮɢɱɟɫɤɢɣ ɰɟɧɬɪ
ȼɨɪɨɧɟɠɫɤɨɝɨ ɝɨɫɭɞɚɪɫɬɜɟɧɧɨɝɨ ɭɧɢɜɟɪɫɢɬɟɬɚ
2007
ɍɬɜɟɪɠɞɟɧɨ ɧɚɭɱɧɨ-ɦɟɬɨɞɢɱɟɫɤɢɦ ɫɨɜɟɬɨɦ ɮɚɤɭɥɶɬɟɬɚ ɩɪɢɤɥɚɞɧɨɣ ɦɚɬɟ-
ɦɚɬɢɤɢ, ɢɧɮɨɪɦɚɬɢɤɢ ɢ ɦɟɯɚɧɢɤɢ 14 ɦɚɹ 2007 ɝ., ɩɪɨɬɨɤɨɥ ʋ 9
3
ȼɜɟɞɟɧɢɟ
1. ɂɫɯɨɞɧɵɟ ɩɨɥɨɠɟɧɢɹ
4
ɤɨɬɨɪɵɟ ɩɪɟɞɨɫɬɚɜɥɹɸɬ ɤɨɦɩɨɧɟɧɬɚɦ ɜɨɡɦɨɠɧɨɫɬɶ ɨɛɪɚɛɚɬɵɜɚɬɶɫɹ ɞɢɡɚɣ-
ɧɟɪɨɦ ɮɨɪɦ.
ɏɨɬɹ ɤɨɦɩɨɧɟɧɬɵ ɢ ɪɟɚɥɢɡɭɸɬɫɹ ɫ ɢɫɩɨɥɶɡɨɜɚɧɢɟɦ ɤɥɚɫɫɨɜ ɹɡɵɤɚ
Delphi, ɧɨ ɨɛɴɹɜɥɟɧɢɟ ɤɥɚɫɫɚ ɧɟ ɹɜɥɹɟɬɫɹ ɨɛɴɹɜɥɟɧɢɟɦ ɤɨɦɩɨɧɟɧɬɚ, ɟɫɥɢ
ɤɥɚɫɫ ɧɟ ɩɨɪɨɠɞɟɧ ɨɬ Ɍɋɨmɪɨnent. ɗɤɡɟɦɩɥɹɪɵ ɤɥɚɫɫɨɜ, ɤɨɬɨɪɵɟ ɩɪɨɢɡ-
ɜɟɞɟɧɵ ɨɬ TComponent, ɧɚɡɵɜɚɸɬɫɹ ɤɨɦɩɨɧɟɧɬɚɦɢ, ɚ ɷɤɡɟɦɩɥɹɪɵ ɜɫɟɯ
ɞɪɭɝɢɯ ɤɥɚɫɫɨɜ ɧɚɡɵɜɚɸɬɫɹ ɨɛɴɟɤɬɚɦɢ. Ƚɥɚɜɧɚɹ ɪɚɡɧɢɰɚ ɦɟɠɞɭ ɷɬɢɦɢ ɞɜɭ-
ɦɹ ɩɨɧɹɬɢɹɦɢ ɡɚɤɥɸɱɚɟɬɫɹ ɜ ɬɨɦ, ɱɬɨ ɤɨɦɩɨɧɟɧɬɚɦɢ ɦɨɠɧɨ ɦɚɧɢɩɭɥɢɪɨ-
ɜɚɬɶ ɧɚ ɮɨɪɦɟ, ɬɨɝɞɚ ɤɚɤ ɨɛɴɟɤɬɚɦɢ – ɧɟɥɶɡɹ.
Ɉɫɨɛɟɧɧɨɫɬɢ ɩɨɫɬɪɨɟɧɢɹ ɤɨɦɩɨɧɟɧɬɨɜ:
– ɤɨɦɩɨɧɟɧɬɵ ɢɦɟɸɬ ɞɪɭɝɢɯ ɤɨɧɟɱɧɵɯ ɩɨɥɶɡɨɜɚɬɟɥɟɣ;
– ɤɨɦɩɨɧɟɧɬɵ ɹɜɥɹɸɬɫɹ ɢɧɫɬɪɭɦɟɧɬɚɦɢ ɢ ɢɫɩɨɥɶɡɭɸɬɫɹ ɪɚɡɪɚɛɨɬɱɢɤɚɦɢ
ɩɪɢɥɨɠɟɧɢɣ;
– ɧɚɩɢɫɚɧɢɟ ɤɨɦɩɨɧɟɧɬɨɜ ɹɜɥɹɟɬɫɹ ɨɛɴɟɤɬɧɨ-ɨɪɢɟɧɬɢɪɨɜɚɧɧɵɦ ɧɟɜɢɡɭɚɥɶ-
ɧɵɦ ɩɪɨɰɟɫɫɨɦ.
5
ɜɚɧɧɨɝɨ ɩɨɥɹ ɪɟɞɚɤɬɢɪɨɜɚɧɢɹ ɦɨɠɧɨ ɨɩɪɟɞɟɥɢɬɶ ɧɨɜɵɣ ɤɨɦɩɨɧɟɧɬ ɤɚɤ ɩɨ-
ɬɨɦɨɤ ɤɥɚɫɫɚ TCustomEdit ɢ ɫɞɟɥɚɬɶ ɧɭɠɧɵɟ ɦɨɞɢɮɢɤɚɰɢɢ.
Ʉɨɦɩɨɧɟɧɬɵ ɞɟɥɹɬɫɹ ɧɚ ɞɜɟ ɝɪɭɩɩɵ – ɜɢɡɭɚɥɶɧɵɟ ɢ ɧɟɜɢɡɭɚɥɶɧɵɟ.
ȼɢɡɭɚɥɶɧɵɟ ɤɨɦɩɨɧɟɧɬɵ ɨɬɨɛɪɚɠɚɸɬɫɹ ɧɚ ɮɨɪɦɟ ɜɨ ɜɪɟɦɹ ɪɚɛɨɬɵ ɩɪɨ-
ɝɪɚɦɦɵ. Ɉɧɢ ɹɜɥɹɸɬɫɹ ɩɨɬɨɦɤɚɦɢ ɤɥɚɫɫɚ TControl ɢ ɩɨɷɬɨɦɭ ɢɧɨɝɞɚ ɧɚ-
ɡɵɜɚɸɬɫɹ ɷɥɟɦɟɧɬɚɦɢ ɭɩɪɚɜɥɟɧɢɹ. ɉɪɢɦɟɪɚɦɢ ɧɟɜɢɡɭɚɥɶɧɵɯ ɤɨɦɩɨɧɟɧɬɨɜ
ɹɜɥɹɸɬɫɹ ɤɨɦɩɨɧɟɧɬɵ Ttimer, TMenu, TOpenDialog, ɤɨɦɩɨɧɟɧɬɵ ɞɨɫ-
ɬɭɩɚ ɤ ɛɚɡɚɦ ɞɚɧɧɵɯ (TTable, TQuery ɢ ɬ. ɩ.). ɇɟɜɢɡɭɚɥɶɧɵɟ ɤɨɦɩɨɧɟɧ-
ɬɵ ɧɟ ɜɢɞɧɵ ɧɚ ɮɨɪɦɟ ɢ ɪɚɛɨɬɚɸɬ «ɡɚ ɤɭɥɢɫɚɦɢ» ɩɪɢɥɨɠɟɧɢɹ. ɂɯ ɩɪɟɞɤɨɦ
ɧɟ ɹɜɥɹɟɬɫɹ TControl, ɚ ɧɚɫɥɟɞɨɜɚɧɢɟ ɢɞɟɬ ɨɬ Tcomponent.
ȼɢɡɭɚɥɶɧɵɟ ɤɨɦɩɨɧɟɧɬɵ ɞɟɥɹɬɫɹ ɧɚ ɞɜɟ ɝɪɭɩɩɵ – ɝɪɚɮɢɱɟɫɤɢɟ ɢ ɨɤɨɧ-
ɧɵɟ. Ƚɪɚɮɢɱɟɫɤɢɟ ɤɨɦɩɨɧɟɧɬɵ ɩɨɪɨɠɞɚɸɬɫɹ ɨɬ TGraphicControl ɢ ɢɦɟ-
ɸɬ ɜɢɡɭɚɥɶɧɨɟ ɩɪɟɞɫɬɚɜɥɟɧɢɟ, ɧɨ ɧɟ ɩɨɥɭɱɚɸɬ ɮɨɤɭɫɚ ɜɜɨɞɚ. Ƚɥɚɜɧɨɣ ɨɫɨ-
ɛɟɧɧɨɫɬɶɸ ɩɨɬɨɦɤɨɜ TGraphicControl ɹɜɥɹɟɬɫɹ ɧɚɥɢɱɢɟ ɫɜɨɣɫɬɜɚ Can-
vas: TCanvas, ɩɨɡɜɨɥɹɸɳɟɝɨ ɜɵɜɨɞɢɬɶ ɢɡɨɛɪɚɠɟɧɢɟ ɩɪɹɦɨ ɧɚ ɩɨɜɟɪɯɧɨ-
ɫɬɢ ɤɨɦɩɨɧɟɧɬɚ. ɉɪɢɦɟɪɚɦɢ ɝɪɚɮɢɱɟɫɤɢɯ ɤɨɦɩɨɧɟɧɬɨɜ ɹɜɥɹɸɬɫɹ TImage,
TPaintBox, TLabel.
Ɉɤɨɧɧɵɟ ɤɨɦɩɨɧɟɧɬɵ ɩɪɨɢɫɯɨɞɹɬ ɨɬ TWinControl. Ɉɧɢ ɢɧɤɚɩɫɭ-
ɥɢɪɭɸɬ ɮɭɧɤɰɢɢ API ɞɥɹ ɪɚɛɨɬɵ ɫ ɨɤɧɚɦɢ Windows, ɭɦɟɸɬ ɩɨɥɭɱɚɬɶ ɮɨ-
ɤɭɫ ɜɜɨɞɚ ɢ ɫɨɞɟɪɠɚɬ ɫɜɨɣɫɬɜɨ Handle: THandle. Ⱦɚɧɧɨɟ ɫɜɨɣɫɬɜɨ ɯɪɚ-
ɧɢɬ ɞɟɫɤɪɢɩɬɨɪ ɫɨɨɬɜɟɬɫɬɜɭɸɳɟɝɨ ɨɤɨɧɧɨɝɨ ɨɛɴɟɤɬɚ Windows ɢ ɦɨɠɟɬ
ɛɵɬɶ ɢɫɩɨɥɶɡɨɜɚɧɨ ɞɥɹ ɧɟɩɨɫɪɟɞɫɬɜɟɧɧɨɝɨ ɜɵɡɨɜɚ ɮɭɧɤɰɢɣ API ɢ ɨɛɦɟɧɚ
ɫɨɨɛɳɟɧɢɹɦɢ Windows ɦɟɠɞɭ ɤɨɦɩɨɧɟɧɬɚɦɢ.
ɂɧɨɝɞɚ ɞɥɹ ɫɨɡɞɚɧɢɹ ɩɨɥɶɡɨɜɚɬɟɥɶɫɤɨɝɨ ɷɥɟɦɟɧɬɚ ɭɩɪɚɜɥɟɧɢɹ ɢɫ-
ɩɨɥɶɡɭɟɬɫɹ ɤɥɚɫɫ TCustomControl. ɗɬɨ ɩɪɹɦɨɣ ɩɨɬɨɦɨɤ TWinControl,
ɚɜɬɨɦɚɬɢɱɟɫɤɢ ɧɚɫɥɟɞɭɸɳɢɣ ɜɫɸ ɟɝɨ ɮɭɧɤɰɢɨɧɚɥɶɧɨɫɬɶ. ɇɨ ɞɨɩɨɥɧɢɬɟɥɶ-
ɧɨ ɨɧ ɜ ɫɟɤɰɢɢ Protected ɫɨɞɟɪɠɢɬ ɫɜɨɣɫɬɜɨ Canvas, ɧɟɨɛɯɨɞɢɦɨɟ ɞɥɹ
ɪɢɫɨɜɚɧɢɹ. ɑɬɨɛɵ ɢɫɩɨɥɶɡɨɜɚɬɶ ɷɬɨ ɫɜɨɣɫɬɜɨ ɜ ɩɨɬɨɦɤɚɯ
6
TCustomControl, ɟɝɨ ɧɚɞɨ ɩɟɪɟɧɟɫɬɢ ɜ ɫɟɤɰɢɸ Public (ɫɦ. ɫɥɟɞɭɸ-
ɳɢɣ ɪɚɡɞɟɥ).
7
ɡɭɸɳɟɝɨ ɞɟɫɤɪɢɩɬɨɪ ɨɤɧɚ ɢɥɢ ɞɥɹ
ɫɨɡɞɚɧɢɹ ɨɛɨɥɨɱɤɢ ɜɨɤɪɭɝ ɫɭɳɟɫɬ-
ɜɭɸɳɢɯ ɩɨɥɶɡɨɜɚɬɟɥɶɫɤɢɯ ɨɤɨɧ-
ɧɵɯ ɷɥɟɦɟɧɬɨɜ ɭɩɪɚɜɥɟɧɢɹ
TCustomControl Ɉɪɢɝɢɧɚɥɶɧɨɝɨ ɤɨɦɩɨɧɟɧɬɚ
TComponent ɇɟɜɢɡɭɚɥɶɧɨɝɨ ɤɨɦɩɨɧɟɧɬɚ
2. ɋɬɪɭɤɬɭɪɚ ɤɨɦɩɨɧɟɧɬɚ
8
ɥɚɫɬɶ ɜɢɞɢɦɨɫɬɢ), ɜ Delphi ɨɩɪɟɞɟɥɟɧɵ ɱɟɬɵɪɟ ɨɫɧɨɜɧɵɟ ɞɢɪɟɤɬɢɜɵ, ɩɪɢ-
ɜɟɞɟɧɧɵɟ ɜ ɬɚɛɥɢɰɟ 2.
9
ɉɪɟɞɩɨɥɨɠɢɦ, ɱɬɨ ɭ ɜɧɨɜɶ ɫɨɡɞɚɧɧɨɝɨ ɤɨɦɩɨɧɟɧɬɚ ɢɦɟɟɬɫɹ ɧɨɜɨɟ
ɫɜɨɣɫɬɜɨ NewProp, ɧɨɜɨɟ ɫɨɛɵɬɢɟ OnNewEvent, ɧɨɜɵɣ ɦɟɬɨɞ New-
Method. Ʉɪɨɦɟ ɬɨɝɨ, ɨɩɭɛɥɢɤɨɜɚɧɵ ɭɧɚɫɥɟɞɨɜɚɧɧɵɟ ɫɜɨɣɫɬɜɚ Height,
Width ɢ ɫɨɛɵɬɢɟ OnClick.
Ɍɨɝɞɚ ɫ ɢɫɩɨɥɶɡɨɜɚɧɢɟɦ ɨɛɥɚɫɬɟɣ ɜɢɞɢɦɨɫɬɢ ɨɛɴɹɜɥɟɧɢɟ ɤɥɚɫɫɚ ɞɥɹ
ɤɨɦɩɨɧɟɧɬɚ ɫɬɪɨɢɬɫɹ ɩɨ ɫɥɟɞɭɸɳɟɣ ɫɯɟɦɟ:
type
TMyComponent = class( <ɉɪɟɞɨɤ> )
private
// ȼɧɭɬɪɟɧɧɢɟ ɩɨɥɹ, ɫɨɞɟɪɠɚɳɢɟ ɡɧɚɱɟɧɢɟ ɧɨɜɨɝɨ ɫɜɨɣɫɬɜɚ
FNewProp : TPropType;
// ȼɧɭɬɪɟɧɧɢɣ ɭɤɚɡɚɬɟɥɶ ɧɚ ɦɟɬɨɞ-ɨɛɪɚɛɨɬɱɢɤ ɫɨɛɵɬɢɹ
FOnNewEvent : TEventType;
protected
// Ɇɟɬɨɞɵ ɱɬɟɧɢɹ-ɡɚɩɢɫɢ ɫɜɨɣɫɬɜɚ
function GetNewProp : TpropType;
procedure SetNewProp(Value : TpropType);
public
// Ʉɨɧɫɬɪɭɤɬɨɪ ɢ ɞɟɫɬɪɭɤɬɨɪ
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
// ɇɨɜɵɣ ɦɟɬɨɞ
procedure NewMethod;
// Ɇɟɬɨɞ ɞɢɫɩɟɬɱɟɪɢɡɚɰɢɢ ɧɨɜɨɝɨ ɫɨɛɵɬɢɹ OnNewEvent
procedure NewEvent;
published
// Ɉɩɪɟɞɟɥɟɧɢɟ ɧɨɜɨɝɨ ɫɜɨɣɫɬɜɚ
property NewProp : TPropType
read GEtNewProp write SetNewProp;
// Ɉɩɭɛɥɢɤɨɜɚɧɢɟ ɭɧɚɫɥɟɞɨɜɚɧɧɵɯ ɫɜɨɣɫɬɜ,
// ɧɚɯɨɞɢɜɲɢɯɫɹ ɭ ɩɪɟɞɤɚ ɜ ɫɟɤɰɢɢ Protected
property Height;
10
property Width;
// ɇɨɜɨɟ ɫɨɛɵɬɢɟ
property OnNewEvent : TEventType read FOnNewEvent
write FOnNewEvent;
// Ɉɩɭɛɥɢɤɨɜɚɧɢɟ ɭɧɚɫɥɟɞɨɜɚɧɧɨɝɨ ɫɨɛɵɬɢɹ
property OnClick;
end;
Ⱦɚɥɟɟ ɧɟɨɛɯɨɞɢɦɨ ɧɚɩɢɫɚɬɶ ɤɨɞ ɪɟɚɥɢɡɚɰɢɢ ɧɨɜɵɯ ɦɟɬɨɞɨɜ. ȼ ɫɥɟ-
ɞɭɸɳɢɯ ɪɚɡɞɟɥɚɯ ɫɯɟɦɚ ɤɨɦɩɨɧɟɧɬɚ ɪɚɫɫɦɚɬɪɢɜɚɟɬɫɹ ɛɨɥɟɟ ɩɨɞɪɨɛɧɨ.
11
TMyClass=class(TParentClass)
private
FField: integer; // ɩɨɥɟ
protected
function GetField: string; // ɦɟɬɨɞ
procedure SetField(AValue: string);// ɦɟɬɨɞ
published
property PField: string // ɫɜɨɣɫɬɜɨ
read GetField write SetField;
end;
implementation
12
ȼ ɞɚɧɧɨɦ ɩɪɢɦɟɪɟ ɞɨɫɬɭɩ ɞɥɹ ɱɬɟɧɢɹ ɩɨɥɹ ɪɟɚɥɢɡɨɜɚɧ ɮɭɧɤɰɢɟɣ
GetField. ȿɫɥɢ ɫɩɟɰɢɚɥɶɧɵɣ ɦɟɬɨɞ ɱɬɟɧɢɹ/ɨɛɧɨɜɥɟɧɢɹ ɧɟ ɬɪɟɛɭɟɬɫɹ, ɬɨ
ɜɦɟɫɬɨ ɢɦɟɧɢ ɦɟɬɨɞɚ ɦɨɠɧɨ ɭɤɚɡɚɬɶ ɢɦɹ ɩɨɥɹ (ɧɨ ɬɨɥɶɤɨ ɜ ɫɥɭɱɚɟ, ɟɫɥɢ
ɬɢɩ ɫɜɨɣɫɬɜɚ ɫɨɜɩɚɞɚɟɬ ɫ ɬɢɩɨɦ ɩɨɥɹ).
ɇɚɩɪɢɦɟɪ,
property PField:string read FField write SetField;
ȿɫɥɢ ɫɜɨɣɫɬɜɨ ɞɨɫɬɭɩɧɨ ɬɨɥɶɤɨ ɞɥɹ ɱɬɟɧɢɹ ɢɥɢ ɞɥɹ ɡɚɩɢɫɢ, ɬɨ ɫɨɨɬ-
ɜɟɬɫɬɜɭɸɳɢɣ ɦɟɬɨɞ ɦɨɠɧɨ ɨɩɭɫɬɢɬɶ.
ɉɨɞɱɟɪɤɧɟɦ, ɱɬɨ ɩɪɢ ɨɛɪɚɳɟɧɢɢ ɤ ɫɜɨɣɫɬɜɭ ɦɟɬɨɞɵ ɱɬɟ-
ɧɢɹ/ɨɛɧɨɜɥɟɧɢɹ ɧɟ ɭɤɚɡɵɜɚɸɬɫɹ. Ⱦɥɹ ɩɨɥɶɡɨɜɚɬɟɥɹ ɨɛɪɚɳɟɧɢɟ ɤ ɫɜɨɣɫɬɜɭ
ɬɚɤɨɟ ɠɟ, ɤɚɤ ɤ ɩɨɥɸ, ɧɚɩɪɢɦɟɪ,
MyObj.PField:=’100’;
…;
s:=MyObj.PField;
13
ɧɨ ɧɟ ɭɤɚɡɵɜɚɬɶ, ɧɚɩɪɢɦɟɪ MyObject.Items[i]:=1.5 ɛɭɞɟɬ ɷɤɜɢɜɚ-
ɥɟɧɬɧɨ MyObject[i]:=1.5.
14
ɩɭɛɥɢɤɭɟɦɵɟ ɫɜɨɣɫɬɜɚ, ɬɨ ɫɜɨɣɫɬɜɨ ɨɛɴɟɤɬɚ
ɜ ɂɧɫɩɟɤɬɨɪɟ ɪɚɫɲɢɪɹɟɬɫɹ ɢ ɩɨɹɜɥɹɟɬɫɹ
ɜɨɡɦɨɠɧɨɫɬɶ ɨɬɪɟɞɚɤɬɢɪɨɜɚɬɶ ɤɚɠɞɨɟ ɩɨɞ-
ɫɜɨɣɫɬɜɨ (ɧɚɩɪɢɦɟɪ, ɧɚɡɜɚɧɢɟ ɲɪɢɮɬɚ)
15
ɝɨ ɤɥɚɫɫɚ ɧɟɬ, ɜɵɛɪɚɬɶ ɧɟɩɨɫɪɟɞɫɬɜɟɧɧɨ TPropertyEditor ɢ ɩɟɪɟɨɩɪɟ-
ɞɟɥɢɬɶ ɧɟɤɨɬɨɪɵɟ ɟɝɨ ɦɟɬɨɞɵ. Ȼɨɥɟɟ ɩɨɞɪɨɛɧɭɸ ɢɧɮɨɪɦɚɰɢɸ ɫɦ. ɜ [3, 5].
2.4. Ɇɟɬɨɞɵ
ɉɨɫɤɨɥɶɤɭ ɦɟɬɨɞɵ ɞɨɫɬɭɩɧɵ ɩɨɥɶɡɨɜɚɬɟɥɹɦ ɜɨ ɜɪɟɦɹ ɜɵɩɨɥɧɟɧɢɹ
ɤɨɦɩɨɧɟɧɬ, ɜɚɠɧɨ ɩɪɚɜɢɥɶɧɨ ɢɯ ɢɦɟɧɨɜɚɬɶ. ɂɦɟɧɚ ɦɟɬɨɞɨɜ ɞɨɥɠɧɵ ɛɵɬɶ
ɨɩɢɫɚɬɟɥɶɧɵɦɢ ɢ ɢɫɩɨɥɶɡɨɜɚɬɶ ɚɤɬɢɜɧɵɟ ɝɥɚɝɨɥɵ. ɉɨɞɨɛɧɵɦ ɠɟ ɨɛɪɚɡɨɦ
ɢɦɟɧɚ ɮɭɧɤɰɢɣ ɞɨɥɠɧɵ ɭɤɚɡɵɜɚɬɶ ɧɚ ɬɨ, ɱɬɨ ɨɧɢ ɜɨɡɜɪɚɳɚɸɬ. ȼɨɬ ɧɟ-
ɫɤɨɥɶɤɨ ɩɪɢɦɟɪɨɜ ɩɨɞɯɨɞɹɳɢɯ ɢ ɧɟɩɨɞɯɨɞɹɳɢɯ ɢɦɟɧ ɦɟɬɨɞɨɜ [2]:
ɉɨɞɯɨɞɹɳɢɟ ɇɟɩɨɞɯɨɞɹɳɢɟ
Procedure CutToClipboard procedure Cut
Procedure SetHeight procedure SetH
function GetTextLen function Len
16
Ʉɨɧɟɱɧɨ, ɧɟ ɤɚɠɞɵɣ ɤɨɦɩɨɧɟɧɬɧɵɣ ɤɥɚɫɫ ɧɭɠɞɚɟɬɫɹ ɜ ɨɩɪɟɞɟɥɟɧɢɢ
ɧɨɜɨɝɨ ɤɨɧɫɬɪɭɤɬɨɪɚ. Ɇɨɠɧɨ ɭɧɚɫɥɟɞɨɜɚɬɶ ɤɨɧɫɬɪɭɤɬɨɪ ɨɬ ɩɪɟɞɤɚ. ȼ ɥɸɛɨɦ
ɫɥɭɱɚɟ, ɤɨɧɫɬɪɭɤɬɨɪ ɫɨɞɟɪɠɢɬ ɩɚɪɚɦɟɬɪ ɬɢɩɚ TComponent, ɭɤɚɡɵɜɚɸɳɢɣ
ɧɚ ɜɥɚɞɟɥɶɰɚ (Owner) ɤɨɦɩɨɧɟɧɬɚ. ȼɥɚɞɟɥɟɰ – ɷɬɨ ɤɨɦɩɨɧɟɧɬ, ɜɵɡɵɜɚɸɳɢɣ
ɩɪɢ ɫɜɨɟɦ ɭɧɢɱɬɨɠɟɧɢɢ ɞɟɫɬɪɭɤɬɨɪɵ ɩɨɞɱɢɧɟɧɧɵɯ ɤɨɦɩɨɧɟɧɬɨɜ.
Ⱦɥɹ ɤɨɦɩɨɧɟɧɬɨɜ ɤɨɧɫɬɪɭɤɬɨɪ Create – ɷɬɨ ɢ ɟɫɬɶ ɦɟɫɬɨ, ɝɞɟ ɭɫɬɚ-
ɧɚɜɥɢɜɚɸɬɫɹ ɡɧɚɱɟɧɢɹ ɫɜɨɣɫɬɜ ɩɨ ɭɦɨɥɱɚɧɢɸ. ɇɚɩɪɢɦɟɪ:
constructor TSampleControl.Create = class(TWinControl)
begin
inherited Create(AOwner) ;
FHeight := 25; {ɍɫɬɚɧɨɜɤɚ ɡɧɚɱɟɧɢɣ ɩɨ ɭɦɨɥɱɚɧɢɸ}
FWidth := 50;
FColor := clWindows;
end;
17
// ɡɚɜɟɪɲɚɸɳɢɟ ɨɩɟɪɚɰɢɢ,
// ɨɫɜɨɛɨɠɞɟɧɢɟ ɩɚɦɹɬɢ,
// ɜɵɡɨɜ ɞɟɫɬɪɭɤɬɨɪɨɜ ɨɛɴɟɤɬɨɜ, ɫɨɡɞɚɧɧɵɯ
// ɜ ɫɨɫɬɚɜɟ ɤɨɦɩɨɧɟɧɬɚ ɢ ɬ.ɩ.
…
// ɩɨɫɥɟɞɧɢɦ ɜɵɡɵɜɚɟɬɫɹ ɭɧɚɫɥɟɞɨɜɚɧɧɵɣ ɞɟɫɬɪɭɤɬɨɪ
inherited Destroy;
end;
2.5. ɋɨɛɵɬɢɹ
ɋɨɛɵɬɢɟ ɤɨɦɩɨɧɟɧɬɚ – ɷɬɨ ɟɝɨ ɫɜɨɣɫɬɜɨ ɩɪɨɰɟɞɭɪɧɨɝɨ ɬɢɩɚ, ɩɪɟɞɧɚ-
ɡɧɚɱɟɧɧɨɟ ɞɥɹ ɫɨɡɞɚɧɢɹ ɪɟɚɤɰɢɢ ɤɨɦɩɨɧɟɧɬɚ ɧɚ ɬɟ ɢɥɢ ɢɧɵɟ ɜɧɟɲɧɢɟ ɜɨɡ-
ɞɟɣɫɬɜɢɹ (ɫɨ ɫɬɨɪɨɧɵ ɩɨɥɶɡɨɜɚɬɟɥɹ, ɚɩɩɚɪɚɬɭɪɵ ɢɥɢ ɞɪɭɝɢɯ ɩɪɨɝɪɚɦɦ).
Ɍɚɤɨɦɭ ɫɜɨɣɫɬɜɭ ɧɟɨɛɯɨɞɢɦɨ ɩɪɢɫɜɨɢɬɶ ɚɞɪɟɫ ɦɟɬɨɞɚ, ɤɨɬɨɪɵɣ ɛɭɞɟɬ ɜɵ-
ɡɵɜɚɬɶɫɹ ɜ ɦɨɦɟɧɬ ɧɚɫɬɭɩɥɟɧɢɹ ɫɨɛɵɬɢɹ ɫ ɞɚɧɧɵɦ ɤɨɦɩɨɧɟɧɬɨɦ.
ɋɨɛɵɬɢɹ ɢɦɟɸɬ ɪɚɡɥɢɱɧɨɟ ɱɢɫɥɨ ɩɚɪɚɦɟɬɪɨɜ. ȼ ɩɪɨɫɬɟɣɲɟɦ ɫɥɭɱɚɟ
ɩɚɪɚɦɟɬɪ ɨɞɢɧ – Sender ɬɢɩɚ TObject, ɭɤɚɡɵɜɚɸɳɢɣ ɧɚ ɨɛɴɟɤɬ-
ɢɫɬɨɱɧɢɤ ɫɨɛɵɬɢɹ. ɋɨɨɬɜɟɬɫɬɜɭɸɳɢɟ ɫɨɛɵɬɢɹ, ɧɚɩɪɢɦɟɪ ɫɨɛɵɬɢɹ On-
Click ɢ OnDblClick, ɢɦɟɸɬ ɬɢɩ
type TNotifyEvent = procedure (Sender: TObject) of object;
18
ɲɢɣ ɟɝɨ ɨɛɴɟɤɬ. ɉɨɷɬɨɦɭ ɫɨɛɵɬɢɸ ɦɨɠɧɨ ɩɪɢɫɜɚɢɜɚɬɶ ɬɨɥɶɤɨ ɦɟɬɨɞɵ
ɤɥɚɫɫɚ, ɫɨɜɦɟɫɬɢɦɵɟ ɩɨ ɱɢɫɥɭ ɢ ɬɢɩɭ ɩɚɪɚɦɟɬɪɨɜ.
Ɍɢɩ TNotifyEvent ɢɦɟɟɬ, ɜ ɱɚɫɬɧɨɫɬɢ, ɫɨɛɵɬɢɟ ɳɟɥɱɤɚ ɦɵɲɶɸ ɧɚ
ɤɨɦɩɨɧɟɧɬɟ.
ȼ ɞɪɭɝɢɯ ɫɨɛɵɬɢɹɯ ɦɨɝɭɬ ɩɪɢɫɭɬɫɬɜɨɜɚɬɶ ɞɨɩɨɥɧɢɬɟɥɶɧɵɟ ɩɚɪɚɦɟɬ-
ɪɵ, ɧɚɩɪɢɦɟɪ, ɞɥɹ ɫɨɛɵɬɢɹ ɩɟɪɟɦɟɳɟɧɢɹ ɭɤɚɡɚɬɟɥɹ ɦɵɲɢ OnMouseMove
ɨɩɢɫɚɧɢɟ ɬɢɩɚ ɫɨɛɵɬɢɹ ɢɦɟɟɬ ɜɢɞ
type TMouseMoveEvent = procedure(Sender: TObject; Shift:
TShiftState; X, Y: Integer) of object;
19
type
TKeyPressEvent = procedure(Sender: TObject;
var Key: Char) of object;
Ɂɚɦɟɬɢɦ, ɱɬɨ ɫɨɨɛɳɟɧɢɹ ɨɬ ɤɥɚɜɢɚɬɭɪɵ ɩɨɫɬɭɩɚɸɬ ɬɨɦɭ ɷɥɟɦɟɧɬɭ,
ɤɨɬɨɪɵɣ ɜ ɞɚɧɧɵɣ ɦɨɦɟɧɬ ɢɦɟɥ ɮɨɤɭɫ ɜɜɨɞɚ. ȿɫɥɢ ɭ ɮɨɪɦɵ, ɜɥɚɞɟɸɳɟɣ
ɷɥɟɦɟɧɬɨɦ ɭɩɪɚɜɥɟɧɢɹ, ɭɫɬɚɧɨɜɢɬɶ ɡɧɚɱɟɧɢɟ ɫɜɨɣɫɬɜɚ KeyPreview ɜ
True, ɬɨ ɫɨɛɵɬɢɹ ɛɭɞɭɬ ɫɧɚɱɚɥɚ ɨɛɪɚɛɨɬɚɧɵ ɮɨɪɦɨɣ.
ɉɟɪɟɱɟɧɶ ɬɢɩɨɜ ɫɬɚɧɞɚɪɬɧɵɯ ɫɨɛɵɬɢɣ ɫɦ. ɜ ɮɚɣɥɟ controls.pas ɜ
ɤɚɬɚɥɨɝɟ ..\Delphi7\Source\VCL.
ɋɨɜɦɟɫɬɢɦɵɟ ɫɨɛɵɬɢɹ ɦɨɠɧɨ ɩɪɢɫɜɚɢɜɚɬɶ ɜɨ ɜɪɟɦɹ ɜɵɩɨɥɧɟɧɢɹ ɩɪɨ-
ɝɪɚɦɦɵ, ɧɚɩɪɢɦɟɪ,
Button1.OnMouseMove:=Button2.OnMouseMove;
…
Button1.OnClick:=Form1.OnPaint;
…
Edit1.OnChange:=Button1Click;
20
FOnMouseDown : TMouseEvent;
FOnMouseMove : TMouseMiveEvent;
…
protected
procedure Click; dynamic;
property OnClick: TNotifyEvent
read FOnClick write FOnClick;
property OnDblClick : TNotifyEvent
read FOnDblClick write OnDblClick;
property OnMouseDown : TMouseEvent
read FOnMouseDown write FOnMouseDown;
property OnMouseMove : TMouseMoveEvent
read FOnMouseMove write FOnMouseMove;
…
end;
21
TEdit=class(TCustomEdit)
private
…
published
property OnClick;
end;
Ɍɚɤ ɤɚɤ ɫɨɛɵɬɢɹ Delphi ɨɯɜɚɬɵɜɚɸɬ ɛɨɥɶɲɭɸ ɱɚɫɬɶ ɫɨɨɛɳɟɧɢɣ Win-
dows, ɬɨ ɪɚɡɪɚɛɨɬɱɢɤɭ ɧɨɜɨɝɨ ɤɨɦɩɨɧɟɧɬɚ, ɤɚɤ ɩɪɚɜɢɥɨ, ɛɵɜɚɟɬ ɞɨɫɬɚɬɨɱɧɨ
ɨɩɭɛɥɢɤɨɜɚɬɶ ɜ ɫɜɨɟɦ ɤɨɦɩɨɧɟɧɬɟ ɫɨɛɵɬɢɹ ɩɪɟɞɤɚ.
ȼ ɛɨɥɟɟ ɫɥɨɠɧɨɣ ɫɢɬɭɚɰɢɢ, ɤɨɝɞɚ ɢɦɟɸɳɢɯɫɹ ɫɬɚɧɞɚɪɬɧɵɯ ɫɨɛɵɬɢɣ
ɧɟɞɨɫɬɚɬɨɱɧɨ, ɦɨɠɧɨ ɨɩɪɟɞɟɥɢɬɶ ɧɨɜɵɟ ɫɨɛɵɬɢɹ. Ɇɟɬɨɞɢɤɚ ɦɨɠɟɬ ɨɬɥɢ-
ɱɚɬɶɫɹ ɜ ɡɚɜɢɫɢɦɨɫɬɢ ɨɬ ɡɚɞɚɱɢ. Ɉɛɵɱɧɨ ɜ ɞɨɩɨɥɧɟɧɢɟ ɤ ɨɛɴɹɜɥɟɧɢɸ ɩɨɥɹ
ɢ ɫɜɨɣɫɬɜɚ ɞɥɹ ɫɨɛɵɬɢɹ ɜɜɨɞɹɬ ɦɟɬɨɞɵ ɞɢɫɩɟɬɱɟɪɢɡɚɰɢɢ ɫɨɛɵɬɢɣ (event-
dispatching methods). ɗɬɢ ɦɟɬɨɞɵ ɧɭɠɧɵ ɞɥɹ ɬɨɝɨ, ɱɬɨɛɵ ɨɩɪɟɞɟɥɢɬɶ, ɫɨɡ-
ɞɚɧ ɥɢ ɤɨɞ ɨɛɪɚɛɨɬɤɢ ɩɪɨɢɡɨɲɟɞɲɟɝɨ ɫɨɛɵɬɢɹ ɞɥɹ ɞɚɧɧɨɝɨ ɤɨɦɩɨɧɟɧɬɚ, ɢ
ɬɨɝɞɚ ɨɛɴɹɜɥɹɸɬɫɹ ɤɚɤ ɡɚɳɢɳɟɧɧɵɟ (protected). ȼ ɤɥɚɫɫɟ TControl
ɛɢɛɥɢɨɬɟɤɢ VCL ɞɥɹ ɫɜɨɣɫɬɜɚ OnClick ɨɩɪɟɞɟɥɟɧ ɦɟɬɨɞ ɞɢɫɩɟɬɱɟɪɢɡɚ-
ɰɢɢ ɫ ɧɚɡɜɚɧɢɟɦ Click:
type
TControl = class (TComponent)
private
FOnClick: TNotifyEvent;
protected
procedure Click; dynamic;
property OnClick: TNotifyEvent
read FOnClick write FOnClick;
end;
implementation
procedure TControl.Click;
begin
22
if Assigned (FOnClick) then FOnClick (Self);
end;
3. ɉɪɨɟɤɬɢɪɨɜɚɧɢɟ ɤɨɦɩɨɧɟɧɬɚ
23
4. Ⱦɚɥɟɟ ɤɨɦɩɨɧɟɧɬ ɦɨɠɧɨ ɬɟɫɬɢɪɨɜɚɬɶ. Ɍɚɤ ɤɚɤ ɭ ɤɨɦɩɨɧɟɧɬɚ ɟɫɬɶ ɞɜɚ
ɢɧɬɟɪɮɟɣɫɚ – ɜɪɟɦɟɧɢ ɜɵɩɨɥɧɟɧɢɹ ɢ ɜɪɟɦɟɧɢ ɩɪɨɟɤɬɢɪɨɜɚɧɢɹ, ɬɨ ɢ ɬɟɫɬɢ-
ɪɨɜɚɧɢɟ ɜɵɩɨɥɧɹɟɬɫɹ ɜ ɞɜɚ ɲɚɝɚ. Ɍɟɫɬɢɪɨɜɚɧɢɟ ɜɪɟɦɟɧɢ ɜɵɩɨɥɧɟɧɢɹ ɦɨɠ-
ɧɨ ɞɟɥɚɬɶ ɫɪɚɡɭ ɠɟ ɩɨɫɥɟ ɨɤɨɧɱɚɧɢɹ ɤɨɞɢɪɨɜɚɧɢɹ, ɧɨ ɬɟɫɬɢɪɨɜɚɧɢɟ ɜɪɟɦɟ-
ɧɢ ɩɪɨɟɤɬɢɪɨɜɚɧɢɹ ɦɨɠɧɨ ɩɪɨɜɨɞɢɬɶ ɬɨɥɶɤɨ ɩɨɫɥɟ ɬɨɝɨ, ɤɚɤ ɤɨɦɩɨɧɟɧɬ
ɛɭɞɟɬ ɡɚɪɟɝɢɫɬɪɢɪɨɜɚɧ ɜ Delphi ɢ ɩɨɹɜɢɬɫɹ ɧɚ ɩɚɥɢɬɪɟ ɤɨɦɩɨɧɟɧɬɨɜ.
Ɋɚɫɫɦɨɬɪɢɦ ɩɟɪɟɱɢɫɥɟɧɧɵɟ ɲɚɝɢ ɛɨɥɟɟ ɩɨɞɪɨɛɧɨ.
ɉɨɧɚɱɚɥɭ ɤɚɬɚɥɨɝ ɛɭɞɟɬ ɫɨɞɟɪɠɚɬɶ ɨɞɢɧ ɮɚɣɥ ɦɨɞɭɥɹ ɤɨɦɩɨɧɟɧɬɚ, ɧɨ
ɧɚ ɫɬɚɞɢɢ ɬɟɫɬɢɪɨɜɚɧɢɹ ɜ ɤɚɬɚɥɨɝɟ ɩɨɹɜɹɬɫɹ ɜɫɟ ɮɚɣɥɵ, ɚɫɫɨɰɢɢɪɭɸɳɢɟɫɹ
ɫ ɨɬɞɟɥɶɧɵɦ ɩɪɨɟɤɬɨɦ Delphi.
ɂɫɯɨɞɧɵɣ ɤɨɞ ɤɨɦɩɨɧɟɧɬɚ ɪɚɫɩɨɥɚɝɚɟɬɫɹ ɜ ɦɨɞɭɥɟ. ɏɨɬɹ ɜɨɡɦɨɠɧɨ
ɩɨɦɟɫɬɢɬɶ ɜ ɟɞɢɧɫɬɜɟɧɧɵɣ ɦɨɞɭɥɶ ɥɸɛɨɟ ɤɨɥɢɱɟɫɬɜɨ ɤɨɦɩɨɧɟɧɬɨɜ, ɨɛɵɱɧɨ
ɜ ɦɨɞɭɥɶ ɩɨɦɟɳɚɸɬɫɹ ɬɨɥɶɤɨ ɷɥɟɦɟɧɬɵ ɭɩɪɚɜɥɟɧɢɹ, ɛɥɢɡɤɢɟ ɩɨ ɫɦɵɫɥɭ.
ɋɭɳɟɫɬɜɭɟɬ ɞɜɚ ɫɩɨɫɨɛɚ ɫɨɡɞɚɧɢɹ ɦɨɞɭɥɹ ɤɨɦɩɨɧɟɧɬɚ – «ɪɭɱɧɨɣ» ɢ ɫ
ɢɫɩɨɥɶɡɨɜɚɧɢɟɦ ɷɤɫɩɟɪɬɚ ɤɨɦɩɨɧɟɧɬɨɜ.
ɗɤɫɩɟɪɬ ɤɨɦɩɨɧɟɧɬɨɜ ɭɩɪɨɳɚɟɬ ɡɚɞɚɱɭ ɫɨɡɞɚɧɢɹ ɦɨɞɭɥɹ ɤɨɦɩɨɧɟɧɬɚ.
Ɉɧ ɝɟɧɟɪɢɪɭɟɬ ɫɢɧɬɚɤɫɢɱɟɫɤɢ ɤɨɪɪɟɤɬɧɵɣ ɦɨɞɭɥɶ Delphi, ɫɨɞɟɪɠɚɳɢɣ ɛɚ-
ɡɨɜɭɸ ɪɟɚɥɢɡɚɰɢɸ ɤɨɦɩɨɧɟɧɬɚ. Ɉɧ ɬɚɤɠɟ ɫɨɡɞɚɟɬ «ɡɚɝɥɭɲɤɢ», ɜɤɥɸɱɚɸ-
ɳɢɟ ɩɭɫɬɨɟ ɨɛɴɹɜɥɟɧɢɟ ɤɥɚɫɫɚ ɢ ɩɪɨɰɟɞɭɪɭ Register, ɚ ɬɚɤɠɟ ɡɚɩɨɥɧɟɧɧɵɣ
ɪɚɡɞɟɥ uses ɦɨɞɭɥɹ ɤɨɦɩɨɧɟɧɬɚ. ɗɤɫɩɟɪɬ ɧɟ ɝɟɧɟɪɢɪɭɟɬ ɧɢɤɚɤɨɣ ɮɭɧɤ-
ɰɢɨɧɚɥɶɧɨɫɬɢ, ɨɛɟɫɩɟɱɢɜɚɹ ɬɨɥɶɤɨ ɤɚɪɤɚɫ ɢɥɢ ɮɭɧɞɚɦɟɧɬ, ɧɚ ɤɨɬɨɪɨɦ
ɫɬɪɨɢɬɫɹ ɤɨɦɩɨɧɟɧɬ.
ɂɦɹ, ɤɨɬɨɪɨɟ ɛɭɞɟɬ ɜɵɛɪɚɧɨ ɞɥɹ ɤɥɚɫɫɚ ɤɨɦɩɨɧɟɧɬɚ, ɛɭɞɟɬ ɩɪɟɞɩɢɫɵ-
ɜɚɬɶ ɫɩɨɫɨɛ ɨɛɪɚɳɟɧɢɹ ɤ ɧɟɦɭ ɜ ɫɪɟɞɟ Delphi. ȿɫɥɢ ɢɦɹ ɤɥɚɫɫɚ ɧɚɱɢɧɚɟɬɫɹ ɫ
Ɍ, ɬɨ Delphi ɭɛɢɪɚɟɬ ɩɟɪɜɵɣ ɫɢɦɜɨɥ ɢ ɢɫɩɨɥɶɡɭɟɬ ɨɫɬɚɜɲɭɸɫɹ ɫɬɪɨɤɭ ɤɚɤ ɢɦɹ
ɤɨɦɩɨɧɟɧɬɚ. ȿɫɥɢ ɢɦɹ ɤɥɚɫɫɚ ɧɟ ɧɚɱɢɧɚɟɬɫɹ ɫ Ɍ, ɬɨ ɢɫɩɨɥɶɡɭɟɬɫɹ ɜɫɟ ɢɦɹ. Ɋɟ-
ɡɭɥɶɬɢɪɭɸɳɟɟ ɢɦɹ ɨɬɨɛɪɚɠɚɟɬɫɹ ɜ ɜɢɞɟ ɩɨɞɫɤɚɡɤɢ, ɟɫɥɢ ɩɨɡɢɰɢɨɧɢɪɨɜɚɬɶ
ɤɭɪɫɨɪ ɧɚɞ ɤɨɦɩɨɧɟɧɬɨɦ ɜ ɩɚɥɢɬɪɟ ɤɨɦɩɨɧɟɧɬɨɜ. Ⱦɥɹ ɬɨɝɨ ɱɬɨɛɵ Delphi ɦɨɝ-
ɥɚ ɭɫɬɚɧɨɜɢɬɶ ɤɨɦɩɨɧɟɧɬ, ɟɝɨ ɢɦɹ ɞɨɥɠɧɨ ɛɵɬɶ ɭɧɢɤɚɥɶɧɵɦ.
24
ȼ ɞɨɩɨɥɧɟɧɢɟ ɤ ɜɵɛɨɪɭ ɢɦɟɧɢ ɤɨɦɩɨɧɟɧɬɚ ɧɟɨɛɯɨɞɢɦɨ ɜɵɛɪɚɬɶ ɢ
ɢɦɹ ɞɥɹ ɮɚɣɥɚ ɦɨɞɭɥɹ. ȼɨ ɢɡɛɟɠɚɧɢɟ ɧɟɨɞɧɨɡɧɚɱɧɨɫɬɢ ɥɭɱɲɟ ɜɫɟɝɨ ɢɦɟɬɶ
ɭɧɢɤɚɥɶɧɵɟ ɢɦɟɧɚ ɮɚɣɥɨɜ. ɇɚɩɪɢɦɟɪ, ɧɟɪɚɡɭɦɧɨ ɞɥɹ ɤɨɦɩɨɧɟɧɬɚ, ɜɵɛɪɚɧ-
ɧɨɝɨ ɞɥɹ ɩɪɢɦɟɪɚ, ɢɫɩɨɥɶɡɨɜɚɬɶ ɢɦɹ ɦɨɞɭɥɹ Button, ɬɚɤ ɤɚɤ ɜ Delphi ɦɨ-
ɞɭɥɶ ɫ ɬɚɤɢɦ ɢɦɟɧɟɦ ɭɠɟ ɟɫɬɶ. ɉɨɞɞɟɪɠɚɧɢɟ ɢɦɟɧ ɮɚɣɥɨɜ ɦɨɞɭɥɟɣ ɭɧɢ-
ɤɚɥɶɧɵɦɢ ɨɫɨɛɟɧɧɨ ɜɚɠɧɨ ɬɨɝɞɚ, ɤɨɝɞɚ ɭɫɬɚɧɚɜɥɢɜɚɟɬɫɹ ɦɧɨɝɨ ɤɨɦɩɨɧɟɧ-
ɬɨɜ ɢɡ ɪɚɡɧɵɯ ɢɫɬɨɱɧɢɤɨɜ.
ɋɥɟɞɭɹ ɭɩɨɦɹɧɭɬɵɦ ɜɵɲɟ ɫɨɝɥɚɲɟɧɢɹɦ, ɧɚɡɨɜɺɦ ɤɥɚɫɫ ɫɨɡɞɚɜɚɟɦɨɝɨ
ɤɨɦɩɨɧɟɧɬɚ TMyButton. Ɉɛɴɹɜɥɟɧɢɟ ɤɥɚɫɫɚ – ɷɬɨ ɬɨ ɦɟɫɬɨ, ɝɞɟ ɨɛɴɹɜɥɹɸɬ-
ɫɹ ɪɚɡɥɢɱɧɵɟ ɢɧɬɟɪɮɟɣɫɵ ɤɨɦɩɨɧɟɧɬɚ. Ʉɨɧɤɪɟɬɧɨ, ɫ ɩɨɥɶɡɨɜɚɬɟɥɶɫɤɨɣ ɬɨɱ-
ɤɢ ɡɪɟɧɢɹ, ɧɚɢɛɨɥɟɟ ɜɚɠɧɵɦɢ ɹɜɥɹɸɬɫɹ ɪɚɡɞɟɥɵ public ɢ published,
ɩɨɫɤɨɥɶɤɭ ɢɦɟɧɧɨ ɨɧɢ ɨɩɪɟɞɟɥɹɸɬ ɢɧɬɟɪɮɟɣɫɵ ɜɪɟɦɟɧɢ ɜɵɩɨɥɧɟɧɢɹ
(runtime) ɢ ɜɪɟɦɟɧɢ ɩɪɨɟɤɬɢɪɨɜɚɧɢɹ (design-time) ɫɨɨɬɜɟɬɫɬɜɟɧɧɨ.
ɋɜɨɣɫɬɜɚ, ɦɟɬɨɞɵ ɢ ɫɨɛɵɬɢɹ, ɨɛɴɹɜɥɟɧɧɵɟ ɜ ɪɚɡɞɟɥɟ public, ɫɨ-
ɫɬɚɜɥɹɸɬ ɢɧɬɟɪɮɟɣɫ ɜɪɟɦɟɧɢ ɜɵɩɨɥɧɟɧɢɹ. ɇɚ ɷɬɢ ɷɥɟɦɟɧɬɵ ɦɨɠɧɨ ɫɨ-
ɫɥɚɬɶɫɹ ɢɥɢ ɢɯ ɦɨɠɧɨ ɢɫɩɨɥɶɡɨɜɚɬɶ ɬɨɥɶɤɨ ɬɨɝɞɚ, ɤɨɝɞɚ ɩɪɢɥɨɠɟɧɢɟ, ɢɫ-
ɩɨɥɶɡɭɸɳɟɟ ɤɨɦɩɨɧɟɧɬ, ɜɵɩɨɥɧɹɟɬɫɹ. ɋɜɨɣɫɬɜɚ ɢ ɫɨɛɵɬɢɹ, ɨɛɴɹɜɥɟɧɧɵɟ ɜ
ɪɚɡɞɟɥɟ published, ɬɚɤɠɟ ɞɨɫɬɭɩɧɵ ɜɨ ɜɪɟɦɹ ɜɵɩɨɥɧɟɧɢɹ, ɧɨ ɛɨɥɟɟ ɜɚɠ-
ɧɨ ɬɨ, ɱɬɨ ɨɧɢ ɞɨɫɬɭɩɧɵ ɜ ɂɧɫɩɟɤɬɨɪɟ ɨɛɴɟɤɬɨɜ ɜɨ ɜɪɟɦɹ ɩɪɨɟɤɬɢɪɨɜɚɧɢɹ.
ɗɤɫɩɟɪɬ ɤɨɦɩɨɧɟɧɬɨɜ ɧɟ ɡɚɩɨɥɧɹɟɬ ɜɫɟɯ ɪɚɡɞɟɥɨɜ ɝɟɧɟɪɢɪɭɟɦɨɝɨ
ɤɥɚɫɫɚ ɤɨɦɩɨɧɟɧɬɚ. Ɉɧ ɨɝɪɚɧɢɱɢɜɚɟɬɫɹ ɨɛɴɹɜɥɟɧɢɟɦ ɱɟɬɵɪɟɯ ɪɚɡɥɢɱɧɵɯ
ɪɚɡɞɟɥɨɜ.
26
ɤɪɵɜɚɸɳɢɣɫɹ ɫɩɢɫɨɤ ɫɨɞɟɪɠɢɬ ɜɫɟ ɢɦɟɸɳɢɟɫɹ ɜ ɩɚɥɢɬɪɟ ɫɬɪɚɧɢɰɵ. ȿɫɥɢ
ɠɟ ɜɵ ɯɨɬɢɬɟ ɫɨɡɞɚɬɶ ɧɨɜɭɸ ɫɬɪɚɧɢɰɭ, ɬɨ ɩɪɨɫɬɨ ɜɜɟɞɢɬɟ ɜ ɩɨɥɟ ɟɟ ɢɦɹ.
ɑɟɬɜɺɪɬɚɹ ɫɬɪɨɤɚ ɫɨɞɟɪɠɢɬ ɩɨɥɧɨɟ ɢɦɹ ɦɨɞɭɥɹ ɨɛɴɹɜɥɹɟɦɨɝɨ ɤɥɚɫɫɚ.
ɉɨɫɥɟɞɧɹɹ ɫɬɪɨɤɚ ɨɩɪɟɞɟɥɹɟɬ ɦɚɪɲɪɭɬɵ ɞɥɹ ɩɨɢɫɤɚ ɮɚɣɥɚ. ȿɫɥɢ
ɜɜɟɞɟɧɧɵɣ ɜ ɩɪɟɞɵɞɭɳɟɣ ɫɬɪɨɤɟ ɩɭɬɶ ɧɟ ɫɨɞɟɪɠɢɬɫɹ ɜ Search Path, ɬɨ ɨɧ
ɛɭɞɟɬ ɬɭɞɚ ɞɨɛɚɜɥɟɧ.
ɉɨɫɥɟ ɜɜɨɞɚ ɜɫɟɯ ɞɚɧɧɵɯ ɧɚɠɦɢɬɟ ɤɧɨɩɤɭ ɈɄ ɞɥɹ ɬɨɝɨ, ɱɬɨɛɵ ɩɪɟɞ-
ɩɢɫɚɬɶ Delphi ɫɨɡɞɚɬɶ ɧɨɜɵɣ ɦɨɞɭɥɶ. (Ʉɧɨɩɤɭ Install ɧɚɠɢɦɚɬɶ ɧɟ ɫɥɟɞɭɟɬ!)
Ⱦɥɹ ɬɟɯ ɡɧɚɱɟɧɢɣ, ɤɨɬɨɪɵɟ ɭɤɚɡɚɧɵ ɧɚ ɪɢɫ. 2, ɗɤɫɩɟɪɬ ɤɨɦɩɨɧɟɧɬɨɜ ɫɝɟɧɟ-
ɪɢɪɭɟɬ ɫɥɟɞɭɸɳɢɣ ɲɚɛɥɨɧ ɤɨɦɩɨɧɟɧɬɚ:
unit UMyButton;
interface
uses Windows, Messages, SysUtils, Classes, Controls,
StdCtrls;
type
TMyButton = class(TButton)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyPalette', [TMyButton]);
end;
end.
27
3.3. ɇɚɫɬɪɨɣɤɚ ɤɨɦɩɨɧɟɧɬɚ
ɉɨɫɥɟ ɫɨɡɞɚɧɢɹ ɤɚɪɤɚɫɚ ɞɥɹ ɤɨɦɩɨɧɟɧɬɚ ɫɥɟɞɭɸɳɢɣ ɲɚɝ ɜ ɨɛɳɟɦ
ɩɪɨɰɟɫɫɟ ɡɚɤɥɸɱɚɟɬɫɹ ɜ ɧɚɩɢɫɚɧɢɢ ɤɨɞɚ, ɤɨɬɨɪɵɣ ɧɚɫɬɪɨɢɬ ɤɚɪɤɚɫ ɢ, ɬɟɦ
ɫɚɦɵɦ, ɩɨɥɧɨɫɬɶɸ ɨɩɪɟɞɟɥɢɬ ɧɨɜɵɣ ɤɨɦɩɨɧɟɧɬ. ɇɚɩɢɫɚɧɢɟ ɤɨɞɚ ɜɤɥɸɱɚɟɬ
ɨɩɪɟɞɟɥɟɧɢɟ ɫɜɨɣɫɬɜ, ɦɟɬɨɞɨɜ ɢ ɫɨɛɵɬɢɣ ɤɨɦɩɨɧɟɧɬɚ, ɚ ɪɚɜɧɨ ɢ ɪɟɚɥɢɡɚ-
ɰɢɸ ɜɫɩɨɦɨɝɚɬɟɥɶɧɵɯ ɦɟɬɨɞɨɜ ɜ ɪɚɡɞɟɥɟ implementation ɦɨɞɭɥɹ. Ⱦɚɧ-
ɧɚɹ ɱɚɫɬɶ ɩɪɨɰɟɫɫɚ ɲɢɪɨɤɨ ɜɚɪɶɢɪɭɟɬɫɹ ɜ ɡɚɜɢɫɢɦɨɫɬɢ ɨɬ ɬɢɩɚ ɫɨɡɞɚɜɚɟɦɨ-
ɝɨ ɤɨɦɩɨɧɟɧɬɚ. ȼɫɟ, ɱɬɨ ɬɪɟɛɭɟɬɫɹ ɞɥɹ ɩɪɨɫɬɨɝɨ ɩɟɪɟɨɩɪɟɞɟɥɟɧɢɹ ɡɧɚɱɟɧɢɣ
ɩɨ ɭɦɨɥɱɚɧɢɸ, ɷɬɨ ɤɨɧɫɬɪɭɤɬɨɪ ɞɥɹ ɩɟɪɟɨɩɪɟɞɟɥɹɟɦɨɝɨ ɤɨɦɩɨɧɟɧɬɚ.
unit UMyButton;
interface
uses Classes, Controls, Forms, StdCtrls;
type
TMyButton = class( TButton )
public
constructor Create( AOwner : TComponent ); override;
published
property Height default 26;
property Width default 80;
end;
procedure Register;
implementation
constructor TMyButton.Create( AOwner : TComponent );
begin
// He ɡɚɛɭɞɶɬɟ ɜɵɡɜɚɬɶ ɤɨɧɫɬɪɭɤɬɨɪ ɩɪɟɞɤɚ
inherited Create(AOwner);
// ɍɫɬɚɧɨɜɤɚ ɧɨɜɵɯ ɡɧɚɱɟɧɢɣ ɩɨ ɭɦɨɥɱɚɧɢɸ
Width := 80;
Height := 26;
end;
// ɉɪɨɰɟɞɭɪɚ Register
28
procedure Register;
begin
RegisterComponents(‘MyPalette', [TMyButton] );
end;
end.
29
Ɍɚɤ ɤɚɤ ɤɨɧɫɬɪɭɤɬɨɪ ɹɜɥɹɟɬɫɹ ɜɢɪɬɭɚɥɶɧɵɦ, ɫɧɚɱɚɥɚ ɜɵɡɵɜɚɟɬɫɹ ɭɧɚɫ-
ɥɟɞɨɜɚɧɧɵɣ ɤɨɧɫɬɪɭɤɬɨɪ. ɗɬɨ ɝɚɪɚɧɬɢɪɭɟɬ ɩɪɚɜɢɥɶɧɨɟ ɫɨɡɞɚɧɢɟ ɤɨɦɩɨɧɟɧ-
ɬɚ. ɉɪɢ ɩɟɪɟɨɩɪɟɞɟɥɟɧɢɢ ɡɧɚɱɟɧɢɣ ɩɨ ɭɦɨɥɱɚɧɢɸ ɨɫɨɛɟɧɧɨ ɜɚɠɧɨ ɜɵɡɜɚɬɶ
ɭɧɚɫɥɟɞɨɜɚɧɧɵɣ ɤɨɧɫɬɪɭɤɬɨɪ, ɩɨɫɤɨɥɶɤɭ ɨɧ ɧɟɫɟɬ ɨɬɜɟɬɫɬɜɟɧɧɨɫɬɶ ɡɚ ɭɫɬɚ-
ɧɨɜɤɭ ɢɫɯɨɞɧɵɯ ɡɧɚɱɟɧɢɣ ɩɨ ɭɦɨɥɱɚɧɢɸ, ɤɨɬɨɪɵɟ ɦɵ ɩɵɬɚɟɦɫɹ ɩɟɪɟɨɩɪɟ-
ɞɟɥɢɬɶ. ȿɫɥɢ ɭɧɚɫɥɟɞɨɜɚɧɧɵɣ ɤɨɧɫɬɪɭɤɬɨɪ ɜɵɡɜɚɬɶ ɩɨɫɥɟ ɭɫɬɚɧɨɜɤɢ ɧɨɜɵɯ
ɡɧɚɱɟɧɢɣ ɩɨ ɭɦɨɥɱɚɧɢɸ, ɬɨ ɛɭɞɭɬ ɜɨɫɫɬɚɧɨɜɥɟɧɵ ɢɫɯɨɞɧɵɟ ɡɧɚɱɟɧɢɹ.
30
Ⱦɥɹ ɩɪɨɜɟɪɤɢ ɧɚɲɟɝɨ ɧɨɜɨɝɨ ɤɨɦɩɨɧɟɧɬɚ MyButton ɧɭɠɧɨ ɫɨɡɞɚɬɶ
ɬɟɫɬɨɜɨɟ ɩɪɢɥɨɠɟɧɢɟ. ɋɨɡɞɚɧɢɟ ɬɟɫɬɨɜɵɯ ɩɪɢɥɨɠɟɧɢɣ ɹɜɥɹɟɬɫɹ ɝɥɚɜɧɨɣ
ɩɪɢɱɢɧɨɣ ɜɵɞɟɥɟɧɢɹ ɞɥɹ ɦɨɞɭɥɹ ɤɚɠɞɨɝɨ ɤɨɦɩɨɧɟɧɬɚ ɨɬɞɟɥɶɧɨɝɨ ɤɚɬɚɥɨɝɚ.
Ʉɚɬɚɥɨɝ ɫɨɞɟɪɠɢɬ ɢɫɯɨɞɧɵɣ ɮɚɣɥ ɤɨɦɩɨɧɟɧɬɚ ɢ ɜɫɟ ɮɚɣɥɵ, ɚɫɫɨɰɢɢɪɭɸ-
ɳɢɟɫɹ ɫ ɬɟɫɬɨɜɵɦ ɩɪɨɟɤɬɨɦ. ɇɚɥɢɱɢɟ ɩɨɞ ɪɭɤɚɦɢ ɬɟɫɬɨɜɵɯ ɩɪɢɥɨɠɟɧɢɣ
ɨɛɥɟɝɱɚɟɬ ɩɨɞɞɟɪɠɤɭ ɤɨɦɩɨɧɟɧɬɨɜ, ɬɚɤ ɤɚɤ ɤɨɝɞɚ ɤɨɦɩɨɧɟɧɬ ɩɪɢɯɨɞɢɬɫɹ
ɦɨɞɢɮɢɰɢɪɨɜɚɬɶ, ɬɨ ɭ ɜɚɫ ɭɠɟ ɛɭɞɟɬ ɬɟɫɬɨɜɨɟ ɩɪɢɥɨɠɟɧɢɟ, ɩɨɫɬɪɨɟɧɧɨɟ ɜ
ɬɨɦ ɠɟ ɫɚɦɨɦ ɤɚɬɚɥɨɝɟ, ɱɬɨ ɢ ɤɨɦɩɨɧɟɧɬ.
ɂɬɚɤ, ɤɚɤ ɠɟ ɩɪɨɬɟɫɬɢɪɨɜɚɬɶ ɧɨɜɵɣ ɤɨɦɩɨɧɟɧɬ, ɟɫɥɢ ɨɧ ɞɚɠɟ ɧɟ ɩɨɹɜ-
ɥɹɟɬɫɹ ɜ ɩɚɥɢɬɪɟ ɤɨɦɩɨɧɟɧɬɨɜ? ȼɦɟɫɬɨ ɬɨɝɨ ɱɬɨɛɵ ɢɫɩɨɥɶɡɨɜɚɬɶ ɞɢɡɚɣɧɟɪ
ɮɨɪɦ ɞɥɹ ɩɨɦɟɳɟɧɢɹ ɤɨɦɩɨɧɟɧɬɚ ɧɚ ɮɨɪɦɭ, ɚ ɡɚɬɟɦ ɢɫɩɨɥɶɡɨɜɚɬɶ ɂɧɫɩɟɤɬɨɪ
ɨɛɴɟɤɬɨɜ ɞɥɹ ɢɡɦɟɧɟɧɢɹ ɤɚɤɢɯ-ɬɨ ɫɜɨɣɫɬɜ ɤɨɦɩɨɧɟɧɬɚ, ɦɵ ɞɢɧɚɦɢɱɟɫɤɢ ɫɨɡ-
ɞɚɞɢɦ ɷɤɡɟɦɩɥɹɪ ɤɨɦɩɨɧɟɧɬɚ ɜɨ ɜɪɟɦɹ ɫɨɡɞɚɧɢɹ ɮɨɪɦɵ ɧɚɲɟɝɨ ɩɪɢɥɨɠɟɧɢɹ.
Ⱦɢɧɚɦɢɱɟɫɤɨɟ ɫɨɡɞɚɧɢɟ ɤɨɦɩɨɧɟɧɬɚ ɩɪɟɞɨɫɬɚɜɢɬ ɧɚɦ ɜɨɡɦɨɠɧɨɫɬɶ ɫɨɡɞɚɬɶ
ɤɨɦɩɨɧɟɧɬ, ɧɟ ɪɟɝɢɫɬɪɢɪɭɹ ɟɝɨ ɜ Delphi. Ɋɟɝɢɫɬɪɚɰɢɹ ɩɪɟɞɫɬɚɜɥɹɟɬ ɫɨɛɨɣ
ɩɪɨɰɟɫɫ, ɜ ɬɟɱɟɧɢɟ ɤɨɬɨɪɨɝɨ Delphi ɫɬɚɧɨɜɢɬɫɹ ɢɡɜɟɫɬɧɨ ɨ ɤɨɦɩɨɧɟɧɬɚɯ, ɪɚɡ-
ɦɟɳɟɧɧɵɯ ɜ ɩɚɥɢɬɪɟ ɤɨɦɩɨɧɟɧɬɨɜ. Ɋɟɝɢɫɬɪɚɰɢɹ ɞɨɥɠɧɚ ɜɵɩɨɥɧɹɬɶɫɹ ɞɥɹ
ɩɪɨɜɟɪɤɢ ɩɨɜɟɞɟɧɢɹ ɤɨɦɩɨɧɟɧɬɚ ɜɨ ɜɪɟɦɹ ɩɪɨɟɤɬɢɪɨɜɚɧɢɹ, ɧɨ ɞɥɹ ɩɪɨɜɟɪɤɢ
ɩɨɜɟɞɟɧɢɹ ɤɨɦɩɨɧɟɧɬɚ ɜɨ ɜɪɟɦɹ ɜɵɩɨɥɧɟɧɢɹ ɨɧɚ ɧɟɨɛɹɡɚɬɟɥɶɧɚ.
ȼ ɬɨɦ ɠɟ ɫɚɦɨɦ ɤɚɬɚɥɨɝɟ, ɝɞɟ ɭɠɟ ɟɫɬɶ ɦɨɞɭɥɶ ɤɨɦɩɨɧɟɧɬɚ, ɫɨɡɞɚɣɬɟ
ɧɨɜɵɣ ɩɪɨɟɤɬ. Ⱦɥɹ ɬɟɫɬɢɪɨɜɚɧɢɹ ɤɨɦɩɨɧɟɧɬɚ ɩɨɧɚɞɨɛɢɬɫɹ ɩɪɨɫɬɚɹ ɮɨɪɦɚ.
Ⱦɢɧɚɦɢɱɟɫɤɨɟ ɫɨɡɞɚɧɢɟ ɤɨɦɩɨɧɟɧɬɚ ɫɜɨɞɢɬɫɹ ɤ ɫɥɟɞɭɸɳɢɦ ɲɚɝɚɦ.
1. Ⱦɨɛɚɜɢɬɶ ɧɨɜɵɣ ɦɨɞɭɥɶ ɤɨɦɩɨɧɟɧɬɚ ɜ ɪɚɡɞɟɥ uses ɦɨɞɭɥɹ ɤɨɦɩɨɧɟɧɬɚ.
2. Ⱦɨɛɚɜɢɬɶ ɜ ɤɥɚɫɫ ɮɨɪɦɵ ɩɨɥɟ, ɤɨɬɨɪɨɟ ɛɭɞɟɬ ɫɫɵɥɤɨɣ ɧɚ ɤɨɦɩɨɧɟɧɬ.
3. ɋɨɡɞɚɬɶ ɤɨɦɩɨɧɟɧɬ ɜ ɫɨɛɵɬɢɢ ɮɨɪɦɵ OnCreate.
4. ɍɫɬɚɧɨɜɢɬɶ ɫɜɨɣɫɬɜɨ ɤɨɦɩɨɧɟɧɬɚ Parent.
5. ɍɫɬɚɧɨɜɢɬɶ ɫɨɨɬɜɟɬɫɬɜɭɸɳɢɦ ɨɛɪɚɡɨɦ ɞɨɩɨɥɧɢɬɟɥɶɧɵɟ ɫɜɨɣɫɬɜɚ ɤɨɦ-
ɩɨɧɟɧɬɚ.
unit Mainform;
31
interface
uses SysUtils, WinTypes, WinProcs, Messages, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls,
UMyButton;
type
TForml = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ɉɪɢɜɚɬɧɵɟ ɨɛɴɹɜɥɟɧɢɹ }
public
{Ɉɛɳɟɞɨɫɬɭɩɧɵɟ ɨɛɴɹɜɥɟɧɢɹ J
BtnTest : TMyButton;
end;
var
Forml: TForml;
implementation
{$R *.DFM}
procedure TForml.FormCreate(Sender: TObject);
begin
BtnTest := TMyButton.Create( Self ) ;
BtnTest.Parent := Self;
BtnTest.Left := 100;
BtnTest.Top := 100;
BtnTest.Caption := 'MyButton';
end;
end.
33
ɩɨɬɨɦɤɨɦ TWinControl ɢ, ɫɥɟɞɨɜɚɬɟɥɶɧɨ, ɬɚɤɠɟ ɦɨɠɟɬ ɛɵɬɶ ɤɨɧɬɟɣɧɟɪɨɦ. ɋ
ɰɟɥɶɸ ɬɟɫɬɢɪɨɜɚɧɢɹ ɧɨɜɨɝɨ ɤɨɦɩɨɧɟɧɬɚ ɦɵ ɯɨɬɢɦ ɢɦɢɬɢɪɨɜɚɬɶ ɞɟɣɫɬɜɢɟ ɩɨ-
ɦɟɳɟɧɢɹ ɤɨɦɩɨɧɟɧɬɚ ɧɚ ɮɨɪɦɭ. ɋɥɟɞɨɜɚɬɟɥɶɧɨ, ɜ ɦɟɬɨɞɟ FormCreate ɫɜɨɣ-
ɫɬɜɨ BtnTest.Parent ɦɟɧɹɟɬɫɹ ɧɚ Self, ɫɫɵɥɚɹɫɶ ɧɚ ɮɨɪɦɭ.
ɉɨɫɥɟ ɭɫɬɚɧɨɜɤɢ ɫɜɨɣɫɬɜɚ Parent ɦɨɠɟɬ ɩɨɬɪɟɛɨɜɚɬɶɫɹ ɧɟɤɨɬɨɪɚɹ
ɦɨɞɢɮɢɤɚɰɢɹ ɫɜɨɣɫɬɜ ɤɨɦɩɨɧɟɧɬɚ. ɗɬɨ ɦɨɝɭɬ ɛɵɬɶ ɫɜɨɣɫɬɜɚ ɩɨɡɢɰɢɨɧɢɪɨ-
ɜɚɧɢɹ Left ɢ Ɍɨɪ. ȿɫɥɢ ɤɨɦɩɨɧɟɧɬ ɢɦɟɟɬ ɡɚɝɨɥɨɜɨɤ, ɬɨ ɱɚɫɬɨ ɭɫɬɚɧɚɜɥɢ-
ɜɚɟɬɫɹ ɢ ɫɜɨɣɫɬɜɨ Caption. Ⱦɥɹ ɬɟɫɬɢɪɨɜɚɧɢɹ ɤɨɦɩɨɧɟɧɬɚ MyButton ɭɫ-
ɬɚɧɨɜɤɢ ɬɪɟɯ ɭɩɨɦɹɧɭɬɵɯ ɫɜɨɣɫɬɜ ɞɨɫɬɚɬɨɱɧɨ, ɬɚɤ ɤɚɤ ɧɢɤɚɤɢɯ ɧɨɜɵɯ ɜɨɡ-
ɦɨɠɧɨɫɬɟɣ ɧɟ ɞɨɛɚɜɥɹɥɨɫɶ. Ⱦɥɹ ɬɟɫɬɢɪɨɜɚɧɢɹ ɛɨɥɟɟ ɫɥɨɠɧɵɯ ɤɨɦɩɨɧɟɧɬɨɜ
ɜ ɞɚɧɧɵɣ ɦɨɦɟɧɬ ɦɨɠɟɬ ɩɨɬɪɟɛɨɜɚɬɶɫɹ ɭɫɬɚɧɨɜɤɚ ɢ ɞɪɭɝɢɯ ɫɜɨɣɫɬɜ ɢ ɨɛɪɚ-
ɛɨɬɱɢɤɨɜ ɫɨɛɵɬɢɣ.
ȼ ɬɟɫɬɨɜɨɦ ɩɪɢɥɨɠɟɧɢɢ ɦɨɠɧɨ ɦɨɞɢɮɢɰɢɪɨɜɚɬɶ ɥɸɛɨɟ ɞɨɫɬɭɩɧɨɟ ɜɨ
ɜɪɟɦɹ ɜɵɩɨɥɧɟɧɢɹ ɫɜɨɣɫɬɜɨ. ȿɞɢɧɫɬɜɟɧɧɨɟ ɪɟɚɥɶɧɨɟ ɨɝɪɚɧɢɱɟɧɢɟ ɡɚɤɥɸ-
ɱɚɟɬɫɹ ɜ ɧɟɨɛɯɨɞɢɦɨɫɬɢ ɭɫɬɚɧɨɜɢɬɶ ɫɜɨɣɫɬɜɨ Parent, ɤɚɤ ɛɵɥɨ ɨɩɢɫɚɧɨ
ɜɵɲɟ, ɞɨ ɬɨɝɨ, ɤɚɤ ɭɫɬɚɧɚɜɥɢɜɚɬɶ ɞɪɭɝɢɟ ɫɜɨɣɫɬɜɚ. ȼɵɩɨɥɧɟɧɢɟ ɩɨɞɨɛɧɨɝɨ
ɬɪɟɛɨɜɚɧɢɹ ɧɟɨɛɯɨɞɢɦɨ ɩɨɬɨɦɭ, ɱɬɨ ɢɡɦɟɧɟɧɢɟ ɧɟɤɨɬɨɪɵɯ ɫɜɨɣɫɬɜ ɡɚɫɬɚɜ-
ɥɹɟɬ ɤɨɦɩɨɧɟɧɬ ɩɟɪɟɪɢɫɨɜɵɜɚɬɶ ɫɟɛɹ, ɢ ɟɫɥɢ ɤɨɦɩɨɧɟɧɬ ɧɟ ɜɤɥɸɱɟɧ ɟɳɟ ɜ
ɫɩɢɫɨɤ Controls ɩɪɟɞɤɚ, ɬɨ ɢɡɦɟɧɟɧɢɟ ɨɛɫɭɠɞɚɟɦɵɯ ɫɜɨɣɫɬɜ ɧɟ ɞɚɫɬ ɠɟ-
ɥɚɟɦɨɝɨ ɷɮɮɟɤɬɚ.
ɇɚ ɪɢɫ. 3 ɩɨɤɚɡɚɧ ɪɟɡɭɥɶɬɚɬ ɪɚɛɨɬɵ ɬɟɫɬɨɜɨɝɨ ɩɪɢɥɨɠɟɧɢɹ TestBtns.
Ɋɢɫ. 3.
34
Ɍɨɬ ɠɟ ɫɚɦɵɣ ɫɩɨɫɨɛ, ɤɨɬɨɪɵɣ ɢɫɩɨɥɶɡɨɜɚɥɫɹ ɞɥɹ ɬɟɫɬɢɪɨɜɚɧɢɹ ɤɨɦ-
ɩɨɧɟɧɬɚ, ɦɨɠɟɬ ɩɪɢɦɟɧɹɬɶɫɹ ɜ Delphi ɜɫɟɝɞɚ, ɤɨɝɞɚ ɧɟɨɛɯɨɞɢɦɨ ɞɢɧɚɦɢɱɟ-
ɫɤɨɟ ɫɨɡɞɚɧɢɟ ɤɨɦɩɨɧɟɧɬɚ. ɂ ɡɞɟɫɶ ɫɥɨɠɧɨɫɬɶ ɡɚɤɥɸɱɚɟɬɫɹ ɜ ɭɫɬɚɧɨɜɤɟ
ɫɜɨɣɫɬɜɚ Parent. ȼ ɩɪɨɝɪɚɦɦɚɯ ɬɟɫɬɢɪɨɜɚɧɢɹ ɤɨɦɩɨɧɟɧɬɨɜ ɫɜɨɣɫɬɜɨ
Parent ɨɛɵɱɧɨ ɭɫɬɚɧɚɜɥɢɜɚɟɬɫɹ ɜ Self, ɱɬɨ ɭɤɚɡɵɜɚɟɬ ɧɚ ɨɬɜɟɬɫɬɜɟɧ-
ɧɨɫɬɶ ɮɨɪɦɵ ɡɚ ɪɢɫɨɜɚɧɢɟ ɷɥɟɦɟɧɬɚ ɭɩɪɚɜɥɟɧɢɹ. Ɉɞɧɚɤɨ ɜ ɩɪɢɥɨɠɟɧɢɢ ɷɬɨ
ɦɨɠɟɬ ɛɵɬɶ ɮɨɪɦɚ, ɩɚɧɟɥɶ, GroupBox ɢ ɬ. ɩ.
35
Ɋɢɫ. 4. Ɉɤɧɨ ɭɫɬɚɧɨɜɤɢ ɤɨɦɩɨɧɟɧɬɚ
Ɋɢɫ. 6
Ɂɚɦɟɱɚɧɢɟ. ȼ ɞɚɧɧɨɦ ɫɥɭɱɚɟ ɨɬɤɨɦɩɢɥɢɪɨɜɚɧɧɵɣ ɮɚɣɥ .bpl ɡɚɩɢ-
ɫɚɥɫɹ ɜ ɪɚɛɨɱɢɟ ɩɚɩɤɢ Delphi ɜ C:\Program Files\Borland\... ȼɨ ɦɧɨɝɢɯ ɫɥɭ-
ɱɚɹɯ ɞɨɫɬɭɩ ɜ ɷɬɢ ɩɚɩɤɢ ɡɚɤɪɵɬ ɚɞɦɢɧɢɫɬɪɚɬɨɪɨɦ. Ɍɨɝɞɚ ɫɥɟɞɭɟɬ ɹɜɧɨ ɭɤɚ-
ɡɚɬɶ ɩɚɩɤɢ ɧɚɡɧɚɱɟɧɢɹ ɜ ɩɭɧɤɬɟ ɦɟɧɸ Project | Options ɧɚ ɜɤɥɚɞɤɟ Directo-
riesŇConditionals ɜ ɫɬɪɨɤɚɯ Output Directory ɢ DCP Output Directory.
Ʉɚɤ ɬɨɥɶɤɨ ɤɨɦɩɨɧɟɧɬ ɭɫɬɚɧɨɜɥɟɧ ɜ ɩɚɥɢɬɪɟ, ɟɝɨ ɦɨɠɧɨ ɢɫɩɨɥɶɡɨ-
ɜɚɬɶ ɜ ɩɪɢɥɨɠɟɧɢɹɯ Delphi, ɩɪɟɞɜɚɪɢɬɟɥɶɧɨ ɩɪɨɬɟɫɬɢɪɨɜɚɜ ɩɨɜɟɞɟɧɢɟ ɤɨɦ-
ɩɨɧɟɧɬɚ ɜɨ ɜɪɟɦɹ ɩɪɨɟɤɬɢɪɨɜɚɧɢɹ. Ɍɟɫɬɢɪɨɜɚɧɢɟ ɯɚɪɚɤɬɟɪɢɫɬɢɤ ɤɨɦɩɨɧɟɧ-
ɬɚ ɜɪɟɦɟɧɢ ɩɪɨɟɤɬɢɪɨɜɚɧɢɹ ɦɨɠɟɬ ɨɤɚɡɚɬɶɫɹ ɜɟɫɶɦɚ ɫɥɨɠɧɵɦ, ɨɫɨɛɟɧɧɨ
ɟɫɥɢ ɤɨɦɩɨɧɟɧɬ ɢɦɟɟɬ ɦɧɨɝɨ ɫɜɨɣɫɬɜ. ȼ ɧɚɲɟɦ ɫɥɭɱɚɟ ɜɫɟ, ɱɬɨ ɧɭɠɧɨ ɫɞɟ-
ɥɚɬɶ – ɷɬɨ ɩɨɦɟɫɬɢɬɶ ɷɤɡɟɦɩɥɹɪ ɧɚ ɮɨɪɦɭ ɢ ɩɪɨɜɟɪɢɬɶ, ɞɟɣɫɬɜɭɸɬ ɥɢ ɧɨɜɵɟ
ɡɧɚɱɟɧɢɹ ɪɚɡɦɟɪɚ. ȿɫɥɢ ɤɨɦɩɨɧɟɧɬ ɪɚɛɨɬɚɟɬ ɧɟɩɪɚɜɢɥɶɧɨ ɢɥɢ ɛɨɥɶɲɟ ɧɟ
ɩɪɟɞɫɬɚɜɥɹɟɬ ɢɧɬɟɪɟɫ, ɟɝɨ ɦɨɠɧɨ ɭɞɚɥɢɬɶ ɢɡ IDE ɫ ɩɨɦɨɳɶɸ ɨɤɧɚ ɭɫɬɚɧɨɜ-
ɤɢ ɩɚɤɟɬɚ (ɫɦ. ɪɢɫ. 8 ɢ ɬɚɛɥ. 5).
ɉɨɫɥɟ ɢɫɩɪɚɜɥɟɧɢɹ ɨɲɢɛɨɤ ɢ ɞɥɹ ɞɚɥɶɧɟɣɲɟɣ ɨɬɥɚɞɤɢ ɭɞɨɛɧɨ ɜɨɫ-
ɩɨɥɶɡɨɜɚɬɶɫɹ ɪɟɞɚɤɬɨɪɨɦ ɩɚɤɟɬɨɜ, ɜ ɤɨɬɨɪɨɦ ɦɨɠɧɨ ɞɨɛɚɜɥɹɬɶ ɢ ɭɞɚɥɹɬɶ
37
ɤɨɦɩɨɧɟɧɬɵ ɜ ɩɚɤɟɬ, ɤɨɦɩɢɥɢɪɨɜɚɬɶ ɩɚɤɟɬɵ. Ɋɟɞɚɤɬɨɪ ɩɚɤɟɬɨɜ (ɪɢɫ. 7) ɚɜ-
ɬɨɦɚɬɢɱɟɫɤɢ ɩɨɹɜɢɬɫɹ, ɟɫɥɢ ɡɚɝɪɭɡɢɬɶ ɩɚɤɟɬ DPK ɜ Delphi ɱɟɪɟɡ ɦɟɧɸ File
|Open Project. Ɍɚɤɠɟ ɨɧ ɛɭɞɟɬ ɜɵɡɜɚɧ, ɟɫɥɢ ɜɵɛɪɚɬɶ ɩɪɢ ɭɫɬɚɧɨɜɤɟ ɩɚɤɟɬɚ
ɜɤɥɚɞɤɭ Into Existing Package.
38
ɉɪɢɦɟɱɚɧɢɟ. ȿɫɥɢ ɜɵ ɪɚɫɩɪɨɫɬɪɚɧɹɟɬɟ ɤɨɦɩɨɧɟɧɬ ɛɟɡ ɢɫɯɨɞɧɵɯ ɤɨ-
ɞɨɜ, ɬɨ ɩɨɥɶɡɨɜɚɬɟɥɹɦ ɜɚɲɟɝɨ ɤɨɦɩɨɧɟɧɬɚ ɫɥɟɞɭɟɬ ɩɟɪɟɞɚɬɶ ɮɚɣɥɵ:
– BPL-ɮɚɣɥ, ɫɨɞɟɪɠɚɳɢɣ ɤɨɦɩɨɧɟɧɬ (ɜ ɧɚɲɟɦ ɫɥɭɱɚɟ – MyButton.bpl);
– DCU-ɮɚɣɥ ɫ ɨɬɤɨɦɩɢɥɢɪɨɜɚɧɧɵɦ ɦɨɞɭɥɟɦ (UMyButton.dcu, ɫɫɵɥɤɚ
ɧɚ ɷɬɨɬ ɮɚɣɥ ɚɜɬɨɦɚɬɢɱɟɫɤɢ ɩɨɹɜɥɹɟɬɫɹ ɜ ɫɟɤɰɢɢ Uses ɦɨɞɭɥɹ ɩɪɢ ɪɚɡ-
ɦɟɳɟɧɢɢ ɤɨɦɩɨɧɟɧɬɚ ɧɚ ɮɨɪɦɟ).
ɑɬɨɛɵ ɭɫɬɚɧɨɜɢɬɶ BPL-ɩɚɤɟɬ ɜ ɫɪɟɞɭ Delphi (ɜ ɨɬɫɭɬɫɬɜɢɟ ɞɪɭɝɢɯ
ɮɚɣɥɨɜ), ɩɨɥɶɡɨɜɚɬɟɥɶ ɞɨɥɠɟɧ ɢɫɩɨɥɶɡɨɜɚɬɶ ɩɭɧɤɬ ɦɟɧɸ Component | Install
Packages, ɩɪɢ ɜɵɛɨɪɟ ɤɨɬɨɪɨɝɨ ɩɨɹɜɥɹɟɬɫɹ ɞɢɚɥɨɝɨɜɨɟ ɨɤɧɨ ɭɫɬɚɧɨɜɤɢ ɩɚ-
ɤɟɬɚ (ɪɢɫ. 8).
39
Ɍɚɛɥɢɰɚ 5
Add ɂɧɫɬɚɥɥɢɪɭɟɬ ɩɚɤɟɬ ɜɪɟɦɟɧɢ ɩɪɨɟɤɬɢɪɨɜɚɧɢɹ (ɮɚɣɥɵ
*.bpl, ɧɚɯɨɞɹɳɢɟɫɹ ɜ ɩɚɩɤɟ ..\delphi\bin ɢɥɢ ɜ ɭɤɚɡɚɧɧɨɣ
ɜɚɦɢ ɩɚɩɤɟ). ɋɨɞɟɪɠɢɦɨɟ ɩɚɤɟɬɚ ɨɬɨɛɪɚɡɢɬɫɹ ɧɚ ɩɚɥɢɬɪɟ
ɤɨɦɩɨɧɟɧɬɨɜ ɢ ɛɭɞɟɬ ɞɨɫɬɭɩɧɨ ɜɨ ɜɫɟɯ ɩɪɨɟɤɬɚɯ
Remove ɍɞɚɥɹɟɬ ɢɡ IDE ɜɵɞɟɥɟɧɧɵɣ ɩɚɤɟɬ. Ⱦɥɹ ɭɞɚɥɟɧɢɹ ɦɨɠɧɨ ɭɛ-
ɪɚɬɶ ɫɨɨɬɜɟɬɫɬɜɭɸɳɢɣ ɮɥɚɠɨɤ. ȼɫɟ ɤɨɦɩɨɧɟɧɬɵ, ɡɚɪɟɝɢɫɬ-
ɪɢɪɨɜɚɧɧɵɟ ɜ ɩɚɤɟɬɟ, ɛɭɞɭɬ ɧɟɞɨɫɬɭɩɧɵ
Edit Ɉɬɤɪɵɜɚɟɬ ɜɵɛɪɚɧɧɵɣ ɩɚɤɟɬ ɜ Ɋɟɞɚɤɬɨɪɟ ɩɚɤɟɬɨɜ, ɟɫɥɢ ɞɨɫ-
ɬɭɩɟɧ ɟɝɨ ɢɫɯɨɞɧɵɣ ɬɟɤɫɬ
Components ɉɨɤɚɡɵɜɚɟɬ ɤɨɦɩɨɧɟɧɬɵ, ɜɤɥɸɱɟɧɧɵɟ ɜ ɞɚɧɧɵɣ ɩɚɤɟɬ
41
4. ɉɪɢɦɟɪɵ ɩɪɨɝɪɚɦɦɢɪɨɜɚɧɢɹ
unit UGr;
interface
uses Windows, Messages, SysUtils, Classes,
Controls,Graphics;
type
TGr = class(TGraphicControl)
private
FPen:TPen;
FBrush:TBrush;
Fx1,Fy1,Fx2,Fy2:real;//ɤɨɨɪɞɢɧɚɬɵ ɨɤɧɚ
Fa:real; //ɤɨɷɮɮɢɰɢɟɧɬ ɮɭɧɤɰɢɢ
function II(x:real):Integer; //ɩɟɪɟɜɨɞ ɪɟɚɥɶɧɨɣ ɤɨɨɪɞɢɧɚɬɵ x
//ɜ ɷɤɪɚɧɧɭɸ
function JJ(y:real):Integer; //ɩɟɪɟɜɨɞ ɪɟɚɥɶɧɨɣ ɤɨɨɪɞɢɧɚɬɵ
// y ɜ ɷɤɪɚɧɧɭɸ
function F(x:real):real; //ɮɭɧɤɰɢɹ, ɨɩɪɟɞɟɥɹɸɳɚɹ ɝɪɚɮɢɤ
procedure SetX1(Value:real); //ɭɫɬɚɧɨɜɤɚ ɤɨɨɪɞɢɧɚɬɵ x1
procedure SetY1(Value:real); //ɭɫɬɚɧɨɜɤɚ ɤɨɨɪɞɢɧɚɬɵ y1
procedure SetX2(Value:real); //ɭɫɬɚɧɨɜɤɚ ɤɨɨɪɞɢɧɚɬɵ x2
procedure SetY2(Value:real); //ɭɫɬɚɧɨɜɤɚ ɤɨɨɪɞɢɧɚɬɵ y2
42
procedure SetA(Value:real); //ɭɫɬɚɧɨɜɤɚ ɤɨɷɮɮɢɰɢɟɧɬɚ a
procedure SetBrush(Value:TBrush); //ɭɫɬɚɧɨɜɤɚ ɤɢɫɬɢ
procedure SetPen(Value:TPen); //ɭɫɬɚɧɨɜɤɚ ɩɟɪɚ
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
procedure Paint;override;//ɩɟɪɟɪɢɫɨɜɤɚ
published
procedure StyleChanged(Sender: TObject); dynamic;
43
property OnDragOver;
property OnEndDrag;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDock;
property OnStartDrag;
end;
procedure Register;
implementation
// ɤɨɧɫɬɪɭɤɬɨɪ
constructor TGr.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
ControlStyle:= ControlStyle+[csReplicatable];
FX1:= –1;
FX2:=10;
FY1:= –1;
FY2:=10;
Fa:=1;
Left:=10;
Top:=10;
Width:=300;
Height:=200;
FPen:=TPen.Create;
FPen.OnChange:=StyleChanged;
FBrush:=TBrush.Create;
FBrush.OnChange:=StyleChanged;
end;
// ɭɫɬɚɧɨɜɤɚ ɤɨɨɪɞɢɧɚɬɵ x1
procedure TGr.SetX1(Value:real);
begin
44
if FX1<>Value then
begin
FX1:=Value;
Paint;
end;
end;
// ɭɫɬɚɧɨɜɤɚ ɤɨɨɪɞɢɧɚɬɵ y1
procedure TGr.SetY1(Value:real);
begin
if FY1<>Value then
begin
FX1:=Value;
Paint;
end;
end;
// ɭɫɬɚɧɨɜɤɚ ɤɨɨɪɞɢɧɚɬɵ x2
procedure TGr.SetX2(Value:real);
begin
if FX2<>Value then
begin
FX2:=Value;
Paint;
end;
end;
// ɭɫɬɚɧɨɜɤɚ ɤɨɨɪɞɢɧɚɬɵ y2
procedure TGr.SetY2(Value:real);
begin
if FY2<>Value then
begin
FY2:=Value;
Paint;
end;
end;
45
// ɭɫɬɚɧɨɜɤɚ ɤɨɷɮɮɢɰɢɟɧɬɚ a
procedure TGr.SetA(Value:real);
begin
if FA<>Value then
begin
FA:=Value;
Paint;
end;
end;
// ɭɫɬɚɧɨɜɤɚ ɤɢɫɬɢ
procedure TGr.SetBrush(Value:TBrush);
begin
if FBrush<>Value then
begin
FBrush:=Value;
Paint;
end;
end;
// ɭɫɬɚɧɨɜɤɚ ɩɟɪɚ
procedure TGr.SetPen(Value:TPen);
begin
if FPen<>Value then
begin
FPen:=Value;
Paint;
end;
end;
46
//ɜɵɱɢɫɥɟɧɢɟ ɷɤɪɚɧɧɨɣ ɤɨɨɪɞɢɧɚɬɵ JJ ɞɥɹ ɪɟɚɥɶɧɨɣ ɤɨɨɪɞɢɧɚɬɵ y
function TGr.JJ(y:real):Integer;
begin
Result:=Height-Round((y-FY1)*Height/(FY2-FY1));
end;
//ɞɟɫɬɪɭɤɬɨɪ
destructor TGr.Destroy;
begin
FPen.Free;
FBrush.Free;
inherited destroy;
end;
//ɩɟɪɟɪɢɫɨɜɤɚ ɤɨɦɩɨɧɟɧɬɚ
procedure TGr.Paint;
const
n=60;//ɤɨɥɢɱɟɫɬɜɨ ɬɨɱɟɤ, ɩɨ ɤɨɬɨɪɵɦ ɫɬɪɨɢɬɫɹ ɝɪɚɮɢɤ
var
I : integer;
h,x : real;
begin
h:=(X2-X1)/n;//ɲɚɝ ɢɡɦɟɧɟɧɢɹ ɚɪɝɭɦɟɧɬɚ ɮɭɧɤɰɢɢ
with Canvas do
begin
//ɪɢɫɨɜɚɧɢɟ ɨɫɟɣ ɤɨɨɪɞɢɧɚɬ
Rectangle(0,0,Width,height);
MoveTo(II(X1),JJ(0));
47
LineTo(II(X2),JJ(0));
MoveTo(II(0),JJ(Y1));
LineTo(II(0),JJ(Y2));
//ɤɪɢɜɚɹ ɥɢɧɢɹ ɝɪɚɮɢɤɚ y=F(x) ɪɢɫɭɟɬɫɹ ɤɚɤ
// ɩɨɫɥɟɞɨɜɚɬɟɥɶɧɨɫɬɶ ɨɬɪɟɡɤɨɜ[x,F(x),x+h,F(x+h)]
x := X1;
MoveTo(II(x),JJ(F(x)));
for I := 1 to n do
begin
x := x+h;
LineTo(II(x),JJ(F(x)));
end;
end;
end;
{ɩɪɨɰɟɞɭɪɚ ɪɟɝɢɫɬɪɚɰɢɢ}
procedure Register;
begin
RegisterComponents('My', [TGr]);
end;
end.
48
ɇɚ ɪɢɫ. 5 ɩɪɟɞɫɬɚɜɥɟɧ ɢɧɬɟɪɮɟɣɫ ɤɨɦɩɨɧɟɧɬɚ Gr ɜɪɟɦɟɧɢ ɩɪɨɟɤɬɢɪɨ-
ɜɚɧɢɹ.
49
unit TimeLabel;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, extctrls;
type
TTimeLabel = class(TCustomLabel)
private
FActive: Boolean;
protected
T: Ttimer; // Ɍɚɣɦɟɪ
procedure GetTime (s: Tobject);
procedure ChangeActive(a: boolean);
public
constructor Create (Owner: Tcomponent); override;
destructor Destroy; override;
published
property Active: Boolean read FActive write ChangeActive;
property Color;
property Font;
end;
procedure Register;
implementation
procedure TTimeLabel.GetTime;
begin
// ɗɬɨɬ ɦɟɬɨɞ ɨɬɨɛɪɚɠɚɟɬ ɧɚ ɡɚɝɨɥɨɜɤɟ ɜɪɟɦɹ. ɑɬɨɛɵ ɜɫɟ
// ɪɚɛɨɬɚɥɨ, ɟɝɨ ɧɚɞɨ ɛɭɞɟɬ ɧɚɡɧɚɱɢɬɶ ɫɨɛɵɬɢɸ OnTimer
// ɬɚɣɦɟɪɚ.
if Active then
50
Caption:=TimeToStr(Time);
end;
procedure TTimeLabel.ChangeActive;
begin
FActive:=A;
T.Enabled:=A;
Visible:=A;
end;
constructor TTimeLabel.create;
begin
Inherited create(Owner);
T:=TTimer.Create(Self);
T.Enabled:=true;
T.Interval:=1000;
// ɉɪɢɫɜɚɢɜɚɟɦ ɫɨɛɵɬɢɸ ɨɛɪɚɛɨɬɱɢɤ:
T.OnTimer:=GetTime;
FActive:=True;
Width:=50;
Height:=30;
end;
destructor TTimeLabel.destroy;
begin
T.Free;
inherited Destroy;
end;
procedure Register;
begin
RegisterComponents('Samples', [TTimeLabel]);
end;
end.
51
Ⱦɥɹ ɬɟɫɬɢɪɨɜɚɧɢɹ ɫɨɡɞɚɣɬɟ ɧɨɜɵɣ ɩɪɨɟɤɬ, ɞɨɛɚɜɶɬɟ ɜ ɫɟɤɰɢɸ uses
ɫɫɵɥɤɭ ɧɚ ɦɨɞɭɥɶ TimeLabel ɢ ɜ ɨɛɪɚɛɨɬɱɢɤ OnCreate ɞɥɹ ɮɨɪɦɵ ɡɚ-
ɩɢɲɢɬɟ:
procedure TForm1.FormCreate(Sender: TObject);
var L: TTimeLabel;
begin
L:=TTimeLabel.Create(self);
L.Parent:=Self;
L.top:=0;
L.Left:=Clientwidth-L.width;
end;
Ⱦɥɹ ɭɫɬɚɧɨɜɤɢ ɤɨɦɩɨɧɟɧɬɚ ɜ ɫɪɟɞɭ Delphi ɜɵɛɟɪɢɬɟ ɩɭɧɤɬ ɦɟɧɸ
Component | Install Component, ɭɤɚɡɚɜ ɧɚ ɫɬɪɚɧɢɰɟ Into New Package ɢɦɹ
ɦɨɞɭɥɹ TimeLabel.pas ɢ ɢɦɹ ɩɚɤɟɬɚ TimeLabelPack.dpk.
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
TCalcBox = class(TCustomGroupBox)
52
private
FText: TStrings;
btCalc: TButton;
lbResult: TLabel;
protected
procedure SetText(value: TStrings);
procedure btCalcClick(sender: TObject);
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property Caption;
property Top;
property Height;
property Width;
// ɋɜɨɣɫɬɜɨ ɤɥɚɫɫɚ TStrings
property Text: TStrings read FText write SetText;
end;
procedure Register;
implementation
btCalc:=TButton.Create (self);
with btCalc do begin
Width := 75; Height := 25;
53
Parent:=Self;
Top:=120;
Left:=0;
Caption:='Calculate';
// Ⱦɟɥɟɝɢɪɭɟɦ ɦɟɬɨɞ btCalcClick ɫɨɛɵɬɢɸ OnClick
OnClick:=btCalcClick;
end;
lbResult:=TLabel.Create (self);
with lbResult do begin
Width := 75; Height := 25;
Parent:=Self;
top:=60;
Left:=0;
Caption:='';
end;
//ɋɨɡɞɚɟɦ ɩɨɬɨɦɨɤ ɚɛɫɬɪɚɤɬɧɨɝɨ ɤɥɚɫɫɚ TStrings
FText:=TStringList.create;
FText.clear;
end;
54
for i:=0 to Text.Count-1 do
Sum:=Sum+ StrToFloat(Text[i]);
lbResult.Caption:=FloatToStr(Sum);
except
ShowMessage('Ɉɲɢɛɤɚ ɩɪɟɨɛɪɚɡɨɜɚɧɢɹ!');
end;
end;
destructor TCalcBox.Destroy;
begin
btCalc.free;
lbResult.Free;
inherited Destroy;
end;
procedure Register;
begin
RegisterComponents('Samples', [TCalcBox]);
end;
end.
Ɂɚɞɚɧɢɹ
55
ɞɟɥɟ «Ⱥɧɚɥɢɡ ɡɚɞɚɱɢ» ɧɟɨɛɯɨɞɢɦɨ ɨɛɨɫɧɨɜɚɬɶ ɜɵɛɨɪ ɤɥɚɫɫɚ-ɩɪɟɞɤɚ ɤɨɦ-
ɩɨɧɟɧɬɚ, ɚ ɬɚɤɠɟ ɜɵɛɨɪ ɩɭɛɥɢɤɭɟɦɵɯ ɫɜɨɣɫɬɜ. ȼ ɪɚɡɞɟɥɟ «ɉɥɚɧ ɬɟɫɬɢɪɨɜɚ-
ɧɢɹ» ɬɪɟɛɭɟɬɫɹ ɨɩɢɫɚɧɢɟ ɤɚɤ ɢɧɬɟɪɮɟɣɫɚ ɜɪɟɦɟɧɢ ɜɵɩɨɥɧɟɧɢɹ, ɬɚɤ ɢ ɢɧ-
ɬɟɪɮɟɣɫɚ ɜɪɟɦɟɧɢ ɩɪɨɟɤɬɢɪɨɜɚɧɢɹ.
1. ɋɢɫɬɟɦɧɵɟ ɱɚɫɵ.
2. ɋɢɫɬɟɦɧɚɹ ɞɚɬɚ.
3. Ⱥɬɪɢɛɭɬɵ ɮɚɣɥɚ.
4. ɇɟɩɪɹɦɨɭɝɨɥɶɧɚɹ ɤɧɨɩɤɚ.
5. ɉɟɪɟɦɟɳɚɟɦɚɹ ɤɧɨɩɤɚ.
6. Ƚɪɚɮɢɤ ɮɭɧɤɰɢɢ:
ɚ) ɮɭɧɤɰɢɹ ɡɚɞɚɧɚ ɬɚɛɥɢɱɧɨ;
ɛ) ɡɧɚɱɟɧɢɹ ɚɪɝɭɦɟɧɬɨɜ ɢ ɮɭɧɤɰɢɢ ɡɚɞɚɧɵ ɜ ɮɚɣɥɟ;
ɜ) ɮɭɧɤɰɢɹ ɜɵɛɢɪɚɟɬɫɹ ɢɡ ɡɚɞɚɧɧɨɝɨ ɤɚɤ ɩɟɪɟɱɢɫɥɢɦɵɣ ɬɢɩ ɫɩɢɫɤɚ.
7. ɇɟɩɪɹɦɨɭɝɨɥɶɧɨɟ ɢɡɨɛɪɚɠɟɧɢɟ.
8. ȼɢɡɭɚɥɶɧɨɟ ɛɢɧɚɪɧɨɟ ɞɟɪɟɜɨ.
9. ȼɢɡɭɚɥɶɧɵɣ ɝɪɚɮ.
10. ɋɬɨɥɛɢɤɨɜɚɹ ɞɢɚɝɪɚɦɦɚ.
11. Ʉɪɭɝɨɜɚɹ ɞɢɚɝɪɚɦɦɚ.
12. Ʌɢɧɟɣɱɚɬɚɹ ɞɢɚɝɪɚɦɦɚ.
13. ɉɨ ɞɚɬɟ ɨɩɪɟɞɟɥɢɬɶ ɡɧɚɤ ɡɨɞɢɚɤɚ ɢ «ɡɜɟɪɹ».
14. ɉɨ ɞɚɬɟ ɨɩɪɟɞɟɥɢɬɶ ɞɟɧɶ ɧɟɞɟɥɢ.
15. ɋɭɦɦɚ ɞɜɭɯ ɩɨɥɢɧɨɦɨɜ.
16. Ɂɧɚɱɟɧɢɟ ɩɨɥɢɧɨɦɚ.
17. ɉɪɨɢɡɜɟɞɟɧɢɟ ɞɜɭɯ ɩɨɥɢɧɨɦɨɜ.
18. ɋɤɚɥɹɪɧɨɟ ɩɪɨɢɡɜɟɞɟɧɢɟ ɞɜɭɯ ɩɨɥɢɧɨɦɨɜ.
19. Ʉɨɦɩɨɧɟɧɬ «ɉɥɨɬɧɨɫɬɢ ɪɚɫɩɪɟɞɟɥɟɧɢɹ ɜɟɪɨɹɬɧɨɫɬɟɣ».
20. Ʉɨɦɩɨɧɟɧɬ «ɋɩɥɚɣɧɵ».
21. Ʉɨɦɩɨɧɟɧɬ «StringGrid + ComboBox».
56
Ʌɢɬɟɪɚɬɭɪɚ
57
ɍɱɟɛɧɨɟ ɢɡɞɚɧɢɟ
ɋɨɫɬɚɜɢɬɟɥɢ:
ȼɨɳɢɧɫɤɚɹ Ƚɢɥɶɞɚ ɗɞɝɚɪɨɜɧɚ,
Ɋɭɞɚɥɟɜ ȼɚɥɟɪɢɣ Ƚɟɧɧɚɞɶɟɜɢɱ,
Ⱥɪɬɟɦɨɜ Ɇɢɯɚɢɥ Ⱥɧɚɬɨɥɶɟɜɢɱ
ɂɡɞɚɬɟɥɶɫɤɨ-ɩɨɥɢɝɪɚɮɢɱɟɫɤɢɣ ɰɟɧɬɪ
ȼɨɪɨɧɟɠɫɤɨɝɨ ɝɨɫɭɞɚɪɫɬɜɟɧɧɨɝɨ ɭɧɢɜɟɪɫɢɬɟɬɚ.
394000, ɝ. ȼɨɪɨɧɟɠ, ɩɥ. ɢɦ. Ʌɟɧɢɧɚ, 10. Ɍɟɥ. 208-298, 598-026 (ɮɚɤɫ)
http://www.ppc.vsu.ru; e-mail: pp_center@typ.vsu.ru
58