На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Панель и несколко кнопок
    Люди помогите.
    Надо создать компонент который состоит из панели и нескольких кнопок (действия кнопок статичны и прописаны програмно).
    Скажите хотябы основные моменты.
    Заранее спасибо.
      Чем тулбары не устраивают?
        В смысле чтоб на компоненте сразу были кнопки. (кинул ккомпонент на форму и все готово)
          TFrame
            Смысл в написание компонента !
            От чего лучше брать наследование и как кнопку туда закинуть и как её запраграмировать ?
            Сообщение отредактировано: PIKSEL_IT -
              Вы экшены наделайте, и от гуи не зависят, можно кнопки делать какие угодно.
                Ась ... Я какбы тольку учусь.
                Сообщение отредактировано: PIKSEL_IT -
                  Цитата PIKSEL_IT @
                  Смысл в написание компонента !

                  пишешь компонент ради написания компонента?

                  Цитата PIKSEL_IT @
                  От чего лучше брать наследование

                  а ты посмотри как TPanel например реализована

                  Цитата PIKSEL_IT @
                  и как её запраграмировать ?

                  руками читая книги
                    Для начала !
                    1. Унаследуйтесь от TPanel
                    ExpandedWrap disabled
                      TButtonPanel = class(TPanel)

                    2. Заведите поля типа кнопок
                    ExpandedWrap disabled
                      FButton1: TButton;

                    3. Заведите обработчики событий
                    ExpandedWrap disabled
                      procedure DoButtonClick(Sender: TObject);

                    4. В конструкторе создайте эти кнопки
                    ExpandedWrap disabled
                      constructor TButtonPanel.Create(AOwner: TComponent);
                      begin
                        inherited Create(AOwner); // вызываем унаследованый конструктор
                        FButton1 := TButton.Create(self); // создаём кнопку
                        FButton1.ObClick := DoButtonClick; // назначаем ей обработчик события
                        FButton.Parent := self; // указываем где она должна появится
                      end;

                    5. В деструкторе уничтожьте эти кнопки
                    ExpandedWrap disabled
                      destructor TButtonPanel.Destroy;
                      begin
                        FButton1.Free;
                        inherited Destroy;
                      end;


                    Совет: лучше всего создавать контролы тогда, когда создано основное окно (CreateWnd), поскольку наследники TControl зачастую жить не могут без окна.
                      DimaBr Спасибо.
                      А можно подробней:
                      Цитата DimaBr @
                      Совет: лучше всего создавать контролы тогда, когда создано основное окно (CreateWnd), поскольку наследники TControl зачастую жить не могут без окна.
                        Контролы (наследники TControl, а не TWinControl - TSpeedButton, TImage, TLabel и т.д.) по природе своей не существуют. О них операционка не подозревает. Своё пространство для рисования им предоставляют оконые компоненты, так же и диспечерезацию возникающих событий.
                        Для того чтобы себя на чём-то нарисовать, нужно чтобы родитель обладал собственной канвой, а она появляется после создания родительского окна.
                        Вот по этому и появляется присловутая ошибка Control ... has no parent window

                        Вот простой типичный пример
                        ExpandedWrap disabled
                          constructor TMyLabel.Create(AOwner: TComponent);
                          var W: integer;
                          begin
                            inherited;
                            W := Canvas.TextWidth('Test'); // вот тут доступа к Canvas ещё нет, поскольку не назначен Parent и следовательно не извесно на чём рисовать
                          end;
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0294 ]   [ 16 queries used ]   [ Generated: 3.05.24, 10:14 GMT ]