Конференция "Прочее" » PageControl
 
  • Marij (15.05.08 15:34) [0]
    Помогите плиз.
    Как сделать кнопки переключения межу Tabsheet, чтобы закладок видно не было, а при нажатии кнопки "Далее" и "Назад" происходил переход между страницами.
  • Ega23 © (15.05.08 15:40) [1]
    TTabSheet.TabVisible, TPageControl.Pages + F1
  • Palladin © (15.05.08 15:40) [2]
    TPageControl.ActivePageIndex
    TTabSheet.TabVisible

    +

    F1
  • Игорь Шевченко © (15.05.08 15:42) [3]
    может кто еще подскажет, как легко и просто убрать 3-D эффекты с закладок и с самого PageControl ? :)
  • Palladin © (15.05.08 15:59) [4]
    :) хе...

    Var
    sbx,sby:Integer;
    p:TPanel;

    p:=TPanel.Create(PageControl.Owner);
    p.BevelOuter:=bvNone;
    p.Parent:=PageControl.Parent;
    p.BoundsRect:=PageControl.BoundsRect;
    PageControl.Parent:=p;
    sbx:=GetSystemMetrics(SM_CXEDGE)+GetSystemMetrics(SM_CXBORDER);
    sby:=GetSystemMetrics(SM_CYEDGE)+GetSystemMetrics(SM_CYBORDER);
    PageControl.SetBounds(-sbx,-sby,p.Width+sbx*2,p.Height+sby*2);



    так? :)
  • Игорь Шевченко © (15.05.08 16:07) [5]
    Palladin ©   (15.05.08 15:59) [4]

    Не, не так. Чтобы вкладки были видны, но плоские
    Нечто вроде такого:

    http://demos.devexpress.com/ASPxperienceDemos/TabControl/Features.aspx
  • Ega23 © (15.05.08 16:11) [6]

    > Не, не так. Чтобы вкладки были видны, но плоские


    И штобы сам PC плоским можно было зделоть.  
    Да, это проблема...
  • TIF © (15.05.08 16:13) [7]
    TMS вам в помощь
  • Игорь Шевченко © (15.05.08 16:15) [8]
    Ega23 ©   (15.05.08 16:11) [6]

    Сколько не рылся, не нашел примеров. Как саму рамку убрать, нашел, а вкладки, видно, только рисованием. Причем эта зараза после вызова OnDrawTab 3D-эффекты сама рисует.
    Хочется быстрого решения, желательно не в 1000 строк кода:) Ну и разумеется, без сторонних компонент
  • TIF © (15.05.08 16:33) [9]

     TAdvPageControl = class(TCustomTabControl)
     private
       FPages: TList;
       FActivePage: TAdvTabSheet;
       FNewDockSheet: TAdvTabSheet;
       FUndockingPage: TAdvTabSheet;

       FTabMargin: TTabMargin;

      . . .

       procedure SetTabSplitLine(Value: Boolean);
       procedure SetRoundEdges(Value: Boolean);

       procedure SetTabMargins;

       procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
       procedure WMPaint(var Message: TWMPaint); message WM_PAINT;

       . . .




    Вот тут-то и запрятано удаление 3D... TMSовцы ребята умные, но ранние версии их новых компонентов иногда глючат и тормозят :(

    Футы-нуты! Самое главное забыл:
    FTabBorder3D: Boolean;

    Вот это свойтсво и включает/отключает 3D рамки!

    procedure TAdvPageControl.SetTabBorder3D(Value: Boolean);
    var
     i: integer;
    begin
     if FTabBorder3D <> Value then
     begin
       FTabBorder3D := Value;
       if Value then
       begin
         inherited Images := FImages;
       end
       else
       begin
         inherited Images := FDummyImages;
       end;
       OwnerDraw := not TabBorder3D;

       for i := PageCount - 1 downto 0 do
       begin
         UpdateTab(Pages[I]);
       end;

       if not FTabBorder3D then
         UpdateTabForActiveFont(FActivePage);

       Invalidate;
     end;
    end;


    Ну, кто хочет копнуть глубже и подробно изучить принцип, ищите AdvPageControl.pas
  • Игорь Шевченко © (15.05.08 16:36) [10]
    TIF ©   (15.05.08 16:33) [9]

    К чему этот неформатированный поток сознания ?
  • TIF © (15.05.08 16:41) [11]

    > К чему этот неформатированный поток сознания ?


    к этому


    > Сколько не рылся, не нашел примеров.


    Без обид
  • Игорь Шевченко © (15.05.08 16:44) [12]
    TIF ©   (15.05.08 16:41) [11]

    Ты явно не понимаешь. Было сказано, что без сторонних компонентов, без упертых где-то исходников, и т.д.
    Или исходники того, откуда ты выдрал кусок, лежат где-то в общеизвестном свободном доступе ? Тогда ссылочку.
  • TIF © (15.05.08 17:09) [13]

    > Было сказано, что без сторонних компонентов, без упертых
    > где-то исходников


    Ну, хоть это и сторонний компонент, но в нём используется способ удаления 3д-рамок! А это и является интересной вещью


    > Или исходники того, откуда ты выдрал кусок, лежат где-то
    > в общеизвестном свободном доступе ? Тогда ссылочку.


    Уже да ;)

    http://www.infodelphi.narod.ru/advpagecontrol.pas
  • tormoz (15.05.08 17:21) [14]
    PageControl1.SelectNextPage(true)  - вперед
    PageControl1.SelectNextPage(false) - назад
  • Игорь Шевченко © (15.05.08 17:23) [15]
    "No parts of the source code can be included in any other component or application without written authorization of the author."

    Вот это внимательно читал ?
  • tormoz (15.05.08 17:24) [16]
    А чем не подходит
    TPageControl.Style := tsFlatButtons

    ?
  • Palladin © (15.05.08 17:26) [17]

    > tormoz   (15.05.08 17:24) [16]

    наверное тем, что это не то что нужно...
  • Игорь Шевченко © (15.05.08 17:26) [18]
    tormoz   (15.05.08 17:24) [16]

    Тем, что не получается такой картинки, как в [5]
  • Style © (15.05.08 17:38) [19]
    Ничего не могу умнее придумать кроме того как рисовать все самому

    суть такая :)



     TXWinControl = class (TWinControl);
     TForm1 = class(TForm)
       PageControl1: TPageControl;
       TabSheet1: TTabSheet;
       TabSheet2: TTabSheet;
       Button1: TButton;
       Button2: TButton;
       TabSheet3: TTabSheet;
       TabSheet4: TTabSheet;
       procedure Button1Click(Sender: TObject);
     private
       procedure CustomDraw(Msg: TMessage);
       { Private declarations }
     public
       WndProc: tWndMethod;
       procedure OnPageWndProc(var Msg: TMessage);
       { Public declarations }
     end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    TXWinControl(PageControl1).Color := clRed;
    WndProc := PageControl1.WindowProc;
    PageControl1.WindowProc := OnPageWndProc;
    TXWinControl(PageControl1).RecreateWnd;
    PageControl1.Repaint;
    end;

    procedure TForm1.CustomDraw(Msg: TMessage);
    var
     i: integer;
    begin
       for i := 0 to PageControl1.PageCount-1 do
       begin
         PageControl1.Canvas.Rectangle(PageControl1.TabRect(i));
         PageControl1.Pages[i].Repaint;
       end;
       Msg.Result := 1;
    end;

    procedure TForm1.OnPageWndProc(var Msg: TMessage);
    begin
     if (Msg.Msg = WM_NCPAINT ) or (Msg.Msg = WM_PAINT )then
     begin
       CustomDraw(Msg);
     end else
       WndProc(Msg);
    end;



    Только надо работать напильнегом чтобы получилось как [5]
 
Конференция "Прочее" » PageControl
Есть новые Нет новых   [134435   +8][b:0][p:0.002]