delphi初学实用技巧一

一、枚举

1、枚举类型的定义
格式: type 枚举类型标识符=(标识符1,标识符2,…,标识符n)

2、枚举类型数据特点

① 枚举元素只能是标识符;

例如,下列类型定义是合法的:
      type  days=(sun,mon,tue,wed,thu,fri,sat);
          colors=(red,yellow,blue,white,black,green);
       而下列类型定义是错误的:
     type colortype=('red','yellow','blue','white');
            numbers=(1,3,5,7,9);

定义枚举类型时列出的所有枚举元素构成了这种枚举类型的值域(取值范围)。
 

② 枚举类型属于顺序类型
   根据定义类型时各枚举元素的排列顺序确定它们的序号,且序号从0开始。

例如,定义type days=(sun,mon,tue,wed,thu,fri,sat);

则, ord(sun)=0,ord(mon)=1,……,以此类推。

枚举类型中的第一个元素无前趋,最后一个元素无后继。
       pred(sat)=fri; succ(sun)=mon; ord(sat)=6;
 

③ 同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。如下列定义是错误的:
   type color1=(red,yellow,white);
      color2=(blue,red,black); 

 因为red属于枚举类型color1和 color2
 
④ 枚举类型变量只能进行赋值运算和关系运算,不能进行算术运算和逻辑运算。
  在枚举元素比较时,实际上是对其序号的比较。

 例如定义如下:
    type days=(sun,mon,tue,wed,thu,fri,sat);
      colors=(red,yellow,blue,white,black,green);
    var color:colors;
      weekday:days;
 则下面语句是合法的:  weekday:=mon;
                     if weekday=sun then write('rest');
 而下面语句是不合法的:

mon:=1;           错把枚举值当成变量名;

weekday:=blue;   枚举值blue不属于枚举变量weekday的值域;

read(color);      枚举类型变量 不能用读语句进行赋值;

write(weekday); writeln(blue);不能通过写语句输出枚举类型的变量值和枚举值。
 

⑤ 可以把变量的说明与类型的定义合并在一起,如:
  var holiday,workday:(sun,mon,tue,wed,thu,fri,sat);
     color:(red,yellow,blue,white,black,green);

对枚举数据的输入与输出可通过间接方式进行。输入时,一般可输入一个代码,通过程序进行转换,输出时,也只是打印出与枚举元素相对应的字符串。这在后面的例题中将有使用示例。
 


二、枚举类型的应用
例1、输入今天是星期几的序号,输出明天是星期几的英文单词(星期天序号为0)。
  type weekday=(sun,mon,tue,wed,thu,fri,sat);
   var i : integer;
     today,tomorrow : weekday;
  begin
   writeln('What date is it'); readln(i);
   case i of                              { 根据输入转换成枚举型 }
    0:today:=sun;
    1:today:=mon;
    2:today:=tue;
    3:today:=wed;
    4:today:=thu;
    5:today:=fri;
    6:today:=sat;
   end;                          

if (today=sat) then tomorrow:=sun  else tomorrow:=succ(today);
    write('The tomorrow is ');   
   case tomorrow of
    sun:writeln('sunday');
    mon:writeln('monday');
    tue:writeln('tuesday');
    wed:writeln('wednesay');
    thu:writeln('thursday');
    fri:writeln('friday');
    sat:writeln('saturday');
   end;
  end.
    枚举类型是一种有序类型,所以枚举类型的变量可以作为循环变量。

    学习枚举类型时,注意枚举元素与变量的区别,以及枚举与变量的输入输出方法的处理

二、MessageBox的详细介绍
DELPHI中MessageBox的用法 MessageBox对话框 输入控件的   ImeName属性把输入法去掉就默认为英文输入了

 MessageBox对话框是比较常用的一个信息对话框,其不仅能够定义显示的信息内容、信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对话框信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对框。
 1、函数原型及参数
 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;
 hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。
 Text:欲显示的信息字符串。
 Caption:对话框标题字符串。
 Type:对话框类型常量。
 该函数的返回值为整数,用于对话框按钮的识别。
 2、类型常量
 对话框的类型常量可由按钮组合、缺省按钮、显示图标、运行模式四种常量组合而成。
 (1)按钮组合常量
 MB_OK = $00000000;         //一个确定按钮
 MB_OKCANCEL = $00000001;      //一个确定按钮,一个取消按钮
 MB_ABORTRETRYIGNORE = $00000002;  //一个异常终止按钮,一个重试按钮,一个忽略按钮
 MB_YESNOCANCEL = $00000003;     //一个是按钮,一个否按钮,一个取消按钮
 MB_YESNO = $00000004;        //一个是按钮,一个否按钮
 MB_RETRYCANCEL = $00000005;     //一个重试按钮,一个取消按钮
 (2)缺省按钮常量
 MB_DEFBUTTON1 = $00000000;     //第一个按钮为缺省按钮
 MB_DEFBUTTON2 = $00000100;     //第二个按钮为缺省按钮
 MB_DEFBUTTON3 = $00000200;     //第三个按钮为缺省按钮
 MB_DEFBUTTON4 = $00000300;     //第四个按钮为缺省按钮
 (3)图标常量
 MB_ICONHAND = $00000010;        //“×”号图标
 MB_ICONQUESTION = $00000020;      //“?”号图标
 MB_ICONEXCLAMATION = $00000030;    //“!”号图标
 MB_ICONASTERISK = $00000040;      //“i”图标
 MB_USERICON = $00000080;        //用户图标
 MB_ICONWARNING = MB_ICONEXCLAMATION;  //“!”号图标
 MB_IConERROR = MB_ICONHAND;      //“×”号图标
 MB_ICONINFORMATION = MB_ICONASTERISK; //“i”图标
 MB_ICONSTOP = MB_ICONHAND;       //“×”号图标
 (4)运行模式常量
 MB_APPLMODAL = $00000000;    //应用程序模式,在未结束对话框前也能切换到另一应用程序
 MB_SYSTEMMODAL = $00001000;   //系统模式,必须结束对话框后,才能做其他操作
 MB_TASKMODAL = $00002000;    //任务模式,在未结束对话框前也能切换到另一应用程序
 MB_HELP = $00004000;       //Help Button
 3、函数返回值
 0            //对话框建立失败
 idOk = 1        //按确定按钮
 idCancel = 2      //按取消按钮
 idAbout = 3       //按异常终止按钮
 idRetry = 4       //按重试按钮
 idIgnore = 5      //按忽略按钮
 idYes = 6        //按是按钮
 idNo = 7        //按否按钮

例子:messagebox(0,'没有选择播放类型','错误',MB_ICONEXCLAMATION );

--Application.MessageBox('MessageBox','警告',MB_ICONWARNING+MB_YesNo);
--MessageBox(Form1.Handle,'MessageBox','提示',MB_ICONINFORMATION+MB_OkCancel);
--MessageBox(Form1.Handle,'MessageBox','提示‘,MB_ICONINFORMATION+MB_OkCancel+MB_DEFBUTTON2);
-- if MessageBox(Form1.Handle,'MessageBox','提示',MB_ICONINFORMATION+MB_OkCancel)= idOk then
     begin
       ShowMessage('Ok');
     end;

三、Delphi中的构造函数

Delphi中所有类都继承自TObject ,Create默认不是虚方法 ,Destroy默认是虚方法.
VCL中组件继承的大多Create都被声明成虚方法了。

在Delphi当中构造函数当中的create与析构函数destroy大部分都是虚方法.可以覆盖.
被覆盖的函数必须是虚(virtual)的,或者是动态(dynamic)的.
 
(Constructors)构造函数,

  用来创建和初始化一个实例对象,  构造函数返回的对象的引用. 初始化对象是基于传给构造函数的参数值.
 当类引用调用构造函数时,若执行过程中发生异常,则自动调用析构函数destroy来销毁不完整的对象.
  声明为虚方法的构造函数,和声明为静态时时相同的.虚构造函数允许使用多态.
  构造函数的初始化过程:
 1.它在堆中为对象分配内存,并设置所有的有序类型的字段为0,把nil赋值给所有的指针和类类型的字段.使所有的字符串类型的字段为空.
 2.构造函数中指定的其他动作(命令)开始执行.
  在派生类中构造函数的初始化过程:
 1.调用继承下来的构造函数,对继承的字段进行初始化.
 2.然后对派生类中新引入的字段进行初始化.
    (以为构造函数总是把新对象分配的内存进行"清零"<clear>,所以,对象的所有字段开始时都是0<有序类型>,nil<指针和类>,空<字符串>或者unasslgned<变体类型>.所以,除非字段的值不为0或者空值,我们没有必要在构造函数当中初始化各字段);
type
 TShape = class(TGraphicControl)
 private
  FPen: TPen;
  FBrush: TBrush;
  procedure PenChanged(Sender: TObject);
  procedure BrushChanged(Sender: TObject);
 public
  Constructor Create(Owner: TComponent); override;
  Destructor Destroy; override;
  ...
 end;
  Constructor TShape.Create(Owner: TComponent);
 begin
   inherited Create(Owner);  // 初始化继承下来的部分 
 Width := 65;      //  改变继承下来的属性
 Height := 65;
 FPen := TPen.Create;    //  初始化新字段
 FPen.OnChange := PenChanged;
 FBrush := TBrush.Create;
 FBrush.OnChange := BrushChanged;
End;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值