有一个包含一些长项的ListBox.这些长项超出了ListBox的右边缘,这里有一个想法,当鼠标悬停在这些项目上时显示这些项目的提示.
我找到了一个例子:(来自http://delphi.about.com/cs/adptips2001/a/bltip0201_4.htm)
procedure TForm1.ListBox1MouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer) ;
var lstIndex : Integer ;
begin
with ListBox1 do
begin
lstIndex:=SendMessage(Handle, LB_ITEMFROMPOINT, 0, MakeLParam(x,y)) ;
if (lstIndex >= 0) and (lstIndex <= Items.Count) then
Hint := Items[lstIndex]
else
Hint := ''
end;
end;
Run Code Online (Sandbox Code Playgroud)
它工作,但每次我想查看另一个项目的提示我必须将我的鼠标从ListBox移开,然后指向另一个项目以查看其提示.有没有办法在不将鼠标移离ListBox边框的情况下查看每个项目的提示?
如何对tlistview存在的数据进行排序subitem[x]?
我正在编写一个VCL/Delphi应用程序,我需要在Canvas对象上绘制文本.我遇到了麻烦,因为我需要文本的大小和角度可变.这有什么简单的方法吗?TextOut方法只接受起始坐标的参数,所以我不知道如何绘制旋转文本.
谢谢!
我想要做的是检查我的应用程序是否具有焦点,因为如果不是,那么我将在通知区域上方弹出警报窗口以向最终用户显示一些消息.
如果有人在主VCL线程和后台线程上运行时间代码有很多经验,我想得到一个意见.我有一些代码在主线程上的Delphi 6应用程序中运行一些繁重的字符串处理.每次运行操作时,每个操作的时间在i5 Quad内核的单个线程上徘徊大约50 ms.让我真正怀疑的是,我在旧Pentium 4上运行的相同代码显示了同样的操作时间,因为通常我看到Pentium 4上运行的代码比Quad Core慢4倍.我开始怀疑代码是否可能消耗的时间远远少于50毫秒但是主要的VCL线程,可能是Windows消息处理或执行Windows API调用,正在为操作创建一个人为的"底层".注意,如果重要,则由套接字上的传入请求触发操作,但是在完全接收数据之前不会进行时间测量.
在我开始将所有代码移到后台线程进行测试之前,我想知道是否有人对此领域有任何一般知识?您在主VCL线程上运行代码的经历是什么?注意,当测试期间绝对没有用户触发的活动时,正在进行定时测量.
我也想知道如果将线程的优先级提高到实时性以下是否会有任何好处.在尝试使用这些标志时,我的运行时间从未见过太多改进.
- roschler
据我了解并了解TThread类的方法,如果你同步你的代码,它实际上是在主应用程序线程中执行的(就像一个计时器/按钮点击/等).我一直在玩,并注意到MessageBox不会阻止主应用程序,但是睡眠就像预期的那样.这是为什么?
type
TTestThread = class(TThread)
private
procedure SynchThread;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean);
end;
procedure TTestThread.SynchThread;
begin
MessageBoxA (0, 'Hello', 'Test', 0);
end;
procedure TTestThread.Execute;
begin
Synchronize (SynchThread)
end;
constructor TTestThread.Create(CreateSuspended: Boolean);
begin
inherited;
FreeOnTerminate := True;
end;
procedure StartThread;
var
TestThread : TTestThread;
begin
TestThread := TTestThread.Create (FALSE);
end;
Run Code Online (Sandbox Code Playgroud) 我试图得到相同的drophadow窗口使用这个:

在我的形式的树视图控件上.

在我的研究中,我发现可以使用CS_DROPSHADOW(链接)在表单上创建这种阴影效果.
它是否可能以某种方式分配CS_DROPSHADOW或类似于控件?
目前我正在测试启用VCL样式的应用程序的各个方面.
我注意到,当Windows缩放高于默认的96 dpi/100%时,VCL表单的图标和标题栏文本太大 - 两者都要靠近 - 请参阅附带的屏幕截图.对于200%或250%的更高标度(例如在4K显示器和Windows 10上使用),尤其如此,但即使缩放为144 dpi/150%,问题也已经可见.
对于RAD Studio提供的所有样式都是如此.通过项目设置启用清单的高Dpi感知.如果我在应用程序中禁用VCL样式,则图标和标题栏文本的大小正确.
我在这里错过了什么吗?如果启用显示缩放,开箱即用的样式是否应该没有开箱即用的显示错误?或者是否有一些设置我可以调整以解决这个问题.
谢谢,
我试图在TEdit没有焦点的控件上实现我自己的绘图(TEdit当编辑器没有完全显示其文本时显示省略号).所以我用这段代码加注了ed:
type
TEdit = class(StdCtrls.TEdit)
private
FEllipsis: Boolean;
FCanvas: TCanvas;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
constructor TEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FEllipsis := False;
FCanvas := TControlCanvas.Create;
TControlCanvas(FCanvas).Control := Self;
end;
destructor TEdit.Destroy;
begin
FCanvas.Free;
inherited;
end;
procedure TEdit.WMPaint(var Message: TWMPaint);
begin
if FEllipsis and (not Focused) then
begin
// Message.Result := 0;
// TODO...
end
else
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
请注意,当FEllipsis and (not Focused)消息处理程序什么都不做时.
现在我在表单上删除了一个 …
我在运行时创建了一堆Panel,我想改变它们的颜色.颜色属性不起作用,我不想转动运行时主题...
有任何想法吗?
我正在使用Delphi XE3.
谢谢你的帮助!
delphi ×10
vcl ×10
c++builder ×1
colors ×1
delphi-xe7 ×1
editcontrol ×1
performance ×1
themes ×1
timing ×1
tlistview ×1
tthread ×1
vcl-styles ×1
winapi ×1