有没有办法做到这一点 ?
我目前正在使用2007而且我正在寻求升级,但是试图让这个新版本做任何事情都非常令人沮丧.
xe2中char,strings和Pchar的新行为几乎杀死了我尝试过的每个应用程序和第三方组件.
是否有编译器选项可以提供D2007兼容性.?
目前,我将DecimalSeparator设置为'.' 在每个使用这些功能的程序中.
在程序开始时全局设置它会容易得多,但我发现Delphi似乎会定期将其设置回当前的语言环境.
无论程序使用哪个国家/地区,我都需要确保所有转换都使用小数点,因为这是此类程序的标准,所有文件结构和通信协议,表单/编辑中的数字显示等都是必需的以这种方式格式化.
我在另一个帖子中被告知使用decimalseparator不是正确的方法,但我没有给出任何替代方案.我读过的关于这个主题的其他主题似乎没有提供任何形成性指导或过于复杂.
有一个简单的"正确"方法吗?
此问题仅发生在先前在Delphi 7下设计并迁移到在WinXP上运行的Delphi 2007的应用程序上.
我试了好几年才把这个问题整理好,没有运气.
据我所知,Topendialog是一个Win32对话框包装器,它应该继承windows文件夹选项,在我的例子中,它设置为显示所有文件的文件扩展名.
现在,如果我创建一个新的应用程序并在其上放置一个Topendialog,当它运行时,它会按预期显示文件扩展名.
如果我将相同的对话框拖放到现有应用程序并运行,它不会显示文件扩展名.
如果我在调用对话框之前在filename属性中将文件名字符串写入'Myfile.txt',则当显示对话框时,文件名显示为"Myfile",扩展名不会显示,也不会显示任何文件列表.
有没有其他人看起来这种行为?
有人有任何变通方法吗?
编辑:图像上传到新项目和现有项目之间的Topendialog之间的差异.


帮助文件说右键单击项目管理器中的目标平台并选择"添加平台",但是当我这样做时,"添加平台"项目将显示为灰色.
还有另一种方法可以添加64位平台吗?
我试图将字节数组从 VBscript 传递到我的 Windows Delphi 应用程序,但似乎找不到正确的语法来解释传递的数据。
要求相当简单,如下面的 VBscript 片段所示
Dim inst,arr(5)
Sub Main
set inst=instruments.Find("EP1")
arr(0) = 0
arr(1) = 1
arr(2) = 2
arr(3) = 3
arr(4) = 4
inst.writebytes arr,5
end Sub
Run Code Online (Sandbox Code Playgroud)
我可以让服务器接受脚本传递的 olevariant 但数据似乎是乱码,我的示例服务器代码如下所示,并且基于此处的 Stackoverflow 问题如何在 Delphi 中使用变体数组
procedure TInstrument.WriteBytes(Data: OleVariant; Length: Integer);
var i,n:integer; Pdat:Pbyte; Adata:PvarArray;
begin
if VarIsArray(data) then
begin
n:=TVarData(Data).VArray^.Bounds[0].ElementCount;
Adata:= VarArrayLock(Data);
Getmem(Pdat,length);
try
for i:=0 to length-1 do
Pdat[i]:=integerArray(Adata.data^)[i];
Finstrument.WriteBytes(Pdat,Length);
finally
freemem(Pdat)
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
所以这个想法是接受脚本传递的整数,将其转换为本地数据表示(字节数组),然后将其传递给我的函数以使用数据。
我尝试了几种不同的数据类型和方法,试图从变体中获取一些无乱码的数据,但都无济于事。
从传递的变体中提取数组数据的正确方法是什么?
另外, TVarData(Data).VArray^.Bounds[0].ElementCount 的值为零,为什么会这样?
我创建了一个从Tcustomcontrol派生的类似PageControl的组件,它承载从TcustomPanel派生的子标签页.
Tabsheets由主页pagecontrol通过newpage方法创建,或者通过创建新的tabheet并设置其PageControl属性,与标准pagecontrol几乎相同.
我使用"添加页面"动词为Pagecontrol创建了属性编辑器.
由于Tabsheet不在组件托盘上,因此我在设计器代码中创建了RegisterClass条目.
一切正常,我可以创建子标签,甚至可以在设计器中选择它们并设置属性.
麻烦的是,新页面没有名称,在对象检查器中显示为"未命名",并且不显示在表单结构树图上.
经过一番搜索后,我在Stackoverflow上找到了一个显示a的示例
RegisterNoIcon([Myclass])需要与registerClass一起添加.
我这样做了,组件现在显示在表单树上,但是作为通用的"Component [14]",子对象检查器中仍然显示为"未命名".
显然,集成的Pagecontrol/tabsheet有一些额外的功能,可以与设计人员正确地注册组件,但我很难找到它是什么.
物业登记目前看起来像
procedure Register;
begin
RegisterComponents('My Page Control', [TMyPageControl,TMytitlebar,TMyTabset]);
RegisterComponentEditor (TMypageControl, TMyCompEditor);
RegisterComponentEditor (TMyTabSet, TMyTabEditor);
RegisterClass(TMytabSheet);
RegisterNoIcon([TMytabSheet]);
end;
Run Code Online (Sandbox Code Playgroud)
编辑代码是
procedure TMyCompEditor.ExecuteVerb(Index: Integer);
var ts:MyTabsheet;
begin
inherited;
case Index of
0: with Component as TMyPageControl do
begin
Ts:=TmyTabsheet.Create(Owner);
Ts.Pagecontrol:=(Component as TMyPageControl);
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
作为属性编辑器中的测试,我尝试向自定义控件添加一个标准按钮,结果相同.
有任何想法吗?
尝试设置一个Opengl上下文以呈现为位图,但我发现从Tbimap画布对象返回的句柄不断变化,因此渲染上下文不断抛出异常,因为它与创建渲染上下文的句柄不匹配.
我发现更改位图宽度或高度将更改句柄值,如果位图是在执行渲染的过程之外创建的,则每次输入过程时都会得到不同的句柄.
我需要这个保持静态,或者它有点无意义,有能力首先渲染到位图.
任何线索如何修复手柄?
我正在尝试TSynEdit在Delphi 10 Seattle IDE中安装最新的Unicode版本.它构建正常,但在安装时我收到错误:
模块'bds.exe'中地址为27158679的访问冲突.读取地址00000010
它在以前版本的XE8上安装正常.
我尝试在注册过程的开头放置showmessages()但在注册之前仍然出现AV错误.
有人找到了解决这个问题的方法吗?