"justify"> ЦельРекомендуемие классиІзменіть існуючий компонентЛюбой існуючий компонент (наприклад, TButton або TListBox) або клас TCustomXXXX (наприклад, TCustomListBox) Створити віконний компонентTWinControl або TCustomControlСоздать графічний компонентTGraphicControlСоздать підклас для елемента управленіяЛюбой компонент WindowsСоздать Невізуальний компонентTComponent Можна також успадковувати класи, які не є компонентами і не можуть бути поміщені на форму (наприклад, TRegIniFile і TFont). У цьому випадку ви повинні додати в клас властивості, що дозволяють йому взаємодіяти з середовищем Delphi на етапі розробки програми, тому що тільки за цієї умови новостворений клас буде компонентним класом. Взагалі, вдалий вибір батьківського класу в значній мірі спрощує проблему створення нового компонента. Пам'ятайте чудовий девіз корпорації Borland: "Не потрібно винаходити велосипед - просто наслідуйте його!".
Зміна існуючих компонентів
Найпростіший спосіб створити компонент - змінити вже існуючий. При цьому в якості батьківського класу найчастіше використовується відповідний компонентний клас або клас TCustomXXXX. Як вже зазначалося в розділі 3, класи TCustomXXXX реалізують основну функціональність відповідних компонентів, але не публікують багато їх властивості і події. Успадковувати від таких класів краще тоді, коли новий компонент повинен відрізнятися від свого попередника набором властивостей і подій. Нехай, наприклад, створюється простий компонент для відображення поточного системного часу. Для виведення текстових повідомлень добре підходить мітка TLabel. Однак вона має властивість Caption, яке для наших цілей публікувати не можна (це властивість у новому компоненті призначене тільки для виведення системного часу). Вихід з положення - успадковувати новий компонент від класу TCustomLabel і залишити властивість Caption в секції protected (саме в цій секції властивість Caption оголошується в класі TCustomLabel). Тоді в самому компоненті можна звертатися до цієї властивості, але ні в спадкоємців компонента, ні в працюючій програмі цього зробити не можна. p align="justify"> Простий компонент для відображення на формі системного часу. p align="justify"> Він ілюструє два моменти:
) Приховування властивостей, які суперечать функціональності компонента. p align="justify">) Використання в компоненті вже існуючого компонента. ================================================== =================} interfaceSysUtils, Classes, Controls, StdCtrls, ExtCtrls; type TFarClock = class (TCustomLabel) private {Private declarations} FTimer: TTimer; protected {Protected declarations} procedure UpdateClock (Sender: TObject); public {Public declarations} constructor Create (AOwner: TComponent); override; published {Published declarations} property Align;// property Caption; Чи не публікуємо це властивість! // Чи не публікуємо також кілька інших властив...