在Delphi XE7中,我使用此技巧根据是否选择了ListView中的项目来自动启用或禁用工具栏按钮("编辑ListView项目"),以防止用户在没有ListView时单击按钮选择的项目:
actTest. actTest给按钮. 在OnUpdate该事件actTest的行动写:
procedure TForm1.actTestUpdate(Sender: TObject);
begin
actTest.Enabled := ListView1.SelCount > 0;
CodeSite.Send('actTestUpdate'); // gets fired very often!
end;
Run Code Online (Sandbox Code Playgroud)现在,您可以看到根据是否选择了ListView中的项目来启用或禁用该按钮,与您是使用鼠标还是使用键盘或以编程方式选择/取消选择项目无关.
但是,在CodeSite Live Viewer中,我可以看到actTestUpdate事件是连续且非常频繁地触发的,因此该语句很快actTest.Enabled := ListView1.SelCount > 0;就被执行了.
所以我的问题是:这会降低性能吗?如果是,是否有另一种技巧可以实现上述目的?
在带有vsReport ViewStyle的ListView中,如何自定义任何单列标题标题的字体颜色?例如(第二列标题标题具有红色字体颜色):

HTML字符实体𝕒:
可以使用此HTML代码从数字120146创建:
<!DOCTYPE html>
<html>
<style>
body {
font-size: 20px;
}
</style>
<body>
<p>I will display 𝕒</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
其中一些扩展字符符号可以在HTML和Delphi 10.1.2中使用相同的数字值创建.例如:
双方®并Chr(174)创建了"注册商标"符号字符®
双方£并Chr(163)创建了"咚咚"标记符号£
等等.
不幸的是,这不符合上述数量的情况下120146,其中Chr(120146)在Delphi中创建一个"有趣的中国符号".
那么如何𝕒从Delphi中的数字120146创建上面的字符符号?哪个是数值范围,HTML和Delphi之间的上述数字等价是否有效?
很容易检测到a的垂直滚动条TScrollBox是否位于最顶层:
IsScrollBarAtTop := ScrollBox1.VertScrollBar.Position = 0;
Run Code Online (Sandbox Code Playgroud)
但是如何检测a的垂直滚动条TScrollBox是否处于非常底部?
我TRegEx在Delphi 10.1.2中看到了几个Delphi的使用示例,如下所示:
try
RegexObj := TRegEx.Create(REGEX_EXTRACTEMAILADDRESSES, [roIgnoreCase]);
MatchResults := RegexObj.Match(ThisPageText);
while MatchResults.Success do
begin
slEmailAddressesOnThisPage.Add(MatchResults.Value);
MatchResults := MatchResults.NextMatch();
end;
except
on E: ERegularExpressionError do
begin
// Todo: Log Syntax error in the regular expression
end;
end;
Run Code Online (Sandbox Code Playgroud)
所以我想知道TRegEx在这样的例子中创建后是否必须显式释放对象?
在Delphi XE2程序中,如何跳转到CHM帮助文件主题中的锚点?锚具有以下格式(从HTML HelpViewer中显示CHM文件的主题页面的源中提取):
<a name="my_anchor_id"></a>
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
Application.HelpJump('MyTopicName.htm#my_anchor_id');
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用:它确实跳到了这个主题,但只是跳到主题的顶部,而不是主题,这是几个向下滚动的页面.
我有一个以这行开头的UTF-8文本文件:
<HEAD><META name=GENERATOR content="MSHTML 10.00.9200.16521"><body>
Run Code Online (Sandbox Code Playgroud)
当我TFile.ReadAllText使用TEncoding.UTF8 读取此文件时:
MyStr := TFile.ReadAllText(ThisFileNamePath, TEncoding.UTF8);
Run Code Online (Sandbox Code Playgroud)
然后省略文本文件的前3个字符,因此MyStr导致:
'AD><META name=GENERATOR content="MSHTML 10.00.9200.16521"><body>...'
Run Code Online (Sandbox Code Playgroud)
但是,当我在TFile.ReadAllText没有TEncoding.UTF8的情况下读取此文件时:
MyStr := TFile.ReadAllText(ThisFileNamePath);
Run Code Online (Sandbox Code Playgroud)
然后完整正确地读取文件:
<HEAD><META name=GENERATOR content="MSHTML 10.00.9200.16521"><body>...
Run Code Online (Sandbox Code Playgroud)
是否TFile.ReadAllText有缺陷?
此代码创建一个AV:
function PAIsMainAppWindow(Wnd: THandle): Boolean;
var
ParentWnd: THandle;
ExStyle: DWORD;
begin
if IsWindowVisible(Wnd) then
begin
ParentWnd := THandle(GetWindowLongPtr(Wnd, GWLP_HWNDPARENT));
ExStyle := GetWindowLongPtr(Wnd, GWL_EXSTYLE);
Result := ((ParentWnd = 0) or (ParentWnd = GetDesktopWindow)) and
((ExStyle and WS_EX_TOOLWINDOW = 0) or (ExStyle and WS_EX_APPWINDOW <> 0));
end
else
Result := False;
end;
function PAEnumTaskWindowsProc(Wnd: THandle; List: TStrings): Boolean; stdcall;
var
Caption: array [0..1024] of Char;
begin
if PAIsMainAppWindow(Wnd) and (GetWindowText(Wnd, Caption, SizeOf(Caption)) > 0) then
List.AddObject(ExtractFileName(GetProcessNameFromWnd(Wnd)), Pointer(Wnd));
Result := True;
end;
function …Run Code Online (Sandbox Code Playgroud) 在Delphi 10.1.2 Berlin中,在一个Vcl.Dialogs.MessageDlg函数中,DlgType常量mtInformation和mtConfirmation创建相同的对话框图标.例如:
if Vcl.Dialogs.MessageDlg('Do you really want to remove the selected item?', mtConfirmation, mbOKCancel, 0) = mrOk then
begin
RemoveTheSelectedItem;
end;
Run Code Online (Sandbox Code Playgroud)
if Vcl.Dialogs.MessageDlg('Do you really want to remove the selected item?', mtInformation, mbOKCancel, 0) = mrOk then
begin
RemoveTheSelectedItem;
end;
Run Code Online (Sandbox Code Playgroud)
但不应该DlgType常数mtConfirmation显示一个问号图标,(作为其他DlgType常量mtWarning并mtError创建每个不同的图标)?
如何使用常量获得问号图标?DlgTypemtConfirmation
在Delphi XE2中,我有一个带有图像缩略图的ListView。当我单击其中一个缩略图时,我希望ListView被黑色半透明层覆盖,并使单击的图像放大到该层的顶部。
由于不可能将TImage放在ListView的顶部,因此我尝试对AlphaBlend 128透明度使用另一种形式的图层。但是,此AlphaBlend形式也使TImage对其具有Alpha透明性。
因此,目标似乎是使图层形成AlphaBlend透明的,而不是其上的图像。如何做到这一点?
在2012年8月7日编辑:
解决了!!多亏了雷米·勒博(Remy Lebeau),他给了我育儿形象的决定性暗示。我从TMS找到了TW7Image,这是我知道的唯一具有不透明度(即AlphaBlend)属性的图像类型。我使用了以下过程:
在W7Image中,在“图片”属性中加载“黑色”图像,将“不透明度”设置为192,并设置“拉伸”模式。
将其他图像设置为“中心”,“比例”等,然后:
// In this order (!):
// 1.
imgSemiTransparentBlackLayer.Parent := MyListView;
imgSemiTransparentBlackLayer.Align := alClient;
// 2.
imgTop.Picture.LoadFromFile('MyPicture.png');
imgTop.Parent := MyListView;
imgTop.Align := alClient;
Run Code Online (Sandbox Code Playgroud) delphi ×10
delphi-xe2 ×4
anchor ×1
chm ×1
columnheader ×1
delphi-xe7 ×1
dialog ×1
html ×1
html-help ×1
image-zoom ×1
listview ×1
regex ×1
scrollbar ×1
taction ×1
text-files ×1
tlistview ×1
tscrollbox ×1
utf-8 ×1
windows ×1