-
Помогите плиз. Как сделать кнопки переключения межу 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]
-
> Вот это внимательно читал ?
Читал, изучал. Только для России это не препятствие.
А если уж хочется всё делать законно, то нужно просто купить этот компонент (входит в пакет, стоимость которого около $5000, упрощённая модификация - $50-100)
PS: можно и на форумах всех пересажать за то, что выкладывают в ответ на вопросы куски кода, авторы которых не указаны явно. Кто знает, чьё авторское право они нарушают?
Теперь, как всегда напоследок, главная мысль:
"Не может быть использована полностью (частично)?"
А зачем всё слизывать вподчистую? Может быть, имеет смысл изучить код и на его основе написать свой вариант?!
-
TIF © (15.05.08 17:41) [20]
> Только для России это не препятствие.
Это иллюзия.
> PS: можно и на форумах всех пересажать за то, что выкладывают > в ответ на вопросы куски кода, авторы которых не указаны > явно. Кто знает, чьё авторское право они нарушают?
тебя можно не сажать, тебя достаточно просто забанить
-
> тебя можно не сажать, тебя достаточно просто забанить
Кто ж это сказал, "всех не пересажаете"? Это вроде из "Матери" Горького или я опять что-то путаю... Так вот, "всех не забаните" :) Это нереально
Ну, это право я оставлю российскому законодательству и госдуме. Решайте сами
И всё-таки, на основе изучения этого кода можно написать небольшую процедурку, которая будет убирать 3д-рамки. Кому это реально надо, тот потрудится и сделает это Мне - не надо. В висте, например, этих рамок и так нет :-)
-
>[22] TIF © (2008-05-15 18:00:00) тебе и мозг не нужен — всё равно ты не знаешь, что с ним делать.
--- Understanding is not required. Only obedience.
-
> всё равно ты не знаешь, что с ним делать.
составлять из букв слова? :)
А вот принципом: подсмотрел - сделал как там (почти как там) пользоваться нужно. И волки сыты, и овцы целы. Вот для этого мозг надо
Повторюсь: меня эти рамки не интересуют, ибо проще взять готовый компонент
-
> А вот принципом: подсмотрел - сделал как там (почти как > там) пользоваться нужно. И волки сыты, и овцы целы. Вот > для этого мозг надо
Для этого не надо.
-
> Для этого не надо.
Слово почти предполагает не тупое списывание, а разбор алгоритма, по пунктам, распознавание слабых мест и лишних операций, реструктцризацию кода и его полное воссоздание с нуля на основе собственного опыта и полученных из представленного примера знаний
Не знаю, как вы, но я при необходимости включить в программу новую незнакомую функцию разбираю её от и до, полностью переписываю. Начиная от простого переименовывания переменных и оформления кода и заканчивания внедрением новых операций/удаления лишних и ненужных и объединения некоторых строк, потому что часто сложные операции разбиваются на несколько простых
Так что надо. Ну, а если списывааааать - то нет...
-
Все это и есть - "тупое списывание"
-
>Игорь Шевченко ©
сдается мне, все рисовать самому нуна :)
-
Palladin © (15.05.08 21:47) [28]
Увы. На уровне TabControl'а я сделал то, чего хотел, а хотелось бы PageControl - у TabControl'а TabSheet-ов нету, а управлять видимостью фреймов при переходе с вкладки на вкладку как-то тоже не очень кузяво.
Придется делать оценку стоимости, что быстрее :)
-
> управлять видимостью фреймов
А PageControl для этого почему не подходит? т.е. управлять видимостью его TabSheet-ов.
-
> На уровне TabControl'а я сделал то, чего хотел
если видимость фреймов некузяво почему бы не решить составным? берем TTabControl и TPageControl, с кастрированными табами (и бордюром по желанию) и просто переключать страницы на нем?
или, тоже, не кузяво?
-
|