Конференция "Компоненты" » Нужен PageControl, который в RunTime прячет вкладки и границы [D7, WinXP]
 
  • TheEd (27.11.07 00:44) [0]
    господа мастера, не раз приходилось задумываться о необходимости компонента (см. subj), очень он удобен был бы для программирования меняющихся наборов элементов управления, напр. в мастерах.

    Скрыть вкладки не проблема:
    for i := 0 to SomePageControl.PageCount - 1 do
    SomePageControl.Pages[i].TabVisible := false;


    3D границы тоже убрать можно, если сделать:
    pc.Style := tsButtons; // или tsFlatButtons


    но как убрать поля в несколько пикселов, которые остаются по краям PageControl'а???
  • TheEd (27.11.07 02:46) [1]
    Спасибо, справился!!!

    Кому понадобится, ловите:
    unit MyPageControl;
    interface
    uses
     SysUtils, Classes, Controls, ComCtrls, Types;

    type
     TMyPageControl = class(TPageControl)
     private
       FHideTabs: boolean;
       procedure SetHideTabs(const Value: boolean);
       { Private declarations }
     protected
       procedure AdjustClientRect(var Rect: TRect); override;
     public
       { Public declarations }
       constructor Create(AOwner: TComponent); override;
     published
       { Published declarations }
       property HideTabs : boolean read FHideTabs write SetHideTabs default false;
       property Color;
       property ParentColor;
     end;

    procedure Register;

    implementation
    procedure Register;
    begin
     RegisterComponents('MyComponents', [TMyPageControl]);
    end;

    { TMyPageControl }

    procedure TMyPageControl.AdjustClientRect(var Rect: TRect);
    begin
     inherited;
     if HideTabs and not (csDesigning in ComponentState) then
       begin
         Rect.Top := 0;
         Rect.Left := 0;
         Rect.Right := Width;
         Rect.Bottom := Height;  
       end;

    end;

    constructor TMyPageControl.Create(AOwner: TComponent);
    begin
     inherited;
     FHideTabs := false;
    end;

    procedure TMyPageControl.SetHideTabs(const Value: boolean);
    begin
     if FHideTabs = Value
       then exit;
     FHideTabs := Value;
     Invalidate;
    end;

    end.

  • Olegz77 (27.11.07 15:14) [2]
    А для мастеров не проще использовать компонент TNotebook ?
  • Виктор007 (03.12.07 20:22) [3]
    Я делал так:

    У PageControl свойство Style поставить в tsFlatButtons (поставить нужно в Design time). Далее в рантайме:

    for i:=0 to PageControl1.PageCount -1 do
       begin
       PageControl1.Pages[i].TabVisible := false;
       end;

 
Конференция "Компоненты" » Нужен PageControl, который в RunTime прячет вкладки и границы [D7, WinXP]
Есть новые Нет новых   [119228   +48][b:0][p:0.001]