标签: delphi-6

在Delphi XE中,Application.handle发生了什么变化?

我正在将一些代码移植到Delphi XE并注意到如果我使用Application.Handle来获取程序的句柄,Delphi会抛出一个错误并拒绝编译,说:

Undeclared identifier: 'Handle'
Run Code Online (Sandbox Code Playgroud)

当我尝试调用Application.ProcessMessages时会发生同样的行为.我认为必须转移一些未在Unicode迁移指南中列出的内容.

"应用程序"的功能和变量在哪里?

migration delphi delphi-6 delphi-xe

2
推荐指数
1
解决办法
1186
查看次数

在Delphi中挂钩DLL函数

我有一个coclass检查注册表以确定是否安装了一个应用程序,但它做得很差,并没有找到更新版本的应用程序.如果已安装竞争应用程序,它将尝试打开该应用程序.如果已卸载竞争应用程序,程序将崩溃.这个coclass是在DLL文件中定义的,我没有库的源代码,所以我不能只改变它.我一直在研究使用钩子来替换有效的功能,但是当我查看使用SetWindowsHookEx的MSDN文档时,它似乎很复杂.有人可以提供一个如何使用SetWindowsHookEx或其他方法挂钩到Windows的示例吗?

谢谢

编辑:我想说明我接受了我的答案,因为它对我有用.在提出问题时我无法使用其他答案,但它看起来同样好.

delphi dll hook delphi-6

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

Delphi - 运行代码而不显示表单

您对此编程实践有何看法: - 我需要在第一个表单中执行一个事务,然后强制执行另一个表单中的某些更新(对于另一个表单中显示的每个项目).即就像显示表单并单击某个按钮一样.因为从第二种形式执行这些功能是强制性的,所以我想在没有显示第二种形式的情况下这样做.这是一个很好的编程实践还是你有其他建议吗?

另外,仅仅在ShowModal之前为第二个表单设置属性> Visible:= False还是我需要做一些其他操作?

delphi delphi-6

2
推荐指数
1
解决办法
2015
查看次数

快速访问(已排序)TList

我的项目(在Delphi 6上运行!)需要一个内存分配列表(TMemoryAllocation),它存储在一个对象中,该对象还包含有关分配大小(FSize)的信息,以及分配是否正在使用或是免费的(FUsed) .我基本上将它用作GarbageCollector,以及一种让我的应用程序始终分配/释放内存的方法(并且需要大量的分配/解除分配).

每当我的项目需要分配时,它会查找列表以找到符合所需大小的免费分配.为此,我使用一个简单的for循环:

for I := 0 to FAllocationList.Count - 1 do
begin
  if MemoryAllocation.FUsed and (MemoryAllocation.FSize = Size) then
...
Run Code Online (Sandbox Code Playgroud)

我的应用程序运行的时间越长,这个列表会增加到几千个项目,并且当我非常频繁地运行它(每秒几次)时它会大大减慢.

我正试图找到一种方法来加速这个解决方案.我想过按分配大小排序TList.如果我这样做,我应该使用一些智能的方式来访问列表,以获得每次通话时所需的特定大小.有一些简单的方法来做到这一点?

我想到的另一种方式是拥有两个TList.一个用于未使用和一个已用分配.这意味着我必须从一个列表中提取TList.Items并一直添加到另一个列表中.我仍然需要使用for循环来浏览(现在)较小的列表.这是正确的方法吗?

其他建议也非常受欢迎!

delphi delphi-6

2
推荐指数
1
解决办法
341
查看次数

C#和Delphi集成

目前,我们正在用Delphi编写的6因为,在这些项目中使用(成分也写在Delphi 6)特定组件的情侣项目不容易将其转换在新的版本.

由于我更喜欢​​.NET开发,而我们的新产品是用.NET开发的,我想使用这些技术开发新的功能.C#将是编程语言.

我的问题是:如何将C#开发的新功能与Delphi中的当前代码集成?这是一个好主意,可能会出现什么问题?如果有人有类似的经历,那么就会听到优点和缺点.

我听说集成了用C#开发.dll并从Delphi代码中使用它.

TnX提前!

维迪奇

.net c# delphi integration delphi-6

2
推荐指数
1
解决办法
1672
查看次数

在delphi 6中找到无限循环

我目前拥有的程序有多个组件编译为dll.在其中一个dll中,程序形成一个无限循环.有没有办法看到程序循环的位置?即使它当前正在运行.我分别在每个dll中执行此检查没有问题,我将错误仅限于6中的一个.

我在Windows 7上使用Delphi 6.

所以简而言之,我想要一些方法告诉我程序当前在哪里.通常你插入一个断点并等待程序到达那个位置.但我不知道循环在哪里或在哪个组件中.

delphi debugging breakpoints delphi-6

2
推荐指数
1
解决办法
425
查看次数

具有相同祖先的类的重复代码

三类:TTntMemo,TTntEditTEdit有一个共同的祖先- TCustomEdit,但我不能使用ColorShowHint性能TCustomEdit,因为它们protected并再为public只在TTntMemo,TTntEditTEdit.我不允许更改任何这些类,因为它们属于VCL或广泛使用的控件库.

以下代码是PITA,因为它必须重复三次 - 每种类型一次:

class procedure TCommon.ValidateEdit(edit: TCustomEdit; condition: Boolean;
  failHint: WideString);
var m: TTntMemo;
    te: TTntEdit;
    e: TEdit;
begin
  if edit is TTntMemo then begin
    m := edit as TTntMemo;
    if condition then begin
      m.Color := clWindow;
      m.Hint := '';
      m.ShowHint := False;
    end
    else begin
      m.Color := $AAAAFF;
      m.Hint := failHint;
      m.ShowHint := True; …
Run Code Online (Sandbox Code Playgroud)

delphi oop optimization dry delphi-6

2
推荐指数
1
解决办法
212
查看次数

类成员是否没有缓存行问题?

TThread类中有一个名为的类成员(属性)Terminated.
此外,还有一个procedure Terminate;它仅仅设置TerminatedTrue.
当我们继承时,TThread有一些情况我们检查终止.以下池/循环只是为了演示可能的情况:

  while not Terminated do
  begin
    Work;
  end;
Run Code Online (Sandbox Code Playgroud)

什么是终止的保证永远不会被处理器缓存?

delphi multithreading delphi-6

2
推荐指数
1
解决办法
97
查看次数

在TMemo中锁定文本的开头

我想有一个TMemo,它总是以字符串'SELECT c_name FROM'开头,我想锁定它,这样用户就无法删除或替换TMemo中的这个字符串,他们必须在这个字符串之后写下它们的文本.有人可以帮助我吗?我尝试了onChange事件,但问题是用户可以在TMemo的开头点击并在开始时进行编辑.

我正在使用Delphi 6.

delphi tmemo delphi-6

2
推荐指数
1
解决办法
782
查看次数

Delphi 6与RAD Studio 2009一起使用

我需要迁移到RAD Studio并将其安装在新工作站上.目前我还需要使用Delphi 6进行开发,直到我们获得所有必要的控制更新并整理出版本控制.

所以我的问题是,我可以在同一台机器上安装Delphi 6,对这两种产品没有任何负面影响吗?

提前致谢.

delphi delphi-2009 delphi-6

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