Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.143.239] |
|
Сообщ.
#1
,
|
|
|
Люди помогите.
Надо создать компонент который состоит из панели и нескольких кнопок (действия кнопок статичны и прописаны програмно). Скажите хотябы основные моменты. Заранее спасибо. |
Сообщ.
#2
,
|
|
|
Чем тулбары не устраивают?
|
Сообщ.
#3
,
|
|
|
В смысле чтоб на компоненте сразу были кнопки. (кинул ккомпонент на форму и все готово)
|
Сообщ.
#4
,
|
|
|
TFrame
|
Сообщ.
#5
,
|
|
|
Смысл в написание компонента !
От чего лучше брать наследование и как кнопку туда закинуть и как её запраграмировать ? |
Сообщ.
#6
,
|
|
|
Вы экшены наделайте, и от гуи не зависят, можно кнопки делать какие угодно.
|
Сообщ.
#7
,
|
|
|
Ась ... Я какбы тольку учусь.
|
Сообщ.
#8
,
|
|
|
Цитата PIKSEL_IT @ Смысл в написание компонента ! пишешь компонент ради написания компонента? Цитата PIKSEL_IT @ От чего лучше брать наследование а ты посмотри как TPanel например реализована Цитата PIKSEL_IT @ и как её запраграмировать ? руками читая книги |
Сообщ.
#9
,
|
|
|
Для начала !
1. Унаследуйтесь от TPanel TButtonPanel = class(TPanel) 2. Заведите поля типа кнопок FButton1: TButton; 3. Заведите обработчики событий procedure DoButtonClick(Sender: TObject); 4. В конструкторе создайте эти кнопки constructor TButtonPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); // вызываем унаследованый конструктор FButton1 := TButton.Create(self); // создаём кнопку FButton1.ObClick := DoButtonClick; // назначаем ей обработчик события FButton.Parent := self; // указываем где она должна появится end; 5. В деструкторе уничтожьте эти кнопки destructor TButtonPanel.Destroy; begin FButton1.Free; inherited Destroy; end; Совет: лучше всего создавать контролы тогда, когда создано основное окно (CreateWnd), поскольку наследники TControl зачастую жить не могут без окна. |
Сообщ.
#10
,
|
|
|
DimaBr Спасибо.
А можно подробней: Цитата DimaBr @ Совет: лучше всего создавать контролы тогда, когда создано основное окно (CreateWnd), поскольку наследники TControl зачастую жить не могут без окна. |
Сообщ.
#11
,
|
|
|
Контролы (наследники TControl, а не TWinControl - TSpeedButton, TImage, TLabel и т.д.) по природе своей не существуют. О них операционка не подозревает. Своё пространство для рисования им предоставляют оконые компоненты, так же и диспечерезацию возникающих событий.
Для того чтобы себя на чём-то нарисовать, нужно чтобы родитель обладал собственной канвой, а она появляется после создания родительского окна. Вот по этому и появляется присловутая ошибка Control ... has no parent window Вот простой типичный пример constructor TMyLabel.Create(AOwner: TComponent); var W: integer; begin inherited; W := Canvas.TextWidth('Test'); // вот тут доступа к Canvas ещё нет, поскольку не назначен Parent и следовательно не извесно на чём рисовать end; |