• 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]
  • TIF © (15.05.08 17:41) [20]

    > Вот это внимательно читал ?


    Читал, изучал. Только для России это не препятствие.

    А если уж хочется всё делать законно, то нужно просто купить этот компонент (входит в пакет, стоимость которого около $5000, упрощённая модификация - $50-100)

    PS: можно и на форумах всех пересажать за то, что выкладывают в ответ на вопросы куски кода, авторы которых не указаны явно. Кто знает, чьё авторское право они нарушают?

    Теперь, как всегда напоследок, главная мысль:

    "Не может быть использована полностью (частично)?"

    А зачем всё слизывать вподчистую? Может быть, имеет смысл изучить код и на его основе написать свой вариант?!
  • Игорь Шевченко © (15.05.08 17:50) [21]
    TIF ©   (15.05.08 17:41) [20]


    > Только для России это не препятствие.


    Это иллюзия.


    > PS: можно и на форумах всех пересажать за то, что выкладывают
    > в ответ на вопросы куски кода, авторы которых не указаны
    > явно. Кто знает, чьё авторское право они нарушают?


    тебя можно не сажать, тебя достаточно просто забанить
  • TIF © (15.05.08 18:00) [22]

    > тебя можно не сажать, тебя достаточно просто забанить


    Кто ж это сказал, "всех не пересажаете"? Это вроде из "Матери" Горького или я опять что-то путаю...
    Так вот, "всех не забаните" :) Это нереально

    Ну, это право я оставлю российскому законодательству и госдуме. Решайте сами

    И всё-таки, на основе изучения этого кода можно написать небольшую процедурку, которая будет убирать 3д-рамки. Кому это реально надо, тот потрудится и сделает это
    Мне - не надо. В висте, например, этих рамок и так нет :-)
  • ketmar © (15.05.08 19:09) [23]
    >[22] TIF © (2008-05-15 18:00:00)
    тебе и мозг не нужен — всё равно ты не знаешь, что с ним делать.

    ---
    Understanding is not required. Only obedience.
  • TIF © (15.05.08 20:24) [24]

    > всё равно ты не знаешь, что с ним делать.


    составлять из букв слова? :)

    А вот принципом: подсмотрел - сделал как там (почти как там) пользоваться нужно. И волки сыты, и овцы целы. Вот для этого мозг надо

    Повторюсь: меня эти рамки не интересуют, ибо проще взять готовый компонент
  • silver © (15.05.08 20:28) [25]

    > А вот принципом: подсмотрел - сделал как там (почти как
    > там) пользоваться нужно. И волки сыты, и овцы целы. Вот
    > для этого мозг надо


    Для этого не надо.
  • TIF © (15.05.08 20:44) [26]

    > Для этого не надо.


    Слово почти предполагает не тупое списывание, а разбор алгоритма, по пунктам, распознавание слабых мест и лишних операций, реструктцризацию кода и его полное воссоздание с нуля на основе собственного опыта и полученных из представленного примера знаний

    Не знаю, как вы, но я при необходимости включить в программу новую незнакомую функцию разбираю её от и до, полностью переписываю. Начиная от простого переименовывания переменных и оформления кода и заканчивания внедрением новых операций/удаления лишних и ненужных и объединения некоторых строк, потому что часто сложные операции разбиваются на несколько простых

    Так что надо. Ну, а если списывааааать - то нет...
  • silver © (15.05.08 21:01) [27]
    Все это и есть - "тупое списывание"
  • Palladin © (15.05.08 21:47) [28]

    >Игорь Шевченко ©

    сдается мне, все рисовать самому нуна :)
  • Игорь Шевченко © (15.05.08 21:54) [29]
    Palladin ©   (15.05.08 21:47) [28]

    Увы. На уровне TabControl'а я сделал то, чего хотел, а хотелось бы PageControl - у TabControl'а TabSheet-ов нету, а управлять видимостью фреймов при переходе с вкладки на вкладку как-то тоже не очень кузяво.

    Придется делать оценку стоимости, что быстрее :)
  • b z (15.05.08 22:00) [30]

    > управлять видимостью фреймов

    А PageControl для этого почему не подходит? т.е. управлять видимостью его TabSheet-ов.
  • Palladin © (15.05.08 22:03) [31]

    > На уровне TabControl'а я сделал то, чего хотел

    если видимость фреймов некузяво почему бы не решить составным? берем TTabControl и TPageControl, с кастрированными табами (и бордюром по желанию) и просто переключать страницы на нем?

    или, тоже, не кузяво?
  • Игорь Шевченко © (15.05.08 22:24) [32]
    Palladin ©   (15.05.08 22:03) [31]

    Куда бы фотку положить, чего я хочу...

    http://picasaweb.google.com/ISchevchenko/MoneyScreenshots/photo#5200671843024341890

    Вот там как раз то, чего я хочу добиться. В смысле, такого же PageControl-а по виду
Есть новые Нет новых   [134435   +11][b:0][p:0.002]