由于就VCL而言,TTabSheets不是表单的父级(不想使用动态RTL和其他语言的插件),我必须手动处理调整大小.我这样做如下:
var
ChildHandle : DWORD;
begin
If Assigned(pcMain.ActivePage) Then
begin
ChildHandle := FindWindowEx(pcMain.ActivePage.Handle, 0, 'TfrmPluginForm', nil);
If ChildHandle > 0 Then
begin
SetWindowPos(ChildHandle, 0, 0, 0, pcMain.ActivePage.Width, pcMain.ActivePage.Height, SWP_NOZORDER + SWP_NOACTIVATE + SWP_NOCOPYBITS);
end;
end;
Run Code Online (Sandbox Code Playgroud)现在,我的问题是当应用程序调整大小时,TGroupBox中的所有TGroupBox和TLabel都会闪烁.不在TGroupboxes内的TLabel很好,不会闪烁.
我试过的事情:
有任何想法吗?
我正在使用Delphi 2009设计一个表单,我试图弄清楚TPageControl元素.我试图为每个标签创建单独的对话框.我可以制作TTabSheets,我可以将我的元素放在TabSheets上,但我的问题是它们是大麦可见的,因为TTabSheet的默认背景看起来是白色的.我试图在TabSheet上放置一个面板,但无论出于何种原因,面板总是出现在TabSheet后面.所以我的问题是:有没有办法将标签页的颜色更改为标准窗口米色,还是他们可以在标签页上放置TPanel,实现相同的目标?
我正在研究一个由页面控件组成的模块.默认情况下,此页面控件(TPageControl
)不应该有任何选项卡表(TTabSheet
),但在初始化时,它应该动态插入这些页面并在其中嵌入一个表单.
问题在于知道如何将标签页插入页面控件.我该如何创建呢?一旦它被创建,以及每个窗体内的表单,我如何迭代它们来销毁表单?
如何实现像Firefox这样的TPageControl的TTabsheet的关闭按钮?
编辑:
Delphi版本:Delphi 2010
操作系统:Windows XP及更高版本
在Delphi 2009中,我发现PageControl的闪烁 - 在调整表单大小期间发生 - 可以通过将其DoubleBuffered
属性设置为true 来减少.
但是,如果我向PageControl标签页添加控件,它们将闪烁,无论其DoubleBuffered属性设置如何.我也试过启用和不启用运行时主题.
我使用的是的PageControl组件,我需要添加一个按钮,点击它去到指定的页面.
我该怎么办?
我有一个VCL表格,上面有五个标签TPageControl
.每个TTabSheet
内容都是相当无关的,并且有很多单独的控件和处理逻辑...所以我想要分解它,这样就可以更容易地处理"只是那个选项卡"的代码.像一条线
//-------------------------- begin rules tab methods -------------------
Run Code Online (Sandbox Code Playgroud)
只是不再削减它了.真的,我想我想以某种方式将每个标签放在一个单独的文件中.
目前我正在考虑为每个TTabPage创建一个VCL框架.如果我这样做,我需要将所有帧加载到构造函数中的TPageControl中,或者显示选项卡时.
这是一个好方法吗?为每个标签制作一个完整的TForm会更好吗?我应该继续将选项卡包装在TPageControl中,还是应该在动态加载内容时将其更改为TTabControl?如果这是一个好方法,最好在启动时加载所有选项卡,还是每次显示选项卡?(也许是优点/缺点,如果不是完全明显哪个在大多数/所有情况下都更好)
我遇到了一个表现出一些奇怪行为的TPageControl.
控件有3页,但是当我这样做
for I:=0 to PageControl.PageCount-1 do begin
PageControl.Pages[I].TabVisible := False;
PageControl.Pages[I].Visible := Ord(iColorScale.GenerationMode) = I;
end;
Run Code Online (Sandbox Code Playgroud)
执行循环的第一次迭代的第一行时,我得到一个'List index out of bounds(3)'错误
PageControl.Pages[0].TabVisible := False;
Run Code Online (Sandbox Code Playgroud)
现在,当我在调试器中查看PageControl属性时,一切似乎都是有序的.PageCount预计为3,我可以在评估器中看到所有页面及其属性,包括第0页的TabVisible
我在Windows 7机器上使用Delphi XE ..有谁知道发生了什么?我不知所措.
美好的一天!
我需要在TPageControl中更改某些TabSheet的标题的文本颜色.照片上有这样的东西
我知道如何使用OnDrawTab完成.但如果我启用了OwnerDraw,Windows XP Theme的装饰就会消失.这就是为什么我尝试手动绘制这个装饰.这就是我试图这样做的方式:
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
FRect: TRect;
Text: string;
begin
FRect := Control.TabRect(TabIndex);
if Active then
ThemeServices.DrawElement(Control.Canvas.Handle, ThemeServices.GetElementDetails(ttTabItemHot), FRect)
else
ThemeServices.DrawElement(Control.Canvas.Handle, ThemeServices.GetElementDetails(ttTabItemNormal), FRect);
Text := PageControl1.Pages[TabIndex].Caption;
Control.Canvas.Brush.Style := bsClear;
if not Active then
FRect.Top := FRect.Top + 4;
DrawText(Control.Canvas.Handle, PChar(Text), Length(Text), FRect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
end;
Run Code Online (Sandbox Code Playgroud)
我得到了这个
(左 - OwnerDraw版本,右 - 默认绘制)
正如您所看到的,TabSheets有一些不透支的边框.我不能透支这个边界.
如何正确绘制选项卡的背景(如右侧的PageControl)?
我想知道如何隐藏 PageControl 组件中 TabSheets 的标题。我想创建一个创建者,例如建立你的冠军,你可以在页面上选择一些东西。TabSheets 将由计时器每 10 秒更改一次。在Google中我只能找到如何隐藏TabSheet(带有内容)。我只想隐藏 TabSheets 的标题,例如TabSheet1 等。我在 C++ Builder 中工作。问候,
tpagecontrol ×10
delphi ×9
vcl ×3
delphi-xe ×2
flicker ×2
c++ ×1
c++builder ×1
delphi-2009 ×1
groupbox ×1