`
pqcc
  • 浏览: 124749 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Delphi 笔记

阅读更多

1. 如果在 { 或者 (* 后面有一个 $ 符号,表示该句为一个编译器指令,与普通的注释不同,通常用来对编译过程进行设置.
2. 对象命名: 单词首字母大写(建议),驼峰格式.
  T:类. F:私有成员 I:接口.
3. 代码的每一级向内缩进 2 格(第一层缩 2个空格).
4. Object Pascal  : ASCII 字符集.
5. 标示符命名: 常量,变量,类型,属性,对象,过程,寒暑,程序,单元,库,组件库.
  首字母大写,其他小写.
6. 变量 : var VariableName:type;
7.
   (1).局部变量在声明时不能进行初始化.
   (2).同时声明多个全局变量时,也不能对变量进行初始化.
   (3).没有进行初始化的情况下,所有局部变量被初始化为 0 .
   (4).当对象不再使用时,应当释放所占用的空间.
  (5).局部变量,在函数或过程执行完毕后,会自动释放.而全局变量不会(注意尽量避免全局变量).

8. 预定义类型::

  Integer:
 Integer: 2字节.
 Cardinal: 4 字节  
   shortint: 1 字节.
 smallint: 2 字节
 Longint: 4  字节
 int64: 8 字节
 Byte: 1 字节
 word: 2 字节.
 Longword: 4 字节.
  Single:
 Single:  4  字节  (7-8位有效小数部分)
 Double:  8  字节    15-16
 Extended:10 字节    19-20
 Boolean:
 true/false 1 字节
 Char:   ASCII字符
 String: 最多可达 255 个ASCII字符.
 Point:  可指向任何特定类型.
 Pchat:  一个指向以零结尾的字符串的指针.

---------------------------------------------------------------

9. Object Pascal 编译器不允许用一种类型的指针去调用另一种类型参数 ()
10. 所谓相同的类型是指包含这两个操作数类型所有可能取值的最小预定义类型. 
11. 字符类型:
 ANSIChar: 1 字节的ANSI字符,可存放 256 字符.
 WideChar: 2 字节的Unicode 字符.  
12. 浮点数据:
 Real48  6 字节,有效位: 11
 Single  4  6
 Double  8  15
 Extended 10  19
 Comp  8  19
 Currency 9  19
13. 字符串:
 AnsiString: 长度没有限制,与 null 结束的字符串兼容.
 shortstring: 255
 Widestring 与 ansiString 类似.

 $H 将 string 定义为 ShortString.
 $H- ShortString
 $H+ AnsiString.
 e.g Var
  {$H-}
    E1:string;

 如果在定义时特地指定了长度(最大在255个字符内),呢么就总是ShortString: S:string[63]

14. for i := 1 to 10 do
   Tdou[i]:=0.0;

 数组可以是多维的(定义一个20行,20列的数组).
 type
   Ttable = array[1..20,1..20] of Double;
 
 记录类型:
 
15. 指针类型:
 type pointerName=^typt;
16. 将 @ 方在变量前面,将获取变量的地址,并可以把地址赋值给同样数据类型的指针.
 把 ^ 放在一个数据类型前面,可以定义该类型的一个指针类型;如果放在一个指针后面,可以获取该指针指向的地址空间的内容.

17. 强制类型转换: b:=byte(c);
 只有两个变量的长度一样时,才能对变量进行强制类型转换.可以用 Trunc() 或 Round().
18. 函数只能出现在表达式中,不能单独使用,而过程不能出现在表达式中,仅能以某个语句出现.
19. delphi中,返回函数值的两种方式 :
 (1). 返回值由函数名返回.
 (2). 返回值由 Result 传回(推荐).

20. if ... then
   begin
  ....
   end
 else if ... then
  ....
  else

21.  循环语句:
  repeat
   statements  // execute code.
  util condition // execute condition.
22. 注意,与其他语言不同的是,"=" 是关系运算符,而不是进行赋值操作。
23.
  while condition do
  begin
   statements
  end;
24. 属性不能直接访问数据,有些属性是只读的,只能查看它们的值,而不能改变它们。
25. 类的定义:
  Type
   类名 = class
   // public  修饰符,该修饰符之后的所有声明都是公共的类型,直到遇到另一种存取控制符为止。
   Name:String;
   Age:Integer;
   Male:Boolean;
   // Constructor create();  构造函数.
   Procedure SetID(vname:String;vmale:Boolean)
   Function IsAdult:Boolean;   
   构造函数的实现:
   Constructor Create();
   Begin
   Name:='myself';
   Age:=20;
   Male:=false;
   End;
   
26. 用户自定义的类对象,必须手动创建,而控件的实例则可由Delphi自动创建。
27. 要创建类的对象,可以调用 Create.
  Aman := Tmeber.Create();
28. 一定不要对没有初始化的类对象使用析构函数,只有当类使用构造函数时才真正进行内存分配。
29. 对象存在,或者对象不是 null 时才可以调用构析函数 destructor。
  应用程序应当调用 free ,free 不会自动将对象设置成 null,这是用户自己的工作.
30. public,private,protected,published, automated.
  --> protected 成员可以被该类的所有派生类访问,并且成了派生类的私有成员。
    *注意,使用派生类的用户无法访问保护成员。
  --> published: 成员可见性最高
  --> automated: the same with public without that the property and function of automated generate 自动类型信息。

31. 多态性: (继承)
  重载: 重载的方法必须与基类中的同名虚拟方法在参数个数,参数顺序和数据类型上完全相同。如果是函数的话,返回类型也
     必须相同。
32. 除非特别指明,否则声明的方法都是静态方法。
  * 静态方法:启动速度快,因为编译器可以确定方法的确切地址。
  * 如果一个类中包含一个静态方法,呢么他的派生类将在相同的地址共享相同的方法.-->这意味着不能重载静态方法.
  *  如果在派生类声明了一个与基类中的静态方法同名的方法,呢么新的方法将代替旧的方法.(覆盖)
33. 虚拟方法:
   procedure Paint(x,y:Integer);Virtual;
   
  重载方法:
   procedure Paint(x,y:Integer);Override;
  * 重载错误:
   (1).该方法在父类中不存在.
   (2).父类中的该方法是静态的.
   (3).声明不是完全相同(the type or number of the parameter is invalid);
   
  动态方法:(Dynamic)
  
  * 减少内存的消耗,但执行比虚拟方法慢.
    如果一个方法需要经常调用 --> 虚拟类型.
  *  在声明抽象方法时,Virtual 或 Dynamic 必须出现在 Abstract 指令之前.
  * Dephi 不能创建包含抽象成员的类实例.
    当从抽象类派生一个新类时,必须实现这个抽象的方法,否则这个新类也是抽象类,无法实例化.  
34. Exception 类是从 SysUtils  单元中定义的.
35. 
  try
   content 1;
   ...
   content n;
  except
  on 异常情况  do  处理语句;
  on 异常情况 do 处理语句;
   else
   处理语句;
  end;
  同样的: try {...} finally {...};
  遇到 exit,break,continue 将不会执行 finally.
36. raise 语句:
  * 调用一个异常类的构造函数,并抛出一个异常.
   raise EInOutError.Create
   e.g
    raise Object at address.(address 指向一个过程或者函数的指针).  
37. 取消备份:
  Tools/Editor Options ->Display,取消对 Create backup file属性的选择.
38. 
  项目文件: .dpr
  单元文件(源代码):  .pas
  窗体文件:  .dfm
  中间编译单元 .dcu
  备份文件:  .~pas
  资源文件:  .res
  应用程序文件: .dll, .exe, .ocx
  配置与选项文件(.dof)
  
39. 单元的各个部分:
  Unit 语句:
  接口 部分:
40. 当要引用指针所指向的变量时,必须在指针后使用 " ^ ".
41. 逻辑运算符:分逻辑 运算符 和 布尔运算符。
 逻辑运算符:
  Not: 非
  And: 与
  Or:  或
  Xor: 异或
  Shl: 左移
  Shr: 右移
  
  关系运算符:
  
  等于  =
  不等于 <>
  包含于 <= 小于或等于<=
  保护  >=

 

 

 

 

 

 

 

1. 按“Delete”键可以将该部件删除。
2. ColorDialog 这一部件是不可视部件,所以它的位置并不影响大局。
3. 锁定部件:选择主菜单上的Edit|Lock Controls选项,使得部件不能进行移动操作。解锁只需再次选择此项即可。
4. 库单元文件(以.PAS为后缀)和工程文件(以.DPR为后缀)。
 不要把库单元和工程存成一样的文件名,Delphi要求两者不同。
5. 将它的Caption属性改为“&Rectangle”,“&”号使得Delphi特殊处理它后面的字符,在这里,按钮中的R字母被做了下划线   处

理,运行时,可以用“Alt-R”热键来按动这一按钮。 

6. 设置窗体的缺省按钮:只需将此按钮的Default属性从False改成True,即将它设为窗体的缺省按钮。
7. 汉化界面及字体选取: 例如,您可以将Button1的Caption属性改成“&R矩形”。
8. 在按钮中加入一个图标来形象地表述它的功能:选用Object Inspector中的Glyph属性,点动值段的三点按钮,弹出图形编辑对话框。
9. Delphi还为您提供了丰富的Windows标准图标按钮。想运用它们,改变BitBtn的Kind属性。用户不妨尝试一下,选择其它值可以生成漂  亮

的标准按钮,如OK,Cancel等等。这会使您在以后的程序开发中受益匪浅。
10. 使Shape部件的形状为矩形: Shape1.Shape := stRectangle;

11. 图标按钮“Color”要控制部件Shape1的颜色:
 ColorDialog1.Execute;
   Shape1.Brush.Color := ColorDialog1.Color;
12. Style下又拥有四个属性:fsBold,fsItalic,fsUnderline和fsTrikeOut。
13. 但要申明的是,对于窗体Form来讲,Font属性改变的是窗体中其它部件的显示字形,它本身的标题字体是缺省的System字体,不能通  过

属性来改变。

14. ColorDialog1.Execute;
   Shape1.Brush.Color := ColorDialog1.Color;
 程序的第一句用Execute方法,使得ColorDialog运行它本身。
15. MaskEdit(格式编辑)、Memo(备注)、List Box(列表框)、Combo Box(组合框)。
16. Label部件:
17. Caption属性值段中输入含有“&”的字串,当用户使用“Alt+关键字母”时,将自动选中它所指向的对象。方法是设置Label部件的  

FocusControl属性,在值段中,选用与它关联对象的对象名。 
18. Edit、MaskEdit和Memo部件:ReadOnly在运行时间内控制对象是否可以进行Windows的操作,当此值为False时,该框内的文本就不能  被

复制到剪贴板上。
19. PasswordChar属性可以按照显示隐蔽密码的方法显示用户输入文本。
20. 当一个字段被加上高亮度显示时,按键操作会将这一字段删除,替换成当前的键盘输入。这种设置为操作提供了方便,您不必每次先  删

除原来的文本;但也可能会导致误删文本。将AutoSelect属性设置成False,这种替代功能就被取消了。
21.  MaskEdit是格式文本输入对象。它的EditMask属性为它提供了过滤文本的格式。
22. Memo是备注框,与以上对象不同的是,它可以接收多行文本输入。将ScrollBars设置成ssVertical,可以为它加上一个垂直的滚行条  。

Align属性调整该对象在窗口中的对齐情况,有alNone(无对齐指定)、alBottom(底部对齐)、alClient(全窗口显示)等可以选择;

23. 需要提起读者注意的是,用多个Speed Button制作一个工具条时,必须先放置一个窗口类部件,如Panel(操作板)、Group Box(群组框  )

等。否则试图将加速按钮先制作好再移上去,您会发现它会总是处于窗口类部件下面不可见。

24. Check Box(检查框)和Radio Button(无线按钮)部件通常是相提并论的,多用作接收用户“是”或“否”的输入判别。它们一般都是成  组

的放置在Radio Group或Group Box部件中。所不同的是,成组的Radio Button是“互锁”的,用户选择定一个后,其它的将自动设  置为不选;

而Check Box部件则是分立的,您可以同时选中其中的几个,也可以一个都不选。 

25. 记事本部件NoteBook一般和标签集部件TabSet共同使用,用来创制含有标签的重叠多窗体窗口。Pages属性包含了一个页名列表,在编  程

时,将TabSet的Tabs属性设置成NoteBook的Pages属性,就可以使页标签和相应的窗体对应起来。

26. 另外一个部件TabbedNoteBook是带有标签的多窗体窗口,不过,它的页标签设在窗口的上面。它们相当于多个分组部件的集合,每次  查

看其中的一页。

27. 在Win 3.1页上,还有Header(表头)部件,它在窗口中产生一个凸起的题条,提供了一个可视化的文本显示区域。Additional页的  

Bevel(立体框)部件提供了一个方框,它的单一线条或整个边框都可以通过Style属性设置为外凸或内凹,可以美化窗口。在Win95页上  

HeaderControl、StatusBar等部件,为您使用Winows95风格的界面提供了重要元素。

28. Image 部件:
 属性:Autosize和Strech。它们决定了图象在窗口中的显示尺寸。Autosize属性为True表示按原尺寸显示,Strech属性为True表示图  象

按对象图框的大小显示,这时图象的大小可以人为改变。

29. Shape部件:
 Pen和Brush的嵌套属性,可以设置图形边框颜色、线型及图形的风格、填充方式、贴图方式等。

30. PaintBox部件:
 PaintBox部件不能单独存在于窗体中,必须把它放在固定的分组部件中。 

31. OutLine部件:
 它适用于显示分层的数据、文本。它的Lines属性可以设置每一词条的文本或数据。一般一个空格相当于一个层次,如果在项目前加一  个

空格则表示它处于树的下一层。所以在进行Lines属性编辑的时候不能用Tab键。

32. FileListBox显示当前目录中的文件,缺省的设置是显示所有文件。通过改变Mask属性来设置过滤器,可以适用DOS的标准通配方式,  选

择要显示的文件名。当指定多个过滤器时,之间用“;”隔开。

33. DirectoryListBox显示当前驱动器内的目录,并且允许用户在程序执行时切换目录。Column属性决定目录在窗口中用多少列进行显示

34. DriveComboBox显示当前所在的驱动器,并且在执行时允许用户在驱动器之间切换。作为程序员在应用这一部件时,应考虑当用户选择  到

不存在的驱动器时,进行容错、提示处理。

35. FilterComboBox(过滤式下拉文件列表框)部件显示当前文件过滤器类型,例如*.*,*.pas等。在执行时允许用户在下拉列表中选择要  显

示的文件类型。对Filter属性进行初始化,就会得到下拉式列表。

36. ScrollBox部件:
 如果您只想显示较大幅面的一个部分,并允许您的用户对其进行滚行操作,ScrollBar将是理想的选择。

37. 几个进度显示部件:
 System、Sample、Win 95、OCX等页上,Delphi还为用户提供了几个部件,完成显示进度,增量等操作。部件Gauge可以显示成长条状  的

或饼状的进度指示仪表。

38. 使用计时器部件Timer:
 在System页上,还有一个(Timer计时器)部件,它能够有规律地触发OnTimer事件,发送信息给应用程序。它是编制应用程序时最为重  要

的部件之一。

 Enabled属性表示了计时器打开还是关闭;用Interval属性设置两个OnTimer事件间的间隔,单位是毫秒,也即千分之一秒。将间隔置  为

0 相当于关 闭计时器,Interval的最大允许值是32767,也即32.767秒。

39. OpenDialog和SaveDialog部件:
 Filter属性提供了文件过滤器。FileEditStyle决定在输入文件名时用Edit还是Combo- Box;设置为fsComboBox时,允许使用历史列表  

HistoryList属性,使用[TStrings]的省略按钮可以编辑历史列表。您也可以编程实现将HistoryList属性设为以前用OpenDialog打开  的文件名历

史列表。

40. if语句可以嵌套,当使用复合语句表达时,复合语句前后需加上begin…end。else保留字前不能加“;”.

41. case Number of
 1,3,5,7,9: Label2.Caption := '奇数';
 0,2,4,6,8: Label2.Caption := '偶数';

42. repeat
 i := i+1;
 Writen(i);
 until i=10; 

43. var
 i : integer;
 for i := 1 to 5 do
 writeln(i);
 
44. 库单元Unit1中有事件处理过程CalculateInterest过程,现在您想在库单元Unit2中调用这一过程,则可以在Unit2的uses子句中加入  

Unit1,并使用下面的说明: 
 Unit1.CalculateInterest(PrincipalInterestRate : Double); 

45. 库单元的全局变量一般可以说明在保留字implementation后面.

46. procedure validateDate(Day : Integer; month : Integer; Year : Integer);
 您也可以将相同类型的参数组合在一起,则上述过程头写作: 
 procedure ValidateDate(Day, Month, Year : Integer);

47. function CalculateInterest(principal,InterestRate:Double):Double;

48. 每一个类型的名称都是由字母T开始,这并非必须的,但它是Delphi的惯例,在区别类型名和标识符时非常有用。

49. 类型说明可以是局部的,也可以是全局的。如果您把它放在implementation后面,则表明对于库单元来讲,它是全局的,所有的事件 
 处理过程和其他的过程、函数都可以调用它。如果类型是在过程中被说明的,则是局部的,离开这一过程,该类型将失效。
 type
 Tcount = Integer;
 TPrimaryColor = (Red,Yellow,Blue);
 TTestIndex = 1..100;
 TTextValue = -99..99;
 TTestList = array [TTestIndex] of TTestValue;
 TCharVal = Ord('A')..Ord('Z') ;
50. 在Implementation后面的过程和函数,可以且只能被此库单元的事件处理过程使用。要让过程和函数可以被其他的程序库单元使用,  则

需要将过程或函数的标题部分放在库单元中的interface部分,而把含标题的整个过程或函数放在库单元的inplementation部分,并  在要访问这

个过程或函数的库单元的uses子句中加入说明这个过程或函数的库单元名称。 

51. 在递归调用中,函数要进行前置,即在函数或过程的标题部分最后加上保留字forword。

52. 最常用的参数有数值参数、变量参数和常量参数三种。

53. 由被调用过程或函数定义的参数为形参,而由调用过程或函数指明的参数叫实参。
 当一个变参被传递时,任何对形参所作的改变会反映到实参中。

54. 子界类型: TWorkDay = Monday..Friday;

55. 数组类型:
  var
  Check : array [1..10] of Double;
 您也可以把数组定义成类型:
  type
  TCheck = array[1..10] of Double;
 则变量说明改为:
  var
  Check :TCheck; 
  数组也可以是多维的,下面的类型定义了一个20行、20列的数组。
  type
   Ttable = array[1..20,1..20] of Double;
  var
   table1:TTable; 

56. 字符串类型:
 type
 MyString: string[15];
 var
 MyName: MyString;
 MyName被说明成为最多可以包含15个字符。如果您没有说明字符串的大小,Delphi会认为字符串包含最大值255个字符。给字符串赋值  可

以直接使用单引号括起的字串赋值: 
  MyName := 'Frank.Smith'; 或MyName := '张明'; 

57. 集合类型: set of char
58. 记录类型:
59. unit <库单元名称> 
 interface 
 uses <选择性的库单元列表>
 {公有说明} 
 implementation 
 uses <选择性的库单元列表>
 {私有说明}
 {过程和函数的执行部分}
 initialization {选择性的}
 {选择性的初始化程序}
 end. 

60. 如果B出现在A的interface部分的uses子句中,那么库单元A便不能出现在B的interface的uses子句中。因为这样会产生对库单元的循  环

访问。当试图编译时,会产生出现错误信息。
61. 如果A的implemetation的uses子句中出现B,则B的implementation部分也可以出现A。

32. 将库单元加入工程:
 选用File|Open File,然后选择您想加入的源程序(.PAS文件),并选择OK即可。 

33. 用Create方法建立对象实例:
 Employee := TEmployee.Create;
 销毁对象:
 Delphi的注销方法有两个:Destroy和Free。Delphi建议使用Free,因为它比Destroy更为安全,同时调用Free会生成效率更高的代码

34. 字符串加至列表尾部,使用Add方法,把字符串作为参数传递。
 要把字符串插入列表中,使用Insert方法,传递两个参数:插入的位置和字符串。
 e.g: 把“Three”插入至列表中的第三个位置,使用代码Insert(2,'Three')。

35. Move方法可实现字符串的移动,它有两个参数:现行位置和要移动的位置。Move(2,4); 
36. 装载、保存字符串列表:
 使用LoadFromFile方法从文件中装载字符串列表,LoadFromFile从文本文件中把每一行字符串装入列表中。

37. 短期字符串列表 vs 长期字符串列表.
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
38. ~往字符串列表中加入对象.
 ~把图像加入字符串列表.

39. TMemo部件与TEdit部件类似,能向用户显示数据,用户也可输入数据。与TEdit 部件不同的是,TMemo部件可以处理多行文本,因此主  要

用于编辑文件。

40. 响应鼠标事件: 
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━
   参数      含义
 ──────────────────────────
   Sender 探测鼠标动作的对象
   Button 涉及的鼠标按钮:左键,中键,右键
   Shift 鼠标动作时,Alt,Ctrl,Shift按钮的状态
   X,Y 事件发生时鼠标的坐标
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
41. 一般工程文件的格式为: 
    program   工程标题;
    uses     子句;
   程序体 
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
   DLLs工程文件的格式为: 
    library 工程标题;
    uses 子句;
    exprots 子句;
   程序体 

42. 根据DLLs完成的功能,我们把DLLs分为如下的三类:
 .完成一般功能的DLLs;
 .用于数据交换的DLLs;
 .用于窗体重用的DLLs。
43. Delphi还支持异构查询,即可以同时查询多个数据库服务器中相同的或不同类型的数据库表,例如查询的数据可以是来自ORACLE数据  库

中的表和Sybase数据库中的表或者其它多个数据库中的表。

44. exit; 退出.


  

0
5
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics