标签: tpagecontrol

TLabel和TGroupbox Captions在调整大小时闪烁

  • 所以,我有一个应用程序加载不同的插件,并在TPageControl上为每个插件创建一个新选项卡.
  • 每个DLL都有一个与之关联的TForm.
  • 使用父hWnd创建表单作为新的TTabSheet.
  • 由于就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很好,不会闪烁.

我试过的事情:

  • WM_SETREDRAW后跟一个RedrawWindow
  • TGroupBoxes和TLabels上的ParentBackground设置为False
  • DoubleBuffer:= True
  • LockWindowUpdate(是的,即使我知道这是非常错的)
  • 透明:= False(甚至覆盖create来编辑ControlState)

有任何想法吗?

delphi groupbox flicker tpagecontrol delphi-xe

21
推荐指数
2
解决办法
7247
查看次数

如何更改TTabSheets的背景颜色?

我正在使用Delphi 2009设计一个表单,我试图弄清楚TPageControl元素.我试图为每个标签创建单独的对话框.我可以制作TTabSheets,我可以将我的元素放在TabSheets上,但我的问题是它们是大麦可见的,因为TTabSheet的默认背景看起来是白色的.我试图在TabSheet上放置一个面板,但无论出于何种原因,面板总是出现在TabSheet后面.所以我的问题是:有没有办法将标签页的颜色更改为标准窗口米色,还是他们可以在标签页上放置TPanel,实现相同的目标?

delphi tpagecontrol

14
推荐指数
2
解决办法
2万
查看次数

动态添加标签页到页面控件并嵌入表单?

我正在研究一个由页面控件组成的模块.默认情况下,此页面控件(TPageControl)不应该有任何选项卡表(TTabSheet),但在初始化时,它应该动态插入这些页面并在其中嵌入一个表单.

问题在于知道如何将标签页插入页面控件.我该如何创建呢?一旦它被创建,以及每个窗体内的表单,我如何迭代它们来销毁表单?

delphi tpagecontrol

14
推荐指数
1
解决办法
3万
查看次数

如何实现TPageControl的TTabsheet的关闭按钮

如何实现像Firefox这样的TPageControl的TTabsheet的关闭按钮?

编辑:
Delphi版本:Delphi 2010
操作系统:Windows XP及更高版本

delphi tpagecontrol

8
推荐指数
2
解决办法
2万
查看次数

如何减少Delphi中的PageControl闪烁?

在Delphi 2009中,我发现PageControl的闪烁 - 在调整表单大小期间发生 - 可以通过将其DoubleBuffered属性设置为true 来减少.

但是,如果我向PageControl标签页添加控件,它们将闪烁,无论其DoubleBuffered属性设置如何.我也试过启用和不启用运行时主题.

delphi vcl flicker delphi-2009 tpagecontrol

8
推荐指数
1
解决办法
5102
查看次数

如何设置TPageControl的当前页面?

我使用的是的PageControl组件,我需要添加一个按钮,点击它去到指定的页面.

我该怎么办?

delphi tpagecontrol

7
推荐指数
2
解决办法
2万
查看次数

如何将TPageControl选项卡分解为Delphi中的单独文件?

我有一个VCL表格,上面有五个标签TPageControl.每个TTabSheet内容都是相当无关的,并且有很多单独的控件和处理逻辑...所以我想要分解它,这样就可以更容易地处理"只是那个选项卡"的代码.像一条线

//-------------------------- begin rules tab methods -------------------
Run Code Online (Sandbox Code Playgroud)

只是不再削减它了.真的,我想我想以某种方式将每个标签放在一个单独的文件中.

目前我正在考虑为每个TTabPage创建一个VCL框架.如果我这样做,我需要将所有帧加载到构造函数中的TPageControl中,或者显示选项卡时.

这是一个好方法吗?为每个标签制作一个完整的TForm会更好吗?我应该继续将选项卡包装在TPageControl中,还是应该在动态加载内容时将其更改为TTabControl?如果这是一个好方法,最好在启动时加载所有选项卡,还是每次显示选项卡?(也许是优点/缺点,如果不是完全明显哪个在大多数/所有情况下都更好)

delphi vcl tpagecontrol

7
推荐指数
2
解决办法
694
查看次数

列表索引超出TPageControl的范围

我遇到了一个表现出一些奇怪行为的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 ..有谁知道发生了什么?我不知所措.

delphi tpagecontrol delphi-xe

7
推荐指数
1
解决办法
876
查看次数

如何更改主题TabSheet标题的文本颜色?

美好的一天!

我需要在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)?

delphi tpagecontrol

6
推荐指数
1
解决办法
7635
查看次数

如何在 C++ Builder 中隐藏 PageControl TabSheets 的标题

我想知道如何隐藏 PageControl 组件中 TabSheets 的标题。我想创建一个创建者,例如建立你的冠军,你可以在页面上选择一些东西。TabSheets 将由计时器每 10 秒更改一次。在Google中我只能找到如何隐藏TabSheet(带有内容)。我只想隐藏 TabSheets 的标题,例如TabSheet1 等。我在 C++ Builder 中工作。问候,

c++ vcl c++builder tpagecontrol

5
推荐指数
1
解决办法
5718
查看次数

标签 统计

tpagecontrol ×10

delphi ×9

vcl ×3

delphi-xe ×2

flicker ×2

c++ ×1

c++builder ×1

delphi-2009 ×1

groupbox ×1