Delphi的一些重要语法

简介:






本文转自 xkdcc 51CTO博客,原文链接:http://blog.51cto.com/brantc/116479,如需转载请自行联系原作者  一.        流程控制语句

      1.1          Case Statements

case用法1
      case I of
1..5: Caption := 'Low';
6..9: Caption := 'High';
0, 10..99: Caption := 'Out of range';
else
Caption := '';
end;
case用法2   
      type
  Tperson = record
  FirstName, LastName: String[40];
  BirthDate: Tdate;
  Case Citizen: Boolean of
True: (Birthplace: String[40]);
False: (Country: String[20];
         EntryPort: String[20];
         EntryDate, ExitDate: TDate);
  End;
 

二.      类型

2.1          过程类型

 
过程类型用法1
      type
  TIntegerFunction = function: Integer;
  TProcedure = procedure;
TStrProc = procedure(const S: String);
TMathFunc = function(x: Double): Double;
var
  F: TIntegerFunction;
  Proc: TProcedure;
  SP: TStrProc;
  M: TMathFunc;
过程类型用法2(过程函数作为参数)
      procedure FuncProc(P: TIntegerFunction);
过程类型用法3(引用一个实例对象的方法)
      type
  TMethod = procedure of object;
  TNotifyEvent = procedure(Sender: TObject) of object;
var
  MainForm: TMainForm;
  OnClick: TNotifyEvent;
...
  OnClick := MainForm.ButtonClick;
      用法3的类型表示方法指针。方法指针实际上是一对指针:第一个存储方法的地址,第二个存储方法所属的对象的引用。
Ø          过程指针和方法指针是不兼容的
Ø          nil 可以赋给任何过程类型
Ø          嵌套的过程和函数(在其它例程中声明的例程)不能被用作过程类型值,内置的过程和函数也不可以。
若想使用内置的过程作为过程类型值,比如
Length ,你可以给它加一个包装:
function FLength(S: String): Integer;
begin
  Result := Length(S);
end;
注意1(在赋值语句中):
      左边变量的类型决定右边的过程(或方法)指针的解释,比如
var
F, G: function: Integer;
I: Integer;
function SomeFunction: Integer;
...
F := SomeFunction; // SomeFunction 赋给F
G := F; // 拷贝G
I := G; // 调用函数,把结果赋给I
个赋值语句把一个过程类型值赋给F,第个语句把这个值拷贝给另一个变量,第个语句调用引
用的函数并把结果赋给I。因为是一个整数变量,而不是过程类型,所以最后的赋值实际上是调用函数
(它返回一个整数值)。
注意2(在boolean判断中):
      在一些情况下,如何解释过程变量并不是很清楚,看下面的语句
if F = MyFunction then ...;
在此情况下,导致函数调用:编译器调用指向的函数,然后调用函数MyFunction,然后比较结果。
规则是,只要过程变量出现在表达式中,它就表示是调用引用的过程或函数在上面的例子中,若引用一个过程(没有返回值),或引用的函数需要参数,则引发编译错误。要比较MyFunction 的过程值,使用
if @F = @MyFunction then ...;
@F 转换为无类型指针变量,它包含的是地址,@MyFunction 返回的是MyFunction 的地址。
注意3
      过程变量可以是nil 值,但此时调用它会引发错误。
要测试一个过程变量是否被赋值,使用标准函数
Assigned
if Assigned(OnClick) then OnClick(X);
 
 
 
 
 

      三.      

 
 
 

      四.      接口

目录
相关文章
|
API Python
局域网管理软件中的设备发现和自动添加代码示例
在局域网管理软件中,设备发现和自动添加是很重要的功能,能使管理员能够轻松地监视和管理网络上的各种设备。本文将介绍一些设备发现和自动添加的代码示例,以帮助开发人员更好地理解如何实现这些功能。
509 0
|
C# 索引 Windows
Winform控件优化之TabControl控件的使用和常用功能
TabControl是一个分页切换(tab)控件,不同的页框内可以呈现不同的内容,将主要介绍调整tab的左右侧显示、设置多行tab、禁用或删除tabpage、隐藏TabControl头部的选项卡等
7949 0
Winform控件优化之TabControl控件的使用和常用功能
|
C# 容器
Winform控件优化之TabControl控件的美化和功能扩展
在基本的TabControl控件使用和功能之上,可以尝试对其进行美化和功能扩展,比如动态删除或添加tab、绘制图标按钮及鼠标hover时的背景变化、Tab从右向左布局的优化处理等。最重要...
3824 0
Winform控件优化之TabControl控件的美化和功能扩展
|
5月前
|
安全 数据安全/隐私保护 Windows
乱删文件,电脑不能开机,怎么办
很多朋友在清理电脑时误删系统文件,导致黑屏、蓝屏、无限重启等问题。本文详解误删关键文件后的修复方法,包括安全模式修复、系统恢复工具、命令提示符修复引导、系统还原及重装系统等方案,帮助你应对电脑无法开机的困境。
|
11月前
|
存储 程序员 编译器
什么是内存泄漏?C++中如何检测和解决?
大家好,我是V哥。内存泄露是编程中的常见问题,可能导致程序崩溃。特别是在金三银四跳槽季,面试官常问此问题。本文将探讨内存泄露的定义、危害、检测方法及解决策略,帮助你掌握这一关键知识点。通过学习如何正确管理内存、使用智能指针和RAII原则,避免内存泄露,提升代码健壮性。同时,了解常见的内存泄露场景,如忘记释放内存、异常处理不当等,确保在面试中不被秒杀。最后,预祝大家新的一年工作顺利,涨薪多多!关注威哥爱编程,一起成为更好的程序员。
548 0
|
6月前
|
Java API 微服务
2025 年 Java 校招面试全攻略:从面试心得看 Java 岗位求职技巧
《2025年Java校招最新技术要点与实操指南》 本文梳理了2025年Java校招的核心技术栈,并提供了可直接运行的代码实例。重点技术包括: Java 17+新特性(Record类、Sealed类等) Spring Boot 3+WebFlux响应式编程 微服务架构与Spring Cloud组件 Docker容器化部署 Redis缓存集成 OpenAI API调用 通过实际代码演示了如何应用这些技术,如Java 17的Record类简化POJO、WebFlux构建响应式API、Docker容器化部署。
333 5
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
监控 网络协议 网络安全
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
630 2
|
人工智能 安全 Java
【Java】完全适配各类中小医院专科医院和诊所的云HIS系统源码
【Java】完全适配各类中小医院专科医院和诊所的云HIS系统源码
706 2
【Java】完全适配各类中小医院专科医院和诊所的云HIS系统源码