Конференция "Компоненты" » Можно ли подменить у TPageControl'а TTabSheet на свой?
 
  • Kolan © (17.04.07 11:46) [0]
    И как?
    — Мне всего-то надо 2 сва-ва добавить и 1 поле…

    Намучался я с этими компонентами. Если нельзя, то может имеет смысл скопировать TPageControl и TTabSheet целиком, изменить им имя, подправить и все?
  • DimaBr © (17.04.07 12:13) [1]
    Добавить можно, например так


    type
    TTabSheet = class(ComCtrls.TTabSheet)
     property Трали-вали
    end;
    TForm1 = class(TForm)
       PageControl1: TPageControl;
       TabSheet1: TTabSheet;
    end;

  • DimaBr © (17.04.07 12:14) [2]
    Вижу, идея с написанием собственного контрола угасла :(((
  • Kolan © (17.04.07 12:18) [3]
    > Вижу, идея с написанием собственного контрола угасла :(((

    Угу :(

    Добавить можно, например так
    Не ну мне нужно чтобы в дизан тайме видно было.
    А где создются эти TTabSheet?

    ЗЫ
     Здрасти :)
  • DimaBr © (17.04.07 12:20) [4]
    Здорово, коль не шутишь.

    Зачем в дизайнере ?? неужеле в Run-Time нельзя присвоить ?
  • Kolan © (17.04.07 12:23) [5]
    > Здорово, коль не шутишь.

    Не шучу :)

    > неужеле в Run-Time нельзя присвоить ?

    Ну нет конечно, из-за этого все мучения. Мне надо добавить обработчик TNotifyEvent. И чтобы в дизайнере виден был.
  • Kolan © (17.04.07 12:27) [6]
    > Мне надо добавить обработчик TNotifyEvent.

    Неужели я из-за этого должен переписать весь TPageControl снуля :(…
  • Kolan © (17.04.07 13:01) [7]
    Гы попытался сккопировать TPageControl. Все ок — почти все:
    function TPageControl.GetImageIndex(TabIndex: Integer): Integer;
    var
     I,
     Visible,
     NotVisible: Integer;
    begin
     if Assigned(FOnGetImageIndex) then
       Result := inherited GetImageIndex(TabIndex) else
       begin



    А FOnGetImageIndex в предке, в  private секции ессно… — грустно :(
  • DimaBr © (17.04.07 15:01) [8]

    > > неужеле в Run-Time нельзя присвоить ?
    >
    > Ну нет конечно, из-за этого все мучения

    Этого не может быть.


    TTabSheet = class(ComCtrls.TTabSheet)
    property OnMyEvent: TNotifiEvent read fOnMyEvent write fOnMyEvent;
    end;

    TForm1 = class(TForm)
      PageControl1: TPageControl;
      TabSheet1: TTabSheet;
      procedure DoMyEvent(Sender: TObject);
    end;

    procedure TMyForm.CreateForm(Sender: TObject);
    begin
     TabSheet1.OnMyEvent := DoMyEvent;
    end;

  • Kolan © (17.04.07 15:20) [9]
    >
    > Этого не может быть.
    >Ну нет конечно, из-за этого все мучения.

    Иеетя ввиду не точ то вообще нельзя, просто мне нужно рабта в дизайнере…
  • DimaBr © (17.04.07 15:48) [10]
    Тогда можно сделать так

    unit MyTabSheet;

    interface
    uses Classes,ComCtrls;

    type
    TMyTabSheet = class(TTabSheet)
     private
       fTest: integer;
     published
       property Test: integer read fTest write fTest;
    end;

    procedure Register;
    implementation
    procedure Register;
    begin
     RegisterComponents('Standard',[TMyTabSheet]);
    end;

    end.



    И вручную изменить в модуле и DFM TTabSheet на TMyTabSheet.

    unit Unit1;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, ComCtrls, StdCtrls,
     MyTabSheet;

    type
     TForm1 = class(TForm)
       PageControl1: TPageControl;
       TabSheet1: TMyTabSheet;
       TabSheet2: TMyTabSheet;
       Button1: TButton;
     private
       { Private declarations }
     public
       { Public declarations }
     end;



    Илиже зарегистрировать для TPageContol новый редактор, который будкт добавлять TMyTabSheet вместо TTabSheet. Если нигде в коде нет проверки на тип TTabSheet (if Тратата.ClassType = TTabSheet), то должно работать.
 
Конференция "Компоненты" » Можно ли подменить у TPageControl'а TTabSheet на свой?
Есть новые Нет новых   [134430   +1][b:0][p:0.001]