问题标签 [delphi-5]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - 如何在 Delphi 的 TFrame 上模拟 OnDestroy 事件?
如何在 Delphi 中模拟OnDestroy
事件?TFrame
我在我的框架中添加了一个constructor
and destructor
,认为这就是TForm
:
这样做的问题是,当我的析构函数运行时,框架上的控件已被破坏并且不再有效。
原因在于包含表单的析构函数,它用于触发OnDestroy
事件:
当窗体的析构函数运行时,我的框架对象的析构函数被调用。问题在于为时已晚。窗体调用DestroyWindowHandle
,它要求 Windows 销毁窗体的窗口句柄。这会递归地破坏所有子窗口 - 包括我框架上的那些。
因此,当我的框架destructor
运行时,我尝试访问不再处于有效状态的控件。
如何在 Delphi 中模拟OnDestroy
事件?TFrame
也可以看看
delphi - 如何在 Delphi 中没有 MainForm?
我一直在尝试让我的应用程序中的一些无模式表单出现在任务栏上——利用 Windows 7 中新的有用任务栏。
在任务栏上存在表单之前,需要撤消 VCL 的许多问题。
但最后一个问题是,最小化 VCL 指定的主窗体会导致应用程序中的所有窗口消失。
十年前,彼得·弗莱德 (TeamB) 记录了这些问题,并尝试解决这些问题。但是有些问题是无法解决的。这些问题在 VCL 本身中运行得如此之深,以至于实际上不可能使 Delphi 应用程序正常运行。
这一切都源于您在工具栏上看到的按钮并不代表应用程序的窗口。它代表TApplications
窗口,它是隐藏的,从未见过。然后是应用程序MainForm
,它被赋予特殊的能力,如果它被最小化,那么它会指示应用程序隐藏自己。
在我看来,如果我能做到
那么所有这些错误都会消失。该应用程序可以有它的隐藏窗口,同时我将覆盖应用程序中的所有其他表单,包括我的主表单,其中:
但在 Delphi 中,该Application.MainForm
属性是只读的。
我怎么能没有MainForm
德尔福?
也可以看看
delphi - Mocks:如何避免孩子和父母说话?
我正在尝试通过传递一个模拟所有者来测试一个对象。最初PartD
将PartB1
作为其所有者传递 a :
现在我想PartD
通过传递一个模拟来测试一个特性owner
:
这可以正常工作,除了有些事情PartD
取决于它了解其某些所有者的某些状态:
这会导致我的模拟对象出现问题,因为PartD
需要我的模拟是类型的PartB1
,并且它需要实现一个名为 的属性PartA
,它需要实现一个属性Transactions
,它是一个带有Count
.
我只对测试一种方法的一部分感兴趣PartD
,所以我对重新设计整个软件并不感兴趣,肯定会引入回归,所以我可以测试我的 2 分钟修复。我花了 2 分钟进行修复,现在已经浪费了 6 个小时试图弄清楚如何测试它:
即使我愿意重新设计整个东西;将 传递
TransactionCount
给每个子对象,每次更改似乎都是一个可怕的设计。方法,Validate
3 个孩子下来,需要知道是否有其他交易不是孩子需要知道其父母信息的系统中的唯一情况。如果父对象将所有这些信息传递给所有子对象,无论他们是否需要它,都是一种浪费——并且容易在某处错过更新。
此外,每次子-子-子对象进行新的内部检查时,它都必须重新设计它周围的所有对象——因此它们都可以传递可能需要或不需要的信息。
我怎样才能避免孩子按要求与父母交谈,同时又不让父母给孩子他们不想要的东西?
编辑:我正在等待测试的变化是:
至
delphi - Delphi:如何将类移出单元;避免循环引用
问题:我想将两个类拆分到自己的文件中,同时避免循环引用。
我有一个包含一些类(以及一些枚举和常量)的单元。任何人都会认出Click and Clack 的 Tappet 兄弟:
现在显然我的两个类TClick
并且TClick
相当复杂。为了便于管理,我想在不破坏任何现有外部代码TClick
的情况下拆分并分配TClack
给他们自己的单元。
我的第一次破解是:
完美,我有所有相同的课程,Cartalk.pas
现在我只需要写:Cartalk_Click.pas
Cartalk_Clack.pas
当然,问题在于,TTappetBrother
并且TSolution
没有在本单元中声明。因此,我们在 中添加了对他们居住地的引用uses
,看着它失败,并触及我问题的核心:
现在Cartalk
和之间有一个循环引用Cartalk_Click
。
注意:当然,我没有 Cartalk 装置,还有 Click and Clack the tapper 兄弟——这只是一个例子。实际上,我的单元中有 3 个类、20 个枚举和 293 个常量。
database - Delphi 5.0 通过代码打开 Interbase/FireBird 连接
这是老东西了!与delphi 5.0和interbase 1.6有关。
我正在尝试通过代码打开数据库连接。但是这段代码与启用连接有关,所有组件都是使用delphi拖放用户界面添加的:DataSource1、TForm1、DBGrid、DBNavigator等。
我有一个带有 DBGrid 和 DBNavigator 组件的 TForm。我还有一个 TIBQuery(与 DataSource1 相关联)与 SQLStrings 上的此代码:
在窗体上,我有这段代码来启用 DBNavigator 和 DBGrid 来显示 DB 值。数据库非常简单,只是一个表:NEW_TABLE 带有一个 VARCHAR 类型的 NEW_VALUE
出现消息:IBClientError with message 'Database not assigned'
OBS1:如果我在delphi用户界面上手动连接组件,与数据库的连接就建立了。
delphi - 用于主题化 StringGrid 的组件,例如 ThemedDBGrid
存在任何类似的组件来为 stringrid 设置主题,例如 与 delphi 5 兼容的ThemedDBGrid组件。
delphi - Delphi:如何以相反的顺序删除子类?
Mike Lischke 的TThemeServices
子类Application.Handle
,以便它可以WM_THEMECHANGED
在主题更改时接收来自 Windows(即)的广播通知。
它继承了Application
对象的窗口:
子类化的窗口过程然后按照它应该的那样发送WM_DESTROY
消息,删除它的子类,然后传递WM_DESTROY
消息:
该TThemeServices
对象是一个单例,在单元完成期间被销毁:
这一切都很好——只要 TThemeServices 是唯一一个将应用程序的句柄子类化的人。
我有一个类似的单例库,它也想挂钩Application.Handle
,这样我就可以接收广播:
当单元完成时,我的单例也同样被删除:
现在我们来解决这个问题。我不能保证某人可能选择访问ThemeServices
或的顺序DWM
,每个都应用他们的子类。我也不知道德尔福最终确定单位的顺序。
子类以错误的顺序被删除,并且应用程序关闭时发生崩溃。
怎么修?我如何确保我的子类化方法保持足够长的时间,直到其他人在我完成后完成?(毕竟我不想泄漏内存)
也可以看看
更新:我看到 Delphi 7 通过重写解决了这个错误TApplication
。><
呸呸呸
换句话说:尝试继承 TApplication 是一个错误,Borland 在采用 Mike 的TThemeManager
.
这很可能意味着没有办法以TApplication
相反的顺序删除子类。有人以答案的形式提出,我会接受。
delphi - Delphi 组件:如何使用父字体?
我有一个使用ParentFont
.
在构建组件期间,我可以看到最初组件的字体设置为默认值MS Sans Serif
:
检查节目Self.Font.Name: 'MS Sans Serif'
一段时间后,我的组件的字体会更新以反映父级的字体:
之后一切都很好,我的组件的字体已更改为父字体(例如`MS Shell Dlg 2')。
问题是我的子控件与它们父控件的字体(即我的组件)不同步。
在我的组件构造函数中,我创建了子控件:
最初我FpnlBottom
也有默认字体MS Sans Serif
。
稍后,当我的组件的字体已更新为其父字体(例如MS Shell Dlg 2
)时,子控件没有更新其字体,而是保持MS Sans Serif
.
- 为什么我的子控件的
ParentFont
财产没有得到尊重? - 如何使我的子控件的
ParentFont
属性起作用?
示例代码
工具两个小时将其精简为可管理、可重现的代码:
sql-server-2005 - 从 Delphi 5 中的 SQL Server 表中检索 longint 字段的正确方法
我在 SQL Server 2005 中有一个值为 -7590730850027557904 的字段,我正在通过 Delphi 5 中的 ADO 检索它,但我检索到的是 7590730850027557904 - 省略了负号。从 SQL Server 到 Delphi 5 检索 longint 值的正确方法是什么?
这是我的代码
delphi - Delphi XE环境下使用Delphi5
是否可以在不进行任何迁移的情况下在新的 XE IDE 中编译 Delphi5 项目?
如果使用 Delphi5 IDE 已经有一段时间了,老实说,它很旧、不友好且不灵活。我试用了 XE 并印象深刻,但是我对将项目迁移到较新版本的 Delphi 不感兴趣。
那么,有可能吗?如果没有,是否还有其他支持 Delphi5 的 IDE?