小编WeG*_*ars的帖子

Delphi中的集合XE与它们在D7中的工作方式不同

我在Delphi 7程序中有这个常量.他们没有在Delphi XE下编译.

TYPE
  TSingleChar= AnsiChar;

CONST
  noData: TSingleChar= '.';
  Ambiguity= ['x'];
  DNA_Ambig= ['x', noData]+ Ambiguity;
Run Code Online (Sandbox Code Playgroud)

[DCC错误] E2026预期的常量表达式.

  1. XE中我的旧代码无法编译的内容是什么?
  2. 我认为代码本身被解释为Unicode.我对么?

delphi delphi-7 delphi-xe

7
推荐指数
2
解决办法
578
查看次数

在Delphi XE下,THOTKey不再起作用了

我已将旧项目从Delphi 7升级到Delphi XE.该项目(以及其他)有一些THOTKey控件.在Delphi 7下,THOTKey控件正常工作.但在Delphi XE下他们就像残疾人一样.这意味着即使为它们分配了快捷方式(例如Alt + A),它们也没有显示任何内容,我无法编辑它们.

还有其他人有这个问题吗?


更新:
我删除了所有控件和该项目的所有代码.现在我只有主窗体和一个THOTKey控件.基本上,删除所有控件后,我的项目就像一个全新创建的项目,没有一行代码.但是THOTKey仍然不能在Delphi XE下工作,仍然可以在D7下运行.

delphi delphi-7 delphi-xe

7
推荐指数
1
解决办法
390
查看次数

TTaskBar内存泄漏

Embarcadero的TTaskbar有内存泄漏.由于我在表单上删除了此控件,因此每次关闭应用程序时,FastMM都会报告泄漏.

我尝试使用以下代码将FastMM静音:

procedure TMainForm.FormCreate(Sender: TObject);
begin
 fastmm4.RegisterExpectedMemoryLeak(Taskbar);
end;
Run Code Online (Sandbox Code Playgroud)

但它不会起作用.如何注册此泄漏?


内存块已泄露.大小是:100

该块由线程0xC64分配,当时的堆栈跟踪(返回地址)为:406A52 409A7B 409CAC 4283A0

[System.SysUtils] [System] [System.SysUtils.FmtStr] 409CC6 40D775 7628A65F
[StretchDIBits的未知功能] 7731594E
[RtlpNtMakeTemporaryKey上的
未知函数] 7731594E
[ RtlpNtMakeTemporaryKey上的未知函数] 773168F8
[ RtlpNtMakeTemporaryKey上的未知函数] 773168DC [ RtlpNtMakeTemporaryKey上的未知函数]

该块当前用于类的对象:UnicodeString
分配编号为:2209

内存块已泄露.大小是:36

该块由线程0xC64分配,当时的堆栈跟踪(返回地址)为:406A52 407D43 40846A 42CD40
[System.SysUtils] [System] [System.SysUtils.Exception.CreateFmt] 5DEDD7
[System.Win.TaskbarCore] [System.Win] [System.Win.TaskbarCore.TTaskbarBase.UpdateTab] 610F00
[Vcl.Taskbar] [Vcl] [Vcl.Taskbar.CheckMDI] 5DF39F
[System.Win.TaskbarCore] [System.Win] [System.Win. TaskbarCore.TTaskbarBase.ApplyTabsChanges] 610DB8
[Vcl.Taskbar] [Vcl] [Vcl.Taskbar.TCustomTaskbar.Initialize] 5EB044
[Vcl.Forms] [Vcl] [Vcl.Forms.TApplication.Run] 62573A
[MinimalTemplate.dpr] [MinimalTemplate ] [MinimalTemplate.MinimalTemplate] [26]

该块当前用于类的对象:ETaskbarException
分配编号为:2207

此应用程序已泄露内存.小块泄漏(不包括指针注册的预期泄漏):

21 - 36字节:ETaskbarException x 1
85 - …

delphi fastmm leakcheck

7
推荐指数
1
解决办法
476
查看次数

OV证书:需要下载多少次才能摆脱智慧屏?

如果我使用 OV 证书签署我的应用程序,在声誉建立并且智能屏幕消失之前我需要下载多少次?
当然,这里可能会产生一些影响:

  1. OV证书是全新的
  2. OV证书过期需要更新
  3. 签名的应用程序是新版本(互联网上首次)
  4. 签名的应用程序已更新(之前有信誉)。

有人说下载10次就够了,也有人说需要上万次下载。有些人说向微软提交申请会有帮助,另一些人则说没有帮助。
有没有人真正经历过这个过程并可以分享一些真实的数据/统计数据?

code-signing certificate certificate-authority

7
推荐指数
1
解决办法
740
查看次数

混淆图像

我想分发一些图像,除非他们使用我的程序,否则不允许其他人看到它们.我的目的是使用JPG文件,我将在其中更改标题,以便其他图像查看器无法再读取它们.例如,我可以删除作为JPG魔术签名的字节7-10.稍后,我的程序将重建标题并显示JPG文件.

问题:我如何动态执行此操作,而不读取"损坏的"JPG文件,恢复标头,将好文件保存到磁盘,然后将其重新加载为"好"的JPG文件?

delphi jpeg image

6
推荐指数
2
解决办法
857
查看次数

使用Indy时连接不会超时

我想从互联网上下载一个文件,我想这应该是一个简单的任务.尝试了几种不同的方法,我发现每种方法都有自己的缺点.主要问题是:

  • 应用程序冻结,直到下载文件
  • 如果Internet连接丢失/服务器没有响应,应用程序将永久冻结.

(细节:

如何通过HTTP从Internet检索文件?
从Internet下载文件时连接不会超时)

所以,最后我使用了我从几个人那里得到的建议来使用像Indy这样的"专业"库.但是,Indy并没有比我尝试过的代码要好得多(但它更大,更难维护).使用Indy时,应用程序不会仅在短时间内冻结,因此它仍然(某种程度上)可用.但是,在下载完成之前无法关闭应用程序(从不会因为Internet连接中断而关闭).

其他人报告了同样的问题:http://borland.newsgroups.archived.at/public.delphi.internet.winsock/200609/0609079112.html
https://forums.embarcadero.com/thread.jspa?threadID=25199&tstart= 90

那么,为了让它发挥作用,我必须对TIDAntiFreeze进行一些黑客攻击?

此外,无法识别ConnectTimeout属性.

fIDHTTP := TIDHTTP.Create(NIL);
fIDHTTP.ConnectTimeout:=5000;
Run Code Online (Sandbox Code Playgroud)

我应该放弃Indy并回到最初在单独的线程中下载文件的想法,并在它没有响应时结束线程(至少这样我摆脱了第三方库)?如果我这样做会有不可预见的副作用吗?

使用:Delphi 7,Indy 10.1.5 10.5(可能).

谢谢

delphi indy10

6
推荐指数
1
解决办法
4872
查看次数

如何在TList中存储动态数组?

我需要存储未知数量的组.每个组都有未知数量的元素/项目.这是我的'小组':

 TGroup= array of Integer;     <------ dynamic array (as you can see) :)
Run Code Online (Sandbox Code Playgroud)

我想用TList来保持我的团队.我的想法是,我可能希望稍后访问这些组并向其添加更多项目.

我有这个代码,但我不能让它工作:

TYPE
   TGroup= array of Integer;                              // Each group has x items (x can be from 1 to 10000)


procedure TForm1.FormCreate(Sender: TObject);
VAR CurGroup: TGroup;
    grp, item: Integer;
    Groups: TList;                                        // can contain up to 1 million groups
begin
 Groups:= TList.Create;

 { Init }
 for grp:= 1 to 4  DO                                     // Put a dummy item in TList
  begin
   SetLength(CurGroup, 1);                                // Create new group
   Groups.Add(@CurGroup);                                 // …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7

6
推荐指数
2
解决办法
7499
查看次数

如何检查子窗口是否存在?

我有一个主窗体(MainForm)和一个MDI子窗口(TFormChild).我想创建多个TFormChild表单,但第一个必须以某种方式运行,所以我需要检测TFormChild窗口是否已经存在.

我使用此代码,但它无法正常工作:

function FindChildWindowByClass(CONST aParent: HWnd; CONST aClass: string): THandle;   
begin
  Result:= FindWindowEx(aParent, 0, PChar(aClass), NIL);
end;
Run Code Online (Sandbox Code Playgroud)

我称之为:

Found:= FindChildWindowByClass(MainForm.Handle, 'TFormChild')> 0;   
Run Code Online (Sandbox Code Playgroud)

delphi

6
推荐指数
2
解决办法
3299
查看次数

如何清除jpeg图像?

如何清除TJPEGImage图像?

JPG.Width := 0招是行不通的.另外,我不想创建一个空位图(0x0像素)并将其分配给jpeg.

delphi

6
推荐指数
1
解决办法
2918
查看次数

如何将空终止字符串转换为字符串?

我想将一些数据记录存储到磁盘.我希望每个数据记录具有相同的大小,以便我可以快速计算并跳转到某个记录.所以,我将记录中唯一的字符串存储为chars数组:

type TFileNameIO = array[1..512] of Char;
Run Code Online (Sandbox Code Playgroud)

从磁盘读取字符串后,我的字符串内容如下:

c:\ windows#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0等

我想截断#0字符,我做这样的事情:

function GetFileName(DiskName: TFileNameIO): string;
VAR PC: PChar;
begin
 SetString(Result, PChar(@DiskName), Length(DiskName));     <----- here Result is: c:\windows#0#0#0 etc
 PC:= PChar(Result);
 Result:= WideCharToString(PC);
end;
Run Code Online (Sandbox Code Playgroud)

还有更好的方法吗?

delphi delphi-xe7

6
推荐指数
1
解决办法
2226
查看次数