Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 没有发送方的调用过程_Delphi_Delphi 7 - Fatal编程技术网

Delphi 没有发送方的调用过程

Delphi 没有发送方的调用过程,delphi,delphi-7,Delphi,Delphi 7,我试图调用一个过程ListBox1DrawItem(控件:TWinControl;索引:Integer;Rect:TRect;状态:TOwnerDrawState)但当我调用它ListBox1DrawItem(Control)或我放在那里的任何东西时,它会显示未声明的标识符 有人能帮忙吗?OnDrawItem处理程序是TForm1类的一个方法,因此需要在有效的TForm1对象上调用它,例如: 程序TForm1.ListBox1DrawItem(控件:TWinControl; 索引:整数;Rect

我试图调用一个
过程ListBox1DrawItem(控件:TWinControl;索引:Integer;Rect:TRect;状态:TOwnerDrawState)但当我调用它
ListBox1DrawItem(Control)
或我放在那里的任何东西时,它会显示
未声明的标识符


有人能帮忙吗?

OnDrawItem
处理程序是
TForm1
类的一个方法,因此需要在有效的
TForm1
对象上调用它,例如:

程序TForm1.ListBox1DrawItem(控件:TWinControl;
索引:整数;Rect:TRect;状态:TOwnerDrawState);
开始
...
结束;
程序TForm1.DoSomething;
开始
...
{Self.}ListBox1DrawItem(ListBox1,DesiredIndexGoesher,Rect(Desired,Values,Go,Here),DesiredStateGoesher);
...
结束;
如果要从另一个类调用
ListBox1DrawItem()
,仍然需要访问
TForm1
对象,例如:

使用
…,第1单元;
程序TForm2.DoSomething;
开始
...
Form1.ListBox1DrawItem(Form1.ListBox1,DesiredIndexGoesher,Rect(Desired,Values,Go,Here),DesiredStateGoesher);
...
结束;

我不太了解您的情况。首先,如果这是一个
TListBox
OnDrawItem
处理程序,那么它必须是
过程TSomething.ListBox1DrawItem(…)
。其次,显然不能执行
ListBox1DrawItem(控件)
,因为必须提供所有四个参数。最后,也是最重要的,您根本不应该调用此方法。当需要重新绘制项目时,Windows将通过VCL调用它。但是,如果出于某种原因您仍然“需要”调用它,您可以传递,例如,
ListBox1
作为控件。这可能就是你想要的(但我看不到你的代码)。是的,对不起,我的错。它有
TForm1.ListBox1DrawItem(Control:TWinControl;Index:Integer;Rect:TRect;State:TOwnerDrawState)
Secondary,我甚至不知道应该在()中输入什么。正如我所写的,您根本不需要调用
ListBox1DrawItem
。您不应该调用此过程:当需要重新绘制项目时,Windows将(间接)调用此过程。因此,由于您不需要调用此过程,因此不需要知道要传递哪些参数!:)但是,如果出于某种奇怪的原因,您已经构建了代码,因此确实需要调用它(在这种情况下,您应该重构),那么您可以传递相关的列表框控件,很可能是
ListBox1
@Pheggas请提供一个演示“未声明标识符”错误的示例。为什么会被否决?这是对所提问题的完全合法的回答。它可能不是最好的设计选择,但确实有效。这不是否决的理由。更合适的方法是让事件处理程序调用另一个方法。然后,不属于VCL框架的代码可以调用另一个方法。作为一项基本原则,只有框架应该直接调用事件处理程序。@DavidHeffernan我知道这种方法,但即使这样做也不能解决OP关于“未声明标识符”错误的问题。这种方法与
ListBox1DrawItem
的作用域相同,并且在OP试图调用它的作用域中同样未声明。我对OP(post)及其注释的解释是OP(poster)不知道传递什么作为
控件
参数。但问题确实很不清楚(但我没有投反对票,只是为了记录在案)