如何确保要与列表视图项目关联的气球提示正确放置,使其位于相关项目的旁边,并始终在屏幕上显示完整的气球文本?
例如,如果我在Windows资源管理器中编辑文件名时输入了无效字符,则会弹出一个气球,提示什么是无效字符。即使列表项靠近屏幕边缘或部分不在屏幕上,整个气球也会始终显示在屏幕上。尾部始终位于列表项的中间底部。气泡通常位于尾巴的右下角,但如果列表项位于屏幕的底部和/或右边缘附近,则可能在尾巴的上方或左侧。
首先,我无法使气泡和尾巴保持在列表项附近。
procedure TForm1.ListEdited(Sender: TObject; Item: TListItem;
var S: string);
var
AHint: string;
R: TRect;
B : TBalloonHint;
begin
if TRegEx.IsMatch(S, '[\\/:*?"<>|]') then
begin
AHint := 'A file name cannot contain any of the following' + sLineBreak +
'characters: \/:*?"<>|';
R := Item.DisplayRect(drBounds);
R.TopLeft := ClientToScreen(R.TopLeft);
R.BottomRight := ClientToScreen(R.BottomRight);
B := TBalloonHint.Create(Self);
B.Description := AHint;
B.HideAfter := 5000;
B.ShowHint(R);
S := TRegEx.Replace(S, '[\\/:*?"<>|]', '');
end;
end;
Run Code Online (Sandbox Code Playgroud)
我尝试了ShowHint的各种重载,以及JEDI气球提示组件。我还调整了矩形的Top属性,当该项目位于屏幕的特定区域中时,可以使气球更好地定位,但是当该项目位于屏幕的其他部分时,气球将处于关闭位置。
Delphi 10.3 Rio,赢得7 x64。
在Delphi中,如果X和Y是整数,我如何编写代码使得X和Y指向相同的内存位置?如果我说的话
Y := 3;
X := 6;
write(Y);
Run Code Online (Sandbox Code Playgroud)
输出将是6?据我所知,Delphi中简单类型赋值的默认行为是值而不是引用.