我们在其中一个模块中使用竖线bar |(|)字符作为字段分隔符.因此用户不应在标题中使用此字符.
如果他们确实使用它,我想用类似的角色替换它.
是否有Unicode替代品?我找到的唯一一个与它相似的角色是垂直条¦(¦).
可能重复:
在运行时复制组件
我有一个TMyControl(Control1)与它自己的属性/事件.
如何创建Control2具有完全相同属性/事件的重复实例?
更具体地说,我想克隆现有TADODataSet的流媒体字段(和一些事件):
object ADODataSet1: TADODataSet
Connection = ADOConnection1
CursorType = ctStatic
AfterOpen = ADODataSet1AfterOpen
CommandText = 'select top 10 * from Polls'
Parameters = <>
Left = 224
Top = 40
object ADODataSet1PollID: TGuidField
FieldName = 'PollID'
FixedChar = True
Size = 38
end
object ADODataSet1Title: TWideStringField
FieldName = 'Title'
Size = 255
end
object ADODataSet1Description: TWideStringField
FieldName = 'Description'
Size = 4000
end
object ADODataSet1PollType: TIntegerField …Run Code Online (Sandbox Code Playgroud) 我想获得TGroupBox标题的字体颜色,因此我可以将该颜色分配给TLabel.
我想我需要使用GetThemeColor,但我似乎无法弄清楚使用哪些参数?
更新 - 这是我根据答案使用的代码:
function GetGroupBoxTextColor: TColor;
var
C: COLORREF;
ElementDetails: TThemedElementDetails;
begin
Result := clWindowText;
if ThemeServices.ThemesEnabled then
begin
ElementDetails := ThemeServices.GetElementDetails(tbGroupBoxNormal);
if GetThemeColor(ThemeServices.Theme[teButton], ElementDetails.Part, ElementDetails.State, TMT_TEXTCOLOR, C) = S_OK then
Result := C;
end;
end;
Run Code Online (Sandbox Code Playgroud) 我做了一个简化的演示(带有伪结构)来说明我需要的东西:
type
TMyRec = record
GroupID: Integer;
Color: TColor;
end;
TMyRecArray = array of TMyRec;
Run Code Online (Sandbox Code Playgroud)
我的输入数组/列表元素由非零GroupID组成.它们始终按GroupID分组(但未排序且无法排序):
GroupID
-------
2
2
2
1
1
3
3
etc...
Run Code Online (Sandbox Code Playgroud)
每个元素都有一个Color.我的输出应该按GroupID分组,看起来应该是这样的(每个组都是clRed/ clGreen- 依次交替):
GroupID ; Color
------- -----
2 ; clRed
2 ; clRed
2 ; clRed
1 ; clGreen
1 ; clGreen
3 ; clRed
3 ; clRed
etc...
9 ; clGreen
7 ; clRed
7 ; clRed
Run Code Online (Sandbox Code Playgroud)
我用的代码是:
procedure TForm1.Button1Click(Sender: TObject);
var
R: TMyRecArray;
I: …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个看起来如下的裁剪工具:
原始图片:

裁剪工具 - 这就是我想要的:

请注意,裁剪区域显示原始颜色,并且颜色周围较暗.
我做的是放置TShape我TImage的属性:
object Shape1: TShape
Brush.Color = clSilver
Pen.Mode = pmMask
Pen.Style = psDot
end
Run Code Online (Sandbox Code Playgroud)
我计划使用TShape进行重新调整大小/应对控制.这就是Delphi的外观:

正如你所看到的,它看起来并不好(调色板看起来很抖动),但主要的问题是我需要昏暗区域在裁剪区域周围,而不是在中心.我试图用另一个TShpae覆盖整个TImage,尝试了不同的Pen.Mode组合,但是没有好的结果,我认为我的方法/方法很糟糕.
您对如何实现所需行为有任何想法吗?
如何为TControl 创建约束比例(在我的情况下为TGraphicControl)?
因此,如果我改变它Width- Height意志改变比例(反之亦然).
另外,如果我设置BoundsRect控件应保持比例.在我的控制下,我有一个AspectRatio: TPoint属性,设置:
AspectRatio.X := 4;
AspectRatio.Y := 3;
Run Code Online (Sandbox Code Playgroud)
所以现在我的AspectRatioFactor = 4/3.这个比例应该始终保持.
如何才能做到这一点?
我有这个不编译的代码:
function IsControlOneOf(AControl: TControl; AControls: array of TControl): Boolean;
begin
Result := False;
// if AControls <> nil then // does not compile!
if Length(AControls) <> 0 then // this compiles
Result := AControl in AControls; // does not compile!
end;
Run Code Online (Sandbox Code Playgroud)
我可能错误地用开放数组动态数组.
我怎么测试"AControl in AControls"呢?我应该将低(AControls)迭代到高(AControls)并测试匹配,或者什么?
另外,有没有办法为open数组设置默认值?
AControls: array of TControl = []
Run Code Online (Sandbox Code Playgroud)
也不编译.