我不知道这个问题能否在这里得到回答,但我希望它能回答。我用Delphi 7编写了一个简单的文本编辑器,它是我在Windows下编写C代码的主要IDE。我在VM中运行Windows,我需要一些轻松的东西。在任何情况下,它都使用一个TpageControl,每当您打开或创建一个新文件时,它都会获得一个新的选项卡。相当标准的。现在,Delphi下的TPageControl没有平坦的属性。
,不,我不是指将选项卡样式设置为tsButtons或tsFlatButtons
边框不能设置为"none“,当您在选项卡控件中添加文本编辑器时,边框看起来非常糟糕。
有办法把TpageControl弄平吗?
编辑
在一个支持平面的开源PageControl上,我发现如下所示:
procedure TCustomTabExtControl.WndProc(var Message: TMessage);
begin
if(Message.Msg=TCM_ADJUSTRECT) and (FFlat) then
begin
Inherited WndProc(Message);
Case TAbPosition of
tpTop : begin
PRect(Message.LParam)^.Left:=0;
PRect(Message.LParam)^.Right:=ClientWidth;
PRect(Message.LParam)^.Top:=PRect(Message.LParam)^.Top-4;
PRect(Message.LParam)^.Bottom:=ClientHeight;
end;
tpLeft : begin
PRect(Message.LParam)^.Top:=0;
PRect(Message.LParam)^.Right:=ClientWidth;
PRect(Message.LParam)^.Left:=PRect(Message.LParam)^.Left-4;
PRect(Message.LParam)^.Bottom:=ClientHeight;
end;
tpBottom : begin
PRect(Message.LParam)^.Left:=0;
PRect(Message.LParam)^.Right:=ClientWidth;
PRect(Message.LParam)^.Bottom:=PRect(Message.LParam)^.Bottom-4;
PRect(Message.LParam)^.Top:=0;
end;
tpRight : begin
PRect(Message.LParam)^.Top:=0;
PRect(Message.LParam)^.Left:=0;
PRect(Message.LParam)^.Right:=PRect(Message.LParam)^.Right-4;
PRect(Message.LParam)^.Bottom:=ClientHeight;
end;
end;
end else Inherited WndProc(Message);
end;问题是,当我在主应用程序上尝试类似的东西时,它将无法工作。它甚至不会编译。
发布于 2009-06-26 14:38:06
当将选项卡绘制为按钮时,不会在显示区域周围绘制边框,因此将Style属性设置为tsButtons或tsFlatButtons。(对于非VCL程序员,这相当于在选项卡控件中包含tcs_Buttons窗口样式。)
另一种选择是使用TNotebook。它有很多页,但它根本不画任何东西。您必须自己提供选项卡,例如设置选项卡控件的高度等于制表符的高度,或者使用TTabSet。(TTabSet在Delphi2005中提供;我不确定Delphi7。)
关于您找到的代码,如果您说明了它为什么不编译,或者您给出了找到它的链接,这将是有帮助的,因为我认为编译错误是因为它引用的是自定义类的字段或属性,而不是股票类。下面是您可以尝试将其放入您自己的代码中的内容,而不必编写自定义控件。
以您的形式做两个新的声明,如下所示:
FOldTabProc: TWndMethod;
procedure TabWndProc(var Msg: TMessage);在表单的OnCreate事件处理程序中,将该方法分配给页控件的WindowProc属性:
FOldTabProc := PageControl1.WindowProc;
PageControl1.WindowProc := TabWndProc;现在实现该方法并处理tcm_AdjustRect消息:
procedure TForm1.TabWndProc(var Msg: TMessage);
begin
FOldTabProc(Msg);
if Msg.Msg = tcm_AdjustRect then begin
case PageControl1.TabPosition of
tpTop: begin
PRect(Msg.LParam)^.Left := 0;
PRect(Msg.LParam)^.Right := PageControl1.ClientWidth;
Dec(PRect(Msg.LParam)^.Top, 4);
PRect(Msg.LParam)^.Bottom := PageControl1.ClientHeight;
end;
end;
end;
end;如果你需要的话,你可以填另外三个箱子。Tcm_AdjustRect是在CommCtrl单元中声明的消息标识符。如果在该单元中没有该消息,则自己声明;它的值为4904。
我怀疑这并不能阻止控制室划定边界。相反,它会导致包含的TTabSheet变得更大一些,并掩盖边界。
发布于 2015-10-14 14:11:29
我使用的是德尔菲XE8,下面的工具似乎能做到这一点:
ATabControl.Tabs.Clear;
ATabControl.Style := TTabStyle.tsFlatButtons;
ATabControl.Brush.Color := clWhite;发布于 2013-05-09 08:53:29
删除两个TPageControls,一个选项卡作为Tabs,其全局高度等于制表符,另一个选项卡的平面按钮和Tabvisible属性设置为false,这将在第一个选项卡下对齐。然后确保第一个TPagecontrol上的选项卡更改,使制表符在第二个选项卡中也发生变化。
https://stackoverflow.com/questions/1049033
复制相似问题