Конференция "Компоненты" » Компонент, содержащий фреймы.
 
  • atruhin © (04.11.08 17:52) [20]
    > Как их собрать в компонент и создавать из него?

    Тебе уже сказали - писать эксперт. Только если делать, то во вкладки вставлять не фрэймы,
    а формы. Т.к. с фреймами есть глюки, по крайней мере от d7 до rad studio 2007 включительно.
    Вообще давно использую такой подход, только не понимаю, зачем тут эксперт.
    Один раз написал CustomXXX форму, которая встраивается в TCustomWindow, включил в проект,
    далее File-New-Other-Inheritable Items, выбираем форму, задаем имя, и добавляем одну строку в
    OnCreate. Получаем на 1-2 движения больше чем в твоем варианте.
  • Kolan © (05.11.08 12:53) [21]
    А что значит «встраивается»? И что такое TCustomWindow?
  • atruhin © (05.11.08 15:05) [22]
    > А что значит «встраивается»?

    Т.е. визуально и функционально ведет себя как и фрэйм.
    >И что такое TCustomWindow?

    Имел ввиду наследника TWinControl.
  • Kolan © (05.11.08 15:49) [23]
    > Т.е. визуально и функционально ведет себя как и фрэйм.

    А как это сделат — вот что я не понял...

    Есть у меня форма, на которой я хочу создавать «страницы». Создаю новую форму, называю ее CustomXXX. Что делать дальше?
  • atruhin © (06.11.08 17:49) [24]
    Вообще это хорошо описанно у Стива Тейксейра, Ксавье Пачеко - Delphi 5 Руководство разработчика, но смотри:

    unit untCustomWindow;

    interface

    uses
     Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

    type
     TCustomWindow = class(TForm)
     private
       FAsChild : Boolean;
       FTempParent : TWinControl;
     protected
       procedure CreateParams (var Params : TCreateParams); override;
       procedure Loaded; override;
     public
       constructor Create (AOwner : TComponent;
                           AParent : TWinControl); reintroduce;
     end;

    implementation

    {$R *.dfm}

    constructor TCustomWindow.Create (AOwner : TComponent; AParent : TWinControl);
    begin
     FAsChild := true;
     FTempParent := AParent;
     inherited Create (AOwner);
    end;

    procedure TCustomWindow.CreateParams (var Params : TCreateParams);
    begin
     inherited;
     if FAsChild then
       Params.Style := Params.Style or WS_CHILD;
    end;

    procedure TCustomWindow.Loaded;
    begin
     inherited;
     if FAsChild then begin
       Align := alClient;
       BorderStyle := bsNone;
       BorderIcons := [];
       Parent := FTempParent;
       Position := poDefault;
     end;
    end;

    end.


    Включаем этот модуль в проект.
    Теперь когда тебе нужно создать новую форму (для вкладки), ты выбираешь File-New-Other-Inheritable Items,
    это в Delphi 2007, в старых, создаешь просто создаешь новую форму (например TMyWindow), и правиш:
    1. в pas файле, TMyWindow = class(TForm) -->>> TMyWindow = class(TCustomWindow)
    2. в dfm файле object MyWindow : TMyWindow ->>> inherited MyWindow : TMyWindow

    Далее там где нужен PageControl, кидаем его на форму, создаем вкладки, и в OnCreate формы пишем
    TMyWindow.Create(self, MyTabSheet);



    ВСЕ!! Получаем форму встроенную в MyTabSheet, аналогично фрэйму, но без его глюков.
  • alexrayne (30.09.09 17:34) [25]
    Удалено модератором
 
Конференция "Компоненты" » Компонент, содержащий фреймы.
Есть новые Нет новых   [134466   +3][b:0][p:0.001]