- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以将GroupBox
的默认灰色边框更改为可见的内容? (例如黑色或蓝色?)。我发现了一个类似的问题,但与 GroupBox
标题相关,而不是边框。
谢谢
最佳答案
根据您的要求,您可以做两件事:
现在,对于选项 1,我强烈推荐 FlatStyle 开源组件集,它包含 TFlatGroupBox
,其中包含您所要求的内容。这是link到我最新修改的版本(兼容delphi 10西雅图)。
对于选项 2,让我们为我们的组件设置一些标准
psSolid
、psDash
、psDot
、psDashDot
、psDashDotDot
、psClear
、psInsideFrame
、psUserStyle
、psAlternate
)。这是 TFlatGroupBox
的另一个修改版本,增加了功能
unit TFlatGroupBoxUnit;
interface
{$I DFS.inc}
uses
Windows, Messages, SysUtils, Forms, Classes, Graphics, Controls, ExtCtrls, FlatUtilitys;
type
TFlatGroupBox = class(TCustomControl)
private
FTransparent: Boolean;
FUseAdvColors: Boolean;
FAdvColorBorder: TAdvColors;
FBorderColor: TColor;
FBorder: TGroupBoxBorder;
FBorderWidth:integer;
Fborderstyle:Tpenstyle;
procedure SetAdvColors (Index: Integer; Value: TAdvColors);
procedure SetUseAdvColors (Value: Boolean);
procedure CMEnabledChanged (var Message: TMessage); message CM_ENABLEDCHANGED;
procedure CMTextChanged (var Message: TWmNoParams); message CM_TEXTCHANGED;
procedure SetColors(const Index: Integer; const Value: TColor);
procedure SetBorder(const Value: TGroupBoxBorder);
procedure CMSysColorChange (var Message: TMessage); message CM_SYSCOLORCHANGE;
procedure CMParentColorChanged (var Message: TWMNoParams); message CM_PARENTCOLORCHANGED;
procedure CMDialogChar (var Message: TCMDialogChar); message CM_DIALOGCHAR;
procedure WMSize (var Message: TWMSize); message WM_SIZE;
procedure WMMove (var Message: TWMMove); message WM_MOVE;
procedure SetTransparent (const Value: Boolean);
procedure SetBorderWidth(value:integer);
procedure SetBorderStyle(value:TPenStyle);
protected
procedure CalcAdvColors;
procedure Paint; override;
{$IFDEF DFS_COMPILER_4_UP}
procedure SetBiDiMode(Value: TBiDiMode); override;
{$ENDIF}
public
constructor Create (AOwner: TComponent); override;
published
property Transparent: Boolean read FTransparent write SetTransparent default false;
property BorderWidth: integer read FBorderWidth write SetBorderWidth default 1;
property BorderStyle:Tpenstyle read FBorderStyle write SetBorderStyle default psSolid;
property Align;
property Cursor;
property Caption;
property Font;
property ParentFont;
property Color;
property ParentColor;
property PopupMenu;
property ShowHint;
property ParentShowHint;
property Enabled;
property Visible;
property TabOrder;
property TabStop;
property Hint;
property HelpContext;
property ColorBorder: TColor index 0 read FBorderColor write SetColors default $008396A0;
property Border: TGroupBoxBorder read FBorder write SetBorder default brFull;
property AdvColorBorder: TAdvColors index 0 read FAdvColorBorder write SetAdvColors default 50;
property UseAdvColors: Boolean read FUseAdvColors write SetUseAdvColors default false;
{$IFDEF DFS_COMPILER_4_UP}
property Anchors;
property BiDiMode write SetBidiMode;
property Constraints;
property DragKind;
property DragMode;
property DragCursor;
property ParentBiDiMode;
property DockSite;
property OnEndDock;
property OnStartDock;
property OnDockDrop;
property OnDockOver;
property OnGetSiteInfo;
property OnUnDock;
{$ENDIF}
{$IFDEF DFS_DELPHI_5_UP}
property OnContextPopup;
{$ENDIF}
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
end;
implementation
{ TFlatGroupBox }
constructor TFlatGroupBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle + [csAcceptsControls, csOpaque];
FBorderColor := $008396A0;
FAdvColorBorder := 50;
SetBounds(0, 0, 185, 105);
end;
procedure TFlatGroupBox.Paint;
var
memoryBitmap: TBitmap;
borderRect, textBounds: TRect;
textHeight, textWidth: integer;
Format: UINT;
begin
borderRect := ClientRect;
{$IFDEF DFS_COMPILER_4_UP}
if BidiMode = bdRightToLeft then
Format := DT_TOP or DT_RIGHT or DT_SINGLELINE
else
Format := DT_TOP or DT_LEFT or DT_SINGLELINE;
{$ELSE}
Format := DT_TOP or DT_LEFT or DT_SINGLELINE;
{$ENDIF}
memoryBitmap := TBitmap.Create; // create memory-bitmap to draw flicker-free
try
memoryBitmap.Height := ClientRect.Bottom;
memoryBitmap.Width := ClientRect.Right;
memoryBitmap.Canvas.Font := Self.Font;
textHeight := memoryBitmap.canvas.TextHeight(caption);
textWidth := memoryBitmap.Canvas.TextWidth(caption);
{$IFDEF DFS_COMPILER_4_UP}
if BidiMode = bdRightToLeft then
textBounds := Rect(ClientRect.Right - 10 - textWidth, ClientRect.Top,
ClientRect.Right - 10 , ClientRect.Top + textHeight)
else
textBounds := Rect(ClientRect.Left + 10, ClientRect.Top,
ClientRect.Left + 10 + textWidth,
ClientRect.Top + textHeight);
{$ELSE}
textBounds := Rect(ClientRect.Left + 10, ClientRect.Top,
ClientRect.Left + 10 + textWidth,
ClientRect.Top + textHeight);
{$ENDIF}
textBounds := Rect(ClientRect.Left + 10, ClientRect.Top,
ClientRect.Right - 10,
ClientRect.Top + textHeight);
// Draw Background
if FTransparent then
DrawParentImage(Self, memoryBitmap.Canvas)
else
begin
memoryBitmap.Canvas.Brush.Color := Self.Color;
memoryBitmap.Canvas.FillRect(ClientRect);
end;
// Draw Border
memoryBitmap.Canvas.Pen.Color := FBorderColor;
memoryBitmap.Canvas.Pen.Style := FBorderStyle;
memoryBitmap.Canvas.Pen.Width := FBorderWidth;
case FBorder of
brFull:
{$IFDEF DFS_COMPILER_4_UP}
if BidiMode = bdRightToLeft then
memoryBitmap.Canvas.Polyline([Point(ClientRect.Right - 15 - textWidth, ClientRect.top + (textHeight div 2)),
Point(ClientRect.left, ClientRect.top + (textHeight div 2)),
Point(ClientRect.left, ClientRect.bottom-1), Point(ClientRect.right-1, ClientRect.bottom-1),
Point(ClientRect.right-1, ClientRect.top + (textHeight div 2)),
Point(ClientRect.Right - 7 , ClientRect.top + (textHeight div 2))])
else
memoryBitmap.Canvas.Polyline([Point(ClientRect.left + 5, ClientRect.top + (textHeight div 2)),
Point(ClientRect.left, ClientRect.top + (textHeight div 2)),
Point(ClientRect.left, ClientRect.bottom-1), Point(ClientRect.right-1, ClientRect.bottom-1),
Point(ClientRect.right-1, ClientRect.top + (textHeight div 2)),
Point(ClientRect.left + 12 + textWidth, ClientRect.top + (textHeight div 2))]);
{$ELSE}
memoryBitmap.Canvas.Polyline([Point(ClientRect.left + 5, ClientRect.top + (textHeight div 2)),
Point(ClientRect.left, ClientRect.top + (textHeight div 2)),
Point(ClientRect.left, ClientRect.bottom-1), Point(ClientRect.right-1, ClientRect.bottom-1),
Point(ClientRect.right-1, ClientRect.top + (textHeight div 2)),
Point(ClientRect.left + 12 + textWidth, ClientRect.top + (textHeight div 2))]);
{$ENDIF}
brOnlyTopLine:
{$IFDEF DFS_COMPILER_4_UP}
if BidiMode = bdRightToLeft then
begin
memoryBitmap.Canvas.Polyline([Point(ClientRect.right - 5, ClientRect.top + (textHeight div 2)), Point(ClientRect.right, ClientRect.top + (textHeight div 2))]);
memoryBitmap.Canvas.Polyline([Point(ClientRect.left+1, ClientRect.top + (textHeight div 2)), Point(ClientRect.right - 12 - textWidth, ClientRect.top + (textHeight div 2))]);
end
else
begin
memoryBitmap.Canvas.Polyline([Point(ClientRect.left + 5, ClientRect.top + (textHeight div 2)), Point(ClientRect.left, ClientRect.top + (textHeight div 2))]);
memoryBitmap.Canvas.Polyline([Point(ClientRect.right-1, ClientRect.top + (textHeight div 2)), Point(ClientRect.left + 12 + textWidth, ClientRect.top + (textHeight div 2))]);
end;
{$ELSE}
begin
memoryBitmap.Canvas.Polyline([Point(ClientRect.left + 5, ClientRect.top + (textHeight div 2)), Point(ClientRect.left, ClientRect.top + (Canvas.textHeight(caption) div 2))]);
memoryBitmap.Canvas.Polyline([Point(ClientRect.right-1, ClientRect.top + (textHeight div 2)), Point(ClientRect.left + 12 + textWidth, ClientRect.top + (textHeight div 2))]);
end;
{$ENDIF}
end;
// Draw Text
memoryBitmap.Canvas.Brush.Style := bsClear;
if not Enabled then
begin
OffsetRect(textBounds, 1, 1);
memoryBitmap.Canvas.Font.Color := clBtnHighlight;
DrawText(memoryBitmap.Canvas.Handle, PChar(Caption), Length(Caption), textBounds, Format);
OffsetRect(textBounds, -1, -1);
memoryBitmap.Canvas.Font.Color := clBtnShadow;
DrawText(memoryBitmap.Canvas.Handle, PChar(Caption), Length(Caption), textBounds, Format);
end
else
DrawText(memoryBitmap.Canvas.Handle, PChar(Caption), Length(Caption), textBounds, Format);
// Copy memoryBitmap to screen
canvas.CopyRect(ClientRect, memoryBitmap.canvas, ClientRect);
finally
memoryBitmap.free; // delete the bitmap
end;
end;
procedure TFlatGroupBox.CMTextChanged (var Message: TWmNoParams);
begin
inherited;
Invalidate;
end;
procedure TFlatGroupBox.SetColors(const Index: Integer;
const Value: TColor);
begin
case Index of
0: FBorderColor := Value;
end;
Invalidate;
end;
procedure TFlatGroupBox.SetBorder(const Value: TGroupBoxBorder);
begin
FBorder := Value;
Invalidate;
end;
procedure TFlatGroupBox.SetAdvColors(Index: Integer; Value: TAdvColors);
begin
case Index of
0: FAdvColorBorder := Value;
end;
CalcAdvColors;
Invalidate;
end;
procedure TFlatGroupBox.SetUseAdvColors(Value: Boolean);
begin
if Value <> FUseAdvColors then
begin
FUseAdvColors := Value;
ParentColor := Value;
CalcAdvColors;
Invalidate;
end;
end;
procedure TFlatGroupBox.CalcAdvColors;
begin
if FUseAdvColors then
begin
FBorderColor := CalcAdvancedColor(Color, FBorderColor, FAdvColorBorder, darken);
end;
end;
procedure TFlatGroupBox.CMParentColorChanged(var Message: TWMNoParams);
begin
inherited;
if FUseAdvColors then
begin
ParentColor := True;
CalcAdvColors;
end;
Invalidate;
end;
procedure TFlatGroupBox.CMSysColorChange(var Message: TMessage);
begin
if FUseAdvColors then
begin
ParentColor := True;
CalcAdvColors;
end;
Invalidate;
end;
procedure TFlatGroupBox.CMDialogChar(var Message: TCMDialogChar);
begin
with Message do
if IsAccel(Message.CharCode, Caption) and CanFocus then
begin
SetFocus;
Result := 1;
end;
end;
procedure TFlatGroupBox.CMEnabledChanged(var Message: TMessage);
begin
inherited;
Invalidate;
end;
procedure TFlatGroupBox.SetTransparent(const Value: Boolean);
begin
FTransparent := Value;
Invalidate;
end;
procedure TFlatGroupBox.SetBorderWidth(value:integer);
begin
FBorderWidth := Value;
Invalidate;
end;
procedure TFlatGroupBox.SetBorderStyle(value:TPenStyle);
begin
FBorderStyle := Value;
Invalidate;
end;
procedure TFlatGroupBox.WMMove(var Message: TWMMove);
begin
inherited;
if FTransparent then
Invalidate;
end;
procedure TFlatGroupBox.WMSize(var Message: TWMSize);
begin
inherited;
if FTransparent then
Invalidate;
end;
{$IFDEF DFS_COMPILER_4_UP}
procedure TFlatGroupBox.SetBiDiMode(Value: TBiDiMode);
begin
inherited;
Invalidate;
end;
{$ENDIF}
end.
通过添加的功能,您可以更改边框的颜色、宽度、样式,并且可以通过将边框样式设置为 psClear
来选择完全没有边框。
问候纳斯雷丁。
关于delphi - 更改Groupbox边框颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45933186/
我有一个名为“groupBox”的组框。我想禁用整个组框,包括组框的名称。我附上图片。我希望它能解决这个问题
如何将 groupBox 标题对齐到中心而不是默认的左定位。 我在很多帖子中读到可以使用模板,但我不知道这样的事情。所以请让我知道如何在中心获得标题。 谢谢 !! 最佳答案 是的,您必须修改模板。 对
我想用WPF groupbox控件来实现这样的界面 有没有办法用WPF groupbox控件实现这样的界面? 最佳答案 一个简单的选择是仅重叠控件,然后使用边距进行播放
我在 WPF 组框中的停靠面板中有一个文本框和数据网格。 我正在从文本框中动态地在数据网格中添加行,
是否可以为 GroupBox 设置位置对齐? Header在 WPF 中?默认是放置在GroupBox的左上角大纲,但我希望它在顶部居中。我知道您可以使用以下方法设置文本的属性:
简单,我想要一个没有标题空间的GroupBox 最接近的是边框,但是“默认情况下”边框与组框的样式不同。 获得所需的GroupBox的最简单方法(最少的xaml /代码)是什么? 谢谢 最佳答案 如果
如何在表单的 GroupBox 中获得圆角?属性选项卡中有任何选项吗? 最佳答案 何时 visual styles已为您的应用程序启用,并且 FlatStyle 属性设置为“系统”时,组框看起来有稍微
我有一个关于 Visual Studio 中 C# 中的 UI 的问题。我想让我的组框自定义为如下所示: 然后,我还希望它的扩展取决于用户的屏幕分辨率,因此组框的大小不是固定的,例如我需要它占屏幕的
我有一个 groupBox,我在其中放置了三个 RadioButton 和一个 TextBox。他们的标签索引就像 5,6,7,8 从单选按钮开始并在文本框中结束但是在我的表单中当我选择时,它会转到单
我有一个 DataGridView 和一个包含一些 ComboBoxes 的 GroupBox 控件。 根据在 ComboBoxes 中选择的内容,网格中的元素会发生变化。 有没有办法说 If (So
我有以下自动生成的列表,我想用它们用 PyQt5 创建组框: Country = ['France', 'France', 'Germany', 'Austria', 'Austria','Spain
我在我的表单页面 (WinForms) 上使用 GroupBox 控件。 GroupBox 包含五个控件(RadioButtons)。 是否知道组框控件是否包含在控件内的任何按钮被选中时无效的属性?
如何去除白边? 最佳答案 您可以将 BorderThickness 设置为 0,但这也会隐藏黑色边框。白色是 ControlTemplate 的一部分,因此您需要创建一个新模板。这是我通过运行 Ref
我正在使用 Windows 应用程序表单 创建一个应用程序。我基本上是 C# 和 Visual Studio 的新手(从昨天开始就一直在使用它)。到目前为止,我已经成功创建了一个简单的表单,如屏幕截图
拿一个 GroupBox,把 Label 放在里面,然后设置 AutoSizeMode = GrowAndShrink 和 AutoSize = true . 会出现两个问题: Label 和 Gro
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我试图在 XAML 中创建一个包含三个 RadioButton 的 GroupBox。一切看起来都很好,除了我的 GroupBox header 中的 'g' 在底部被截断,如下所示: 我读过其他有格
我正在使用 Visual Studio 2010,但在工具箱中找不到 groupbox。它显示在组件列表中并被选中。我也尝试通过代码插入它,但它也没有显示在代码中。在一些预制页面中,例如 login
如何更改 GroupBox 标题的 Background?我正在尝试这样做: 关于wpf
我正在尝试创建这样的 GroupBox 设计。 我看过GroupBox.HeaderTemplate 但我在创建宽度为 100% 的蓝色背景色时遇到问题。 边界也是如此。 到目前为止我的代码
我是一名优秀的程序员,十分优秀!