我使用WM_COPYDATA来启用我的两个进程A和B之间的通信.与基本数据类型交换数据没有问题.
现在我有一个问题,在某些情况下我想从我的进程A传递一个接口(IDispatch)到我的进程B.是否可能?
相当大一部分代码(delphi-dutil等)使用TStringDynArray.现在我想将所有键a转换TDictionary<string, string>为a TStringDynArray.不幸的是我才发现TDictionary.Keys.ToArray,这是TArray<T>.
我知道我可以编写一个简单的复制函数来进行原始内容复制,但我TStringDynArray通常非常大(大约10000个条目),所以我正在寻找一种有效的转换TArray<string>方式TStringDynArray.
function ConvertToStringDynArray(const A: TArray<string>): TStringDynArray;
var
I: Integer;
begin
assert(A <> nil);
SetLength(Result, Length(A));
for I := 0 to Length(A) - 1 do
Result[I] := A[I];
end;
Run Code Online (Sandbox Code Playgroud) a TEdit(或 TCombo、TButtonedEdit)中的文本始终与顶部对齐。我还没有找到任何属性来改变对齐方式。通常这不是问题,除非我想设置更大的高度。
我用谷歌搜索了一下。有一些解决方案可以通过发送 Windows 消息来调整左右边距。但我不知道如何调整垂直对齐。
我不想使用更大的字体。有任何想法吗?
我在本地计算机上通过http/https托管服务.当我通过http使用服务时,它工作得很好.当我在ajax上发出https请求时,它也有效.但是,当我尝试从客户端应用程序后面的代码中使用它时,它不起作用.它显示如下错误消息:
"The remote certificate is invalid according to the validation procedure"
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗?
我有一个关于如何在非强大的硬件(Atom N270 + Intel 945GSM)上使字幕文本流畅(使用Qt 4.5.3)的问题.我的方法如下:
一般来说,它移动顺畅.但是,我创建的字幕越多,其使用的CPU使用率就越高.当文本可以填充50%的屏幕(1920x1680)时,CPU使用率约为70-80%.文本动画变得有点闪烁.如果我将定时器间隔设置为50ms或更大,它将是平滑的.但文字移动太慢了.
我的方法无效吗?我要用OpenGL吗?任何提示都是受欢迎的,并提前谢谢^^)
看来Python 2.7中的unittest模块已经改变了很多
我有一个测试用例:
class DemoTest(unittest.TestCase):
def test_foo(self):
"""Test foo"""
pass
Run Code Online (Sandbox Code Playgroud)
控制台输出为:
测试 foo ... 好的
升级到 Python 2.7 后,控制台输出现在为:
test_foo (testcase.demotest.DemoTest)
测试 foo ... 好的
第一行描述是没有用的。我想隐藏它,但不知道如何隐藏。
最近我研究了一个高并发事件驱动框架(Java Akka),它将创建大量Actor线程.当我调试Akka应用程序时,线程具有非常有意义的名称.真的很棒.当我切换回Delphi时,我感到不安的是所有线程都没有命名,尽管它们在过去的20年里都没有命名.
对于我自己设计的所有线程类,我遵循这样一种模式,即我定义了一个setter SetThreadName并NameThreadForDebugging在Execute方法中调用.这到目前为止工作正常.
type
TMyThread = class(TThread)
private
FThreadName: string;
protected
procedure Execute; override;
public
procedure SetThreadName(const ThreadName: string);
end;
procedure TMyThread.SetThreadName(const ThreadName: string);
begin
FThreadName := ThreadName;
end;
procedure TMyThread.Execute;
begin
NameThreadForDebugging(FThreadName);
// Put normal thread execution code here
end;
Run Code Online (Sandbox Code Playgroud)
但是,除非我创建了一个下降线程类,否则第三方线程的这些实例将保持未命名状态.是否有Delphi Magic设置SetThreadName为基类Thread类?我可以Detour.pas用来强制NameThreadForDebugging(FThreadName)在Execute方法的第一个地方调用.
有任何想法吗?
更新1 感谢David的亲切帮助.为了帮助其他读者更好地理解我的问题,这个问题已被重新改写.
我的代码出了什么问题?
该NameThreadForDebugging方法实际上是一种静态方法.第二个参数ThreadId是可选的,默认情况下它等于当前的线程ID.如果我ThreadId不清楚,我可能很可能命名当前的线程,而不是我真正想要命名的线程.
解决办法是什么?
MyThread.NameThreadForDebugging('a_name', MyThread.ThreadId);在任何地方打电话或NameThreadForDebugging('a_name');在开始时打电话TMyThread.Execute. …
我维护一个开源的Delphi库.我想为所有Delphi XE系列编译器提供一个最小的项目文件.理想情况下,有这样一个工具,所以我只需要为XE6创建一个项目文件,它将删除所有冗余信息并自动为XE-XE5创建相应的项目文件.存档有什么聪明的方法吗?
这是我当前的项目文件,其中包含许多冗余信息.例如,它包含Android/iOS等的虚拟配置,但我的项目是传统Windows应用程序的目标.如果我手动删除这些信息,它将在项目更改时返回.我也知道,DebugInformationXE4中的值是boolean,而XE5 中是整数.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{1118D87C-9E72-4D93-9098-E70AD237493A}</ProjectGuid>
<MainSource>dutil_rtl.dpk</MainSource>
<ProjectVersion>15.1</ProjectVersion>
<FrameworkType>None</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>3</TargetedPlatforms>
<AppType>Package</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win64)'!=''">
<Cfg_1_Win64>true</Cfg_1_Win64>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base> …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我自己的项目迁移到delphi 2010.但它似乎非常困难.
太多令人头疼的问题......有人可以分享将现有项目从一个非常老的delphi迁移到delphi 2010的经验吗?
我尝试用我自己的版本即时替换Delphi内置函数.
function ShortCutToTextOverride(ShortCut: TShortCut): string;
begin
if SomeCondition then
Result := Menus.ShortCutToText // after patching the pointer equals ShortCutToTextOverride
else
begin
// My own code goes here
end;
end;
FastcodeAddressPatch(@Menus.ShortCutToText, @ShortCutToTextOverride);
Run Code Online (Sandbox Code Playgroud)
修补后,无法再访问原始功能.无论如何都可以访问它?