我有一台Windows 8平板电脑,全高清分辨率为1920x1080像素.
但是当我使用Delphi的Screen对象,以获得Screen.Width和Screen.Height它将返回的Windows 8平板电脑上运行的1280×720的分辨率.
问题根源在哪里?在Windows(平板电脑)方面还是在Delphi方面?我使用Delphi 7到XE2的结果相同.这似乎是一个平板电脑问题,而不是一般的Windows 8问题,因为我在Windows 8.1台式机上没有这样的行为.
结论
我只是想强调我的问题的原因,因为它有点隐藏在评论中.
默认情况下,我的平板电脑上的Windows 8使用150%DPI.1080px是720px的150%.因此应用程序可以使用720px.将DPI百分比降低到100%会产生预期的1080px分辨率.
我想在VirtualStringTree中使我的列在自动调整列大小时在内容的左侧和右侧具有相同的缩进.
看一下我的样本VST,打开Header Option hoDblClickResize.

在这张图片中,我双击列标题以自动调整"时间"列的大小.我强调了列的左侧和右侧之间的缩进差异.
如何调整VST,使右缩进与左缩进的大小相同?我是否必须破解VST源代码?如果是这样,有人能指出我在代码中的正确位置吗?
目前我正在测试Ararat Synapse在Delphi发送电子邮件.
本地函数创建TSMTPSend并发送电子邮件.
我怎样才能中止这个操作?
我已经设置了一个分配给SMTP.Sock.OnStatus的回调函数来执行一些状态输出.
当我想中止发送进度时,我想我可以在回调函数中使用TSMTPSend的TTCPBlockSocket,因为在这个函数中我无法直接访问TSMTPSend.
我想做的事情看起来基本上就像
MyCallBack(Sender: TObject; Reason: THookSocketReason; const Value: string);
begin
if FCancelWasClicked then
begin
if Sender is TTCPBlockSocket then
TTCPBlockSocket(Sender).StopFlag := True;
// or TTCPBlockSocket(Sender).AbortSocket or CloseSocket
end;
end;
Run Code Online (Sandbox Code Playgroud)
但StopFlag显示没有效果,AbortSocket/CloseSocket导致StackOverFlow,因为套接字将无休止地抽取HR_CloseSocket消息.
我做错了吗?还有其他选择吗?
描述
我有一个 Delphi XE2 应用程序,其窗体之一横跨两个显示器。当我锁定 Windows 时,等到屏幕保护程序被激活然后解锁窗口,我的应用程序的所有窗体都将调整大小/重新定位以适合每个显示器(这显然是默认的 Windows 行为并适用于大多数应用程序)。
意图
每当发生这种锁定情况时,我要么想要恢复表单位置,要么阻止预先调整表单大小。
重现步骤
这些步骤适用于 Windows 7 x64。
我正在设置 1 分钟后激活空白屏幕保护程序。我打开我的应用程序和适当的拉伸表格。我lock的帐户并等待屏幕保护程序弹出。登录后我可以看到表单大小已调整。
在其他机器上锁定足以重现该行为。在某些机器上,激活的屏幕保护程序就足够了。
附加信息
到目前为止我所做的和观察到的:
Spy++我看到我的应用程序收到一条带有=WM_SETTINGCHANGE的消息。此时我的表单已经有了新的尺寸。WParamSPI_SETWORKAREAWM_SETTINGCHANGE后者时,表格大小已经改变并缩小到一个显示器。SetWindowPos.wsNormal。我以编程方式将表单拉伸到两个监视器上方,但不触及其窗口状态。WM_WTSSession_Change解锁消息上的旧(内部保存)位置/大小,我尝试SetWindowPos(Handle, HWND_NOTOPMOST, FFormSizePos.Left, FFormSizePos.Top, FFormSizePos.Width, FFormSizePos.Height, SWP_NOACTIVATE or SWP_NOMOVE);Self.Left := FFormSizePos.Left;有人可以帮助解决我的意图吗?
我想在Delphi项目中存储和加载各种程序数据.此数据范围从简单字符串到更复杂的重复配置对象数据.
众所周知,ini文件提供了一种快速简便的方法来存储程序数据,但仅限于键值表示.
当涉及到这样的需求时,XML通常是首选的武器,但我想知道是否有XML的替代品.
最近我发现了Delphi的superobject,它似乎比XML更容易处理.对于使用JSON进行这种"非网络任务"有什么可说的吗?
你知道在Delphi中支持数据存储和加载纯文本(如ini,xml,json)的其他选项吗?
我的Delphi应用程序从一个C++ DLL调用一个函数,它应该返回这样的字符串.
C++ DLL
__declspec( dllexport ) void sample(char* str1, char* str2)
{
strcpy(str1, "123");
strcpy(str2, "abc");
}
Run Code Online (Sandbox Code Playgroud)
德尔福
procedure sample(Str1, Str2: pchar); cdecl; external 'cpp.dll';
var
buf1 : Pchar;
buf2 : Pchar;
begin
sample(@buf1, @buf2);
//display buf1 and buf2
//ShowMessage(buf1); //it display random ascii characters
end;
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?