请教两个基础性的问题,望各位给予解答(50分)

  • 主题发起人 主题发起人 txwz
  • 开始时间 开始时间
T

txwz

Unregistered / Unconfirmed
GUEST, unregistred user!
最近不知道学点什么好于是就看起了VCL原码,碰到了两个问题
1。我看见原码中有这样的声明 TRoot = type string;
这是什么语法啊,它是在做什么呢?
2。在写组件时,改变一个属性的写方法有三种实现方法,比如改变组件外观时有调用paint,repaint,ReCreateWnd,CreateWnd,Invalidate(目前我所知道的)等,
这几个方法都具体在什么情况下需要使用?使用时都需要注意什么,比如需要改变那些对应的那些参数,(比如调用CreateWnd时需要改变CreateParams参数)。
除了上边所说的5个方法,常用的还有什么其他的方法吗?
 
坐下听课!
 
1 这是一个类型声明,也就表示TRoot(自定义类型)就是string类型。
2 这个我是一时半会说不清楚的,也坐下听高手讲课。
 
谢谢风林坡,等结贴的时候给分啊。
希望再有高手出来指导我们三个
 
应该踏实学习了呀!
 
paint,repaint,ReCreateWnd,CreateWnd,Invalidate
当中依据个人喜好,比如CreateWnd就是在创建的时候做。
paint一般表示系统发送一个wm_paint的消息,然后调用的过程。
repaint一般表示强制重画。
 
我来回答第一个问题。以下是Delphi联机帮助的解释,type的用法:
A type declaration specifies an identifier that denotes a type. The syntax for a type declaration is

type newTypeName = type

where newTypeName is a valid identifier. For example, given the type declaration

type TMyString = string;

you can make the variable declaration

var S: TMyString;

A type identifier's scope doesn't include the type declaration itself (except for pointer types). So you cannot, for example, define a record type that uses itself recursively.

When you declare a type that is identical to an existing type, the compiler treats the new type identifier as an alias for the old one. Thus, given the declarations

type TValue = Real;
var
X: Real;
Y: TValue;

X and Y are of the same type; at runtime, there is no way to distinguish TValue from Real. This is usually of little consequence, but if your purpose in defining a new type is to utilize runtime type information--for example, to associate a property editor with properties of a particular type--the distinction between "different name" and "different type" becomes important. In this case, use the syntax

type newTypeName = type type

For example,

type TValue = type Real;

forces the compiler to create a new, distinct type called TValue.

For var parameters, types of formal and actual must be identical. For example,

type
TMyType = type Integer
procedure p(var t:TMyType);
begin end;

procedure x;
var
m: TMyType;
i: Integer;
begin
p(m); //Works
p(i); //Error! Types of formal and actual must be identical.
end;

Note

This only applies to var parameters, not to const or by-value parameters.
他解释清了type mytype = type 与 type mytype = type type的区别。我怕翻译的不好所以贴上原文。
 
我大概解释一下,如果你定义:
type TValue = Real;
var
X: Real;
Y: TValue;
编译器把TValue当成Real的别名,在运行时x,y都是Real类型,而且无法区分他们的类型。如果你是这样定义的:
type TValue = type Real;
var
X:Real;
Y:TValue;
这样运行时X,Y是不同的类型,新类型有自己的运行时信息,这在某些时候是必要的,如把某种类型的属性连接特定的属性编辑器时。
 
受教,谢谢各位的回答了,发份了
 
还没有发分啊!!
 
发份,不知道为什么上次没有发出去
 
后退
顶部