像这样的想法不知怎么实现。
procedure A(x : Tx);
参数x的类型是动态改变的,而且参数x的类型都是自定义的类型。
那么又如何声明过程呢?我不想因为参数不一样写很多类似的过程。
procedure A(x : Tx);
参数x的类型是动态改变的,而且参数x的类型都是自定义的类型。
那么又如何声明过程呢?我不想因为参数不一样写很多类似的过程。
解决方案 »
- 刚下定决心学delphi,可是同学的一句话,让我心又要冷了,他说的对吗?
- 窗体自动大小
- 有关fastreport的客户自定义报表设计器question.....
- 哪位在delphi中用MapX4.5开发过软件,帮我解决一个速度问题
- 找啊找找到一个好朋友!
- 运行select后,在DBGrid中,从一行移到另一行会触发什么事件?
- 请问到哪儿可以找到ascii字符对应的虚拟码?
- 500分请教!!高手请进!关于WINDOWS消息及WIN API函数的问题?在线等待!急!!!!!!!
- 哪有好的算法书下载呢?
- 为什么GetDiskFreeSpaceEx(nil,userFreeBytes,totalBytes, @freeBytes) 要加个@?
- 高手请进
- 初來乍到,散分先,嘿嘿.........
procedure A(x : variant);
...
...
procedure B(Sender: TObject);
begin
A(y);//y为自定义的record类型
end;提示错误:类型不兼容
应该如何写?
还可以用Pointer型;下面这种不知道可不可以,好像行啊,试一下
Procedure fuk(var a)
用此参数标识该Point的类型,再作处理,不知道这样行不行
procedure A(var params);具体使用可以参考op手册。
当声明var、const 和out 参数时,你可以省略类型说明(数值参数必须指定类型)。比如,
procedure TakeAnything(const C);
声明一个叫做TakeAnything 的过程,它可以接受任何类型的参数。当你调用这样一个例程时,你不能向
它传递numeral or untyped numeric constant。
在过程体或函数体中,无类型参数和每个类型都不兼容。要对一个无类型参数进行操作,你必须对它进
行转换。通常,编译器不会对无类型参数检验它的有效性。
下面的例子在Equal 函数中使用无类型参数,这个函数比较两个参数中指定数目的字节。
function Equal(var Source, Dest; Size: Integer): Boolean;
type
TBytes = array[0..MaxInt - 1] of Byte;
var
N: Integer;
begin
N := 0;
while (N < Size) and (TBytes(Dest)[N] = TBytes(Source)[N]) do
Inc(N);
Equal := N = Size;
end;
给定下面的声明
type
TVector = array[1..10] of Integer;
TPoint = record
X, Y: Integer;
end;
var
Vec1, Vec2: TVector;
N: Integer;
P: TPoint;
你可以如下调用Equal:
Equal(Vec1, Vec2, SizeOf(TVector)) // 比较Vec1 和Vec2
Equal(Vec1, Vec2, SizeOf(Integer) * N) // 比较Vec1 和Vec2 的前N 个元素
Equal(Vec1[1], Vec1[6], SizeOf(Integer) * 5) // 比较Vec1 的前5 个元素和后5 个元素
Equal(Vec1[1], P, 4) // 比较Vec1[1]和P.X、Vec1[2]和P.Y