-
Помогите плиз. Как сделать кнопки переключения межу Tabsheet, чтобы закладок видно не было, а при нажатии кнопки "Далее" и "Назад" происходил переход между страницами.
-
TTabSheet.TabVisible, TPageControl.Pages + F1
-
TPageControl.ActivePageIndex TTabSheet.TabVisible
+
F1
-
может кто еще подскажет, как легко и просто убрать 3-D эффекты с закладок и с самого PageControl ? :)
-
:) хе... 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); так? :)
-
-
> Не, не так. Чтобы вкладки были видны, но плоские
И штобы сам PC плоским можно было зделоть. Да, это проблема...
-
TMS вам в помощь
-
Ega23 © (15.05.08 16:11) [6]
Сколько не рылся, не нашел примеров. Как саму рамку убрать, нашел, а вкладки, видно, только рисованием. Причем эта зараза после вызова OnDrawTab 3D-эффекты сама рисует. Хочется быстрого решения, желательно не в 1000 строк кода:) Ну и разумеется, без сторонних компонент
-
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
-
TIF © (15.05.08 16:33) [9]
К чему этот неформатированный поток сознания ?
-
> К чему этот неформатированный поток сознания ?
к этому
> Сколько не рылся, не нашел примеров.
Без обид
-
TIF © (15.05.08 16:41) [11]
Ты явно не понимаешь. Было сказано, что без сторонних компонентов, без упертых где-то исходников, и т.д. Или исходники того, откуда ты выдрал кусок, лежат где-то в общеизвестном свободном доступе ? Тогда ссылочку.
-
> Было сказано, что без сторонних компонентов, без упертых > где-то исходников
Ну, хоть это и сторонний компонент, но в нём используется способ удаления 3д-рамок! А это и является интересной вещью > Или исходники того, откуда ты выдрал кусок, лежат где-то > в общеизвестном свободном доступе ? Тогда ссылочку.
Уже да ;) http://www.infodelphi.narod.ru/advpagecontrol.pas
-
PageControl1.SelectNextPage(true) - вперед PageControl1.SelectNextPage(false) - назад
-
"No parts of the source code can be included in any other component or application without written authorization of the author."
Вот это внимательно читал ?
-
А чем не подходит TPageControl.Style := tsFlatButtons ?
-
> tormoz (15.05.08 17:24) [16]
наверное тем, что это не то что нужно...
-
tormoz (15.05.08 17:24) [16]
Тем, что не получается такой картинки, как в [5]
-
Ничего не могу умнее придумать кроме того как рисовать все самому суть такая :)
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);
public
WndProc: tWndMethod;
procedure OnPageWndProc(var Msg: TMessage);
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]
|