我女朋友的新笔记本没有NumLock和CapsLock的指示灯,所以我写了一个小程序,在屏幕上显示它们的状态:
procedure TForm1.Timer1Timer(Sender: TObject);
var
KeyState: TKeyboardState;
begin
GetKeyboardState(KeyState);
if KeyState[VK_NUMLOCK] = 0 then
PanelNumLock.Color := clSilver
else
PanelNumLock.Color := clLime;
if KeyState[VK_CAPITAL] = 0 then
PanelCapsLock.Color := clSilver
else
PanelCapsLock.Color := clLime;
end;
Run Code Online (Sandbox Code Playgroud)
只要我的程序具有焦点,这就可以工作,但是当焦点转到另一个程序时,状态将不再更新.(但是,只需将鼠标移到表单上,不进行单击就足以进行更新.)
当另一个应用程序有焦点时,如何让程序更新?
我想缩短文件名以适应TEdit,比如
Edit1.Text := MinimizeName(FileName, Edit1.Canvas, Edit1.Width);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不能编译,因为TEdit Canvas直接拥有属性.其字体指标需要画布.如何访问TEdit的画布?
(MinimizeName在Vcl.FileCtrl中声明.)
我正在使用Delphi XE8.
我想创建一个选项卡式控件,每个选项卡都有自己的面板.我尝试了TTabControl,为此我可以创建不同的选项卡.但是当我在第一个选项卡处于活动状态时将一个组件放在控件上时,当我更改选项卡(TabIndex)时它仍然可见.如何在设计时为不同的选项卡创建不同的布局?或者我使用了错误的组件?
我认为当我将资源文件添加到我的程序中时,Delphi会自动编译资源文件
{$R 'resource.rc'}
Run Code Online (Sandbox Code Playgroud)
但链接器返回错误消息Error reading file "D:\resource.rc".但是,当我查看项目选项时,brcc32.exe显式列为要使用的资源编译器:
我知道我可以从CLI调用资源编译器,但我更愿意自动编译资源.我怎样才能做到这一点?我正在使用Delphi XE8.