当前位置:文档之家› delphi接口

delphi接口

delphi接口
delphi接口

第一章在Delphi中使用接口

1.1定义接口:

目的:什么是接口,以及和抽象类的关联以及不同点。

抽象类(备注理解接口最简单的方法)

永远不能创建一个抽象类的实例;

本身不能实现功能,依靠派生类实现;

接口

被申明为interface类型。接口名从字母I开始。类类型名从T开始。

所有的接口从IUnknown继承;

不能创建接口实例;

不能在接口中指定范围指示。所有的方法都是公有型(public),不能在接口中申明包括范围指示;

不能申明变量;接口只能决定提供什么样的功能,对于如何完成功能没有限制;接口中申明的所有函数和过程,概念上都是虚抽象函数和过程;因此申明时不能带Virtual;

接口是不变的;

1.2申明一个接口

目的:如何声明一个接口

常用的接口:CLSID、IID、和LIBID;

GUID(Globally Unique Identifier)全球唯一标示符:CoCreateGuid产生(API);

CLSID(Class Identifier):代表COM对象的类别,代表COM对象的CoClass;

IID(Interface Identifier):代表一个COM对象的接口;

例如:如何建立COM对象的方法;

var

iRoot:IUnkown;

begin

...

iRoot:=CreateComObject(ProgIDToClassID('Project1.Interface1'));//取得实体样例

...

end;

应用程序在内存中建立了COM对象的实体样例;

注意:CreateComObject回传的是COM对象的实体样例的IUnknown接口;APPID(Application Indentifier):应用程序ID;

CATID(Category Identifier):COM组件实现的组件类型;

LIBID(Library Identifier):COM对象实现的Type Library代表的ID;ProgID:有意义的字符串代表特定的CLSID;

1.3实现接口

目的:如何实现接口

实现IUnknown:QueryInterface、_AddRef、_Release

使用TInterfaceObject来自动实现Iunknown,否则的话自己要实现上面的方法。

创建、使用及销毁接口:create;指向接口的指针不访问任何信息;自动释

放、强迫销毁一个接口将变量置为nil

注:delphi自动创建和销毁接口。

获取单个接口的指针:

直接分配:类与他们实现的接口类型兼容的

GetInterface(const IID:TGUID;out obj):判断对象是否支持一个接口

as操作符:对象支持特定的接口(对象不支持接口就错的话,可以拦截错误);as自动调用计数功能;

1.4高级多级接口问题

目的:在一个类中实现多个接口

在一个类中实现多个接口

TXY=class(TInterfacedObject,IXX,IYY):类TXY实现了IXX和IYY接口的所有方法。

多个接口不是多重继承:TXY有且只有一个基类TInterfacedObject;

方法分辨字句:当接口方法在类中实现时,方法分辨子句可使用改变他的名称TXY=class(TInterfacedObject,IXX,IYY)

procedure IXX.pxy=pxy1

procedure IYY.pxy=pxy2

接口授权:一个接口的实现授权给另一个类:一个类包含针对另一个类的指针。内部类:实现一个或多个接口的功能性;

外部类:简单的将这些方法传递给内部类,而不是重新实现接口;

接口属性:可以定义只读、只写、或者读写属性;

但是所有访问都必须通过访问函数,因为接口不能定义存储。

1.5小结

目的:如何在delphi应用程序中内部使用接口,了解delphi语言要素的接口。申明一个接口;

在类中实现接口;

实现IUnknown所需要的功能;

自动对象析构的处理;

在类中实现多个接口;

将一个接口的实现授权给一个内部对象;

定义并实现接口属性

[第一章接口][第二章接口与COM][第三章类型库][第四章自动化][第五章ActiveX][末尾]

第二章接口与COM

2.1GUIDs和COM

目的:

CLSID:Class ID是GUID一个具体的类型的名称,注册表HKEY_CLASSES_ROOT\CLSID

每个接口CLSID或GUID都代表一个COM接口的实现

COM对象:TCOMObject继承(TInterfacedObject不提供实现COM对象的必要功能)

Hresult:特殊类型的返回值,意味着函数调用成功还是失败。

OleCheck:检查函数调用可能产生的错误;当调用返回HResult的COM函数时应使用该函数;

类厂(Class Factory):

COM对象不是由程序直接例示的;

COM使用类厂来创建对象;

类厂是一个对象,目的就是创建其他对象;

每一个COM都有一个相关的类厂,负责创建在服务器中实现的COM对象;

类厂把COM从实际构造一个对象的过程中分离出来,COM没有对象构造过程类厂支持IClassFactory接口:IClassFactory只定义2个函数CreateInstance和LockServer

CreateInstance函数:负责创建类厂涉及的COM对象的实例的函数;LockServer:保持服务器在内存中,一般不要调用他;

类厂中的双重类:

2.2进程内的COM服务器(In-Process COM Server)

目的:理解进程内的COM服务器

共性:有一个InprocServer32的子键、所有进程内服务器都输出以下四个标准函数;

DllRegisterServer:2种方式自动调用

IDE的Register ActiveX Server菜单

Windows的命令行应用程序RegSvr32.exe(或Boland应用程序TRegSvr) DllUnregisterServer:是DllRegisterServer的逆进程,移走放在注册表中

的条目;

DllGetClassObject:

负责提供给COM一个类厂,该类厂用语创建一个COM对象;

每个COM服务器将实现它输出的每个COM对象的类厂;DllCanUnloadNow:返回S_True,CO在内存中移走COM服务器;如果返回S_False

线程支持(Threading Support):只适用于进程内服务器;被保存在注册表中;线程模型如下

Single-Thread Apartment(STA):实际上根本没有线程支持,所有对COM服务器的访问由Windows顺序执行,不必考虑同步存取的问题。

Mutli-Threaded Apartment(MTA):允许同时有多个线程存取COM对象,必须控制不同线程同步存取的程序代码;

Both Apartment:可以执行在MTS或STA中;

自由的:

注册服务器(registering the Server):所有的COM服务器都需要Windows 注册表来工作。

定制构造函数(Custom constructors):delphi中COM对象的基类包括一系列的非虚构造函数。

只需重载Initialize方法;

不要试图重载一个COM对象的构造函数;

创建一个进程内COM对象

function CreateComObject(const ClassID:TGUID):IUnknown; CoCreateInstance内部创建负责创建COM对象类厂的实例,然后使用类厂来创建对象,创建完后COM对象后,类厂被销毁;

虚方法表(Virtual Method Tables):

接口实现为独立的方法表,该表实现在内存中紧靠VMT的地方;

不同的接口占据不同的内存部分,不能简单的把一个接口值赋给另外一个接口;

通常使用as操作符从一个接口转换为另外一个接口;

2.3进程外COM服务器(Out-Of-Process COM Server)

目的:理解进程外COM服务器

进程外服务器是在exe中实现;

实例化(Instancing):创建多少个客户需要的实例;可以支持三个实例化方法中的一个;

Single Instace(单实例):

只容许一个COM对象的实例

每个需要COM对象实例的应用程序将产生COM服务器的单独拷贝;

Multiple Instance(多实例):

指COM Server可以创建一个COM对象的多个拷贝;

客户请求COM对象的一个实例时,由当前运行的服务器创建COM对象的一个实例;

Internal Only(内部实例):用于不被客户应用程序使用的COM对象;

调度数据(Marshaling Data):

一个可执行的程序不能直接访问另一个可执行程序的地址空间;

Windows通过调度(Marshaling)进程在调用应用程序和进程外COM服务器之间移动数据;

自动化兼容SmallInt、Integer、Single、Double、currency、TDateTime、WideString、Idispatch、Scode、WordBool、Olevariant、IUnknown、ShortInt、Byte;

记录和数组不能自动调度;

2.4Variant数组

目的:如何使用Variant数组;

Variant:

一种可以拥有各种数据类型;

也可以告诉目前存储的数据是什么类型(通过使用VarType函数);

可以给相同的Variant分配不同的数据类型,只要Variant包含数字值就可以执行算法;

variant数组只不过是variant型的数组,不必包含同类型的数据;

variant数组的创建方法:

function VarArrayCreate(const Bounds:array of Integer;VarType: integer):variant;

Bounds:告诉数组的上下界;

VarType:决定了数组的中存储什么类型的数据。

例如:创建数组的数组,可以模仿任何类型的数据结构类型:

VarArrayX:=VarArrayCreate([1,10],varVariant);

数组的单个元素可以装载一个数组:VarArrayX[1]:=VarArrayCreate([1,5], varVariant);

function VarArrayOf(const Values:array of Variant):Variant;

运行时用于创建一维数组;

可以创建全异的数值数组;

例如:MyArray:=VarArrayOf(['李维',30,'60',60.369,'China']);

使用Variant数组:与使用标准Delphi数组类似;

VarArrayLowBound、VarArrayHighBound(与数组的low、high类似)计算边界; VarArrayDimCount:计算数组的维数;

2.5小结

目的:接口GUID及进程COM服务器的基本知识了解;

Guid是什么;以及为什么Guid对COM是如此重要;如何创建Guid以供自己使用;

进程内COM服务器,创建及如何使用;

Variant数组;是什么、及如何使用;

进程外COM服务器的介绍、调度及Windows可自动调度的类型;

只有能理解虚方法表(VMT)的面向对象的语言才能访问只有虚方法表的COM服

务器

[第一章接口][第二章接口与COM][第三章类型库][第四章自动化][第五章ActiveX][末尾]

第三章类型库

3.1定义类型库

目的:类型库是什么,和它的作用是什么。

使用类型库的好处:

编写自动化控制时早期连接(Early Binding);

许多编译器可以从一种类型库中自动生成针对特定编程语言的代码;

实用程序可以用来读取并显示有关包含类型库的COM服务器的信息;

在COM客户和服务器之间自动参数调度;

类型库对某些COM服务器是必须的,例如:自动化服务器和ActiveX控件;TTypedComObject:Delphi由该类及其派生类提供了对类型库的支持;Delphi自动创建XXXX_TLB.pas文件;

COM由TTypedComObject派生,而不是TComObjectFactory.Create;

初始时,delphi调用了TTypedComObjectFactory.create、而不是TComObjectFactory.Create;

3.2使用delphi来创建类型库

目的:如何使用Delphi来创建类型库的基本知识;

可以使用IDL(Interface Definition LAnguage接口定义语言)编码类型库;类型库编辑器:

工具条:可以添加接口、方法、以及属性到COM服务器中;

注:工具条上可以通过点击鼠标右键弹出的菜单中选择Text Labels命令打开工具条的标题;

Interface(接口):自动为每一个新建的接口产生一个GUId;

Dispinterface(派遣接口):与接口类似,但是使用不同的派遣机制调用服务器中的方法;

CoClass():类别的定义,被指定给实现接口的COM对象;

使用COM对象之前必须先使用一种方法从类别定义建立真正的类别对象(变量);

再从类别对象取去需要的接口;

最后再从取得的接口中调用需要执行的方法或需要存取的属性;Enumeration(枚举):与枚举类型类似;有整数ID来指明,而不是通过集合类型;

Constant(常量):只有在枚举下才有用;可以编辑Name、Value属性;

Alias(别名):用于定义用户要包括一条记录类型(record)或联合类型(union)中的类型;

Record(记录类型):记录结构;

Union(联合类型):等同于Pascal Variant类型;

Module(模块):模块是方法和常量的集合;

Method(方法):输入参数(in)、输出参数(out)、可变参数(var);

Property(属性):只读、只写、读写三种;

Refresh(更新):使Delphi更新源文件;

Register(注册):编译COM服务器并把服务器注册到Windows中;

Export(输出到IDL):在MIDL或Corba格式中很有用;

friend

对象列表(Object List):显示服务器中定义的接口、方法等;

页控件(Page control):显示对象列表中当前选中的接点的类型信息;

类型库也是一种资源;

不必在客户应用程序中直接读取类型库;

3.3小结

目的:类型库的运用;

类型库是什么;

如何创建一个类型库;

如何编译一个类型库类给自己的服务器添加方法、属性及枚举类型;

如何读取类型库的信息;

[第一章接口][第二章接口与COM][第三章类型库][第四章自动化][第五章ActiveX][末尾]

第四章自动化

通过自动化操作类型库;接口和自动化;Variants和自动化;派遣接口;双重接口;自动化ADO;

4.1定义自动化

目的:自动化以及客户通过使用接口、Variants派遣接口和双重接口创建并使用自动化服务器;

自动化是一种从应用程序的内部自动控制另一个应用程序的方法。

获取自动化服务器的COM对象的两种主要访问方法:

接口:早期连接(early binding)

早期连接是指对接口方法的所有调用在编译时检查参数是否正确;Variants:后期连接(late binding)

后期连接指连接意味着方法调用直到运行时才被实现;

Variant不是对象指针;对象的调用方法是后期连接;

编写快速、简单的客户应用程序不用费力去输入一个类型库;

派遣接口(DispInterface)

在接口和Variant中间的某个地方就是派遣接口;与接口有很多类似;

只是方便客户而设定的;

并没有在服务器上实现派遣接口;是服务器上实现了接口;

假设服务器的COM对象也支持IDispatch接口,客户应用程序可以使用

Variants或派遣接口;

双重接口(Dual Interface):自动化服务器

简单定义为自动化服务器,支持早期连接(接口)和后期连接(Variants);

使用delphi创建的任何任何自动化服务器将自动支持双重接口;

4.2进程内自动化服务器

目的:创建并使用进程内自动化服务器;

CreateOleObject和GetActiveOleObject

CreateOleObject:总是创建特定服务器的新实例;

GetActiveOleObject:用来获取正在内存中运行的服务器的引用;

例如:

Procedure StartOrLinkToWord;

var v:Variant;

begin

try

v:=GetActiveOleObject('Word.Basic');//判断是否Wod已启动;except

v:=CreateOleObject('Word.Basic');//否则启动Word;通常自动化服务器启动是隐藏的;

v.AppShow;//显示Word应用程序;

end;

V.FileNew;//创建一个新的文档;

v.Insert('Automation is easy!');

end;

访问自动化服务器的方法:

Interface通过接口;

Variant通过Variant:通过可使用的类名;CreateOleObject

DispInterface通过派遣接口;

4.3进程外自动化服务器

目的:自动化的基础;创建一个Automation服务器,如何使用接口、派遣接口、和Variants来控制此服务器;

在本身应作为独立服务器应用程序的情况下,使用进程外非常好;

HResult:

自动服务器中的所有方法必须返回一个HResult,暗示是成功还是失败;

所有其他参数必须在out参数中返回;

safecall:

调用协议可使编码;

指示Delphi自动把所有方法包括在try...except模块中;

在客户端safecall导致客户检查是否有HResult类型的返回失败码;

4.4COM事件和回调

目的:两种方式的比较;

派遣接口(DispInterface):

与Interface的比较

DispInterface:为事件提供了更好的支持;与VB兼容;实现事件是最兼容的方法;

Interface:不与VB兼容;但速度比派遣接口稍快;

回调接口(CallBack Interface):除非有极重要的原因否则不要使用;

服务器做大量的工作,而刻户端不需要太多的工作;

接口中定义回调方法,而不是使用派遣接口把事件送回到客户端;

回调接口在服务器中定义,但在客户中实现;

如果知道服务器和客户提供的接口,回调接口更有效;

4.5自动化ADO:Microsoft最新的数据库技术;

目的:如何使用Delphi来快速、轻松的使用基于COM的技术;

主要组件:Connection、RecordSet、Command;

Connection对象:用于连接到一个本地或远处的数据库;

RecordSet对象:提供了一个记录集的连接;

Command对象:向数据库发出命令,不返回结果集;

连接数据库:Connection.Open();

记录集打开:RecordSet.Open();

执行命令:对数据库进行操作,并返回结果集,应使用Command对象(与Parameter一起工作);

访问字段值:

访问Field对象的值:RecordSet.Fields.Item[FieldNo].Value;

访问字段名称:RecordSet.Fields.Item[FieldNo].Name;

数据库错误处理:Error对象,该对象提供任何错误的详细代码;

4.6小结

目的:接口、派遣接口和Variants三种方法之间的不同,在特定的环境中使用那种方法;

创建进程内和进程外COM自动化服务器;

Vraiants在COM自动化服务器中的作用,以及如何使用容许后期连接到自动化对象;

实现COM事件和回调;

如何使用Delphi能相对轻松的使用ADO;

知道接口、派遣接口、和Variants的区别;

[第一章接口][第二章接口与COM][第三章类型库][第四章自动化][第五章ActiveX][末尾]

第五章ActiveX控件和ActiveForms

5.1ActiveX控件

目的:

5.2创建ActiveX控件;

目的:

5.3ActiveForm(Active窗体);

目的:组件导向的中介软件;ActiveForm的开发;开发浏览器的客户端应用程序;

创建ActiveX工程:

New-->ActiveX-->ActiveX Library

New-->AcitveX-->Active Form

设计时期开发执照;

关于对话框;

版本控制编号;(一般要包括,控制新旧版本、以及是否从服务器下载);

分发:Project-->Web Deploy Options

Target dir:ActiveForm组件于HTML首页中codebase tag的目的;

Target URL:Delphi分发ActiveX组件的时候自动产生一个HTML的首页档案;HTML dir:储存这个HTML首页档案的位置;

Use CAB file compression:

Include file version number:分发时包含版本信息;

Auto increment release number:自动增加版本编号;

Deploy required package:

Deploy additional file:

project-->Wep deploy开始分发;

5.4小结

目的:加强ActiveX组件的能力;

使用ActiveX组件;

如何把已有组件转换为ActiveX组件;实现Delphi没有提供的功能;如何从窗体创建ActiveForm;

Delphi函数清单

[标准函数和过程] 首部 procedure Abort;$[SysUtils 功能引起放弃的意外处理。 说明不显示任何错误信息。 首部 function Abs(N: ): ;$[System 功能返回参数N的绝对值。 说明函数结果与参数有相同类型,参数可以是整型也可以是浮点型。 ## Abs(-12) = 12;Abs(-12.03) = 12.03 首部 procedure AddExitProc(Proc: TProcedure);$[SysUtils 功能将旧版本某一过程添加到当前版本运行的库的结束过程表中。 说明只能向下兼容,不能用在当前使用版本的 首部 function Addr(X): Pointer;$[System 功能返回指定对象的内存地址。 说明地址运算符 @ 可以产生与Addr相同的结果。 首部 procedure AddTerminateProc(TermProc: TTerminateProc);$[SysUtils 功能将一过程添加到运行时库的终止过程表中。 说明 Delphi 在程序结束时将终止该程序的全部进程,可以终止的进程都放在终止过程表中,程序通过结束终止过程表所有的进程来实现终止全部进程的目的。 首部 function AdjustLineBreaks(const S: string): string;$[SysUtils 功能将给定字符串的行分隔符调整为Cr/Lf序列。 说明 首部 function AllocMem(Size: Cardinal): Pointer;$[SysUtils 功能在堆栈上分配给定大小为 Size字节的块,即在内存里开辟Size 大小的空间。 说明 Cardinal 0..4294967295 32位无符号整数 首部 function AnsiCompareFileName(const S1, S2: string): Integer;$[SysUtils 功能比较两个文件名的大小。不区分大小写。 说明条件返回值 S1 > S2 | > 0 S1 < S2 | < 0 S1 = S2 | = 0 首部 function AnsiCompareStr(const S1, S2: string): Integer;$[SysUtils 功能比较两个字符串的大小。要区分大小写。 说明参见AnsiCompareFileName。 首部 function AnsiCompareText(const S1, S2: string): Integer;$[SysUtils 功能返回两个字符串是否相同的状态。不区分大小写。 说明参见AnsiCompareFileName。 首部 function AnsiExtractQuotedStr(var Src: PChar; Quote: Char):string;$[SysUtils 功能将引用字串转换成结束引语返回。 说明函数支持多字节字符系统[MBCS]。 首部 function AnsiLastChar(const S: string): PChar;$[SysUtils 功能取参数S的最后一个字符,并转换成以null结束的字符串指针返回。 说明 ##AnsiLastChar(‘Sysoft’) = {‘t\0’}; 首部 function AnsiLowerCase(const S: string): string;$[SysUtils 功能将字符串S转换为小写返回。 说明函数支持多字节字符系统[MBCS]。 首部 function AnsiLowerCaseFileName(const S: string): string;$[SysUtils 功能将文件名S转换成小写返回 说明函数支持多字节字符系统[MBCS]。 首部 function AnsiPos(const Substr, S: string): Integer; $[SysUtils 功能返回子串Substr出现在主串S中的第一个位置。 说明 首部 function AnsiQuotedStr(const S: string; Quote: Char): string; $[SysUtils 功能返回引用字串的译文 说明 首部 function AnsiStrComp(S1, S2: PChar): Integer; $[SysUtils 功能比较两个指针字符串的大小。要区分大小写。 说明参见AnsiCompareFileName。

DELPHI 中WEBBROWSER控件详解实例

Delphi中WebBrowser控件详解实例 2008-10-18下午06:58 很久都没有原创了,前几天帮朋友做了个网址发布程序,主要应用到了WebBrowser控件。今天主要给大家演示一下过程,让大家学习一下Delphi工具。 WebBrowser功能: 1。自动加载网页 2。去除WebBrowser滚动条 3。WebBrowser自身打开页面 4。禁止右键 1。首先,新建一个FROM窗体: 2。加入一个WEBBROWSER控件

3。调整后如下: 4.这样一个webbrowser就完成了,下一步我们来让程序打开后自动加载一个网页。 核心代码:WebBrowser1.Navigate('https://www.doczj.com/doc/c213941262.html,'); 双击窗体灰色处,对窗体进行初始化,在代码窗口中输入(Begin与End间输入核心代码): procedure TForm1.FormCreate(Sender:TObject); begin WebBrowser1.Navigate('https://www.doczj.com/doc/c213941262.html,');//窗体初始化完成WEBBROWSER加载一个网页end; 5。下面我们来实现禁止WEBBROWSER控件的滚动条功能:

核心代码:WebBrowser1.oleobject.Document.body.Scroll:=‘no’; 利用这个代码去掉滚动条的前提是webbrowser中必须有打开的网页,也就是在网页加载完完毕后再去掉滚动条。所以首先要判断页面是否加载完毕,如果加载完毕,就执行上面的语句 去掉滚动条。这时就要引入一个按扭控件来触发程序 加入SPEEDBUTTEN 调整形后:

Delphi如何使用基本的绘图函数绘制统计图

一个windows自带的画图工具是无论如何也不能满足我们的画图需要的,很多效果都需要我们在另外的工具中来实现。这些高级的功能是如何实现的呢,如何操纵一些基本的属性和函数,让它们最终能作出我们想要的效果呢?这里我们以绘制统计图来说明这些问题。 解决思路―― 这里,我们暂且先撇开具体的问题,综合地一下讨论画图的问题。 画图工具是基本元素的具体实现,对于我们初学者来说,还是有很好的参考价值的,在delphi 5中有一个自带的工程例子“……Borland\Delphi5\Demos\Doc\Graphex”,这个例子可以实现一些基本的绘图功能。对这个例子多加修改,一定会有所收获的。这里就不列出它的详细代码了,有心的读者可以自己找到这个例子。我这里只是想综合地讨论这方面的问题。使用DELPHI编写绘图软件的灵魂就在于操作画布,画笔和刷子,尽可能地挖掘它们的属性和相关参数的设置。 (一)画布 画布,画笔和刷子之间的关系很明了.其实,画笔和刷子都是画布的一个属性.而画布也只是TForm,TImage,TShape等组件对象的一个属性,专门负责与图象相关的信息打交道.它的主要作用可以概括如下几点: 1.指定使用画笔,刷子和字体的使用类型; 2.绘制和填充指定形状的线或图形; 3.修饰和改变图象; 画布的主要属性有: Brush--指定填充图形和背景的样式 CanvasOrientation--指定画布的定位类型,有coLeftToRight, coRightToLeft两个属性; ClipRect--指定剪切矩形的边界; CopyMode--指定图形图象的复制模式; Font--指定画布上使用的字体; Handle--为画布指定窗口GDI对象的设备描述表; LockCount--指定画布被别的线程锁定的次数; Pen--指定画布上使用的画笔,具体见下面描述; PenPos--指定画笔当前的位置; Pixels--指定当前剪切矩形的象素颜色; TextFlags--指定字体在画布上的显示方式,有ETO_CLIPPED,ETO_OPAQUE,ETO_RTLREADING,ETO_GL YPH_INDEX,ETO_IGNORELANGUAGE,ETO_NUMERICSLOCALETO_NUMERIC SLATIN等值可选; 画布相关的API函数及其注释如下: Arc--按指定方式画一条弧; BrushCopy--把位图复制到指定的画布的矩形中,用画布刷子颜色替换位图的颜色; Chord--按指定方式画弦; CopyRect--从一个矩形区域复制部分图象到另一个矩形区域; Draw--用指定参数在指定位置画图; DrawFocusRect--按指定焦点风格,通过异或操作来绘制一焦点矩形; Ellipse--按指定参数画一椭圆; FillRect--按指定的刷子填充一矩形; FloodFill--使用当前选定的刷子填充指定设备描述表中的一块区域;

【VIP专享】delphi 三层架构CS简单例子一步步做

delphi 三层CS架构一步步建立的简单例子 所谓三层: (1) 客户端 (2) 服务器端 (3) 数据库 在数据访问时,使得客户端必须通过服务器来访问数据库。提高了系统的安全性。 在Delphi中可以使用Socket或者Dcom组件来连接他们相互间的通讯。 本例使用SOCKET组件. DCOM用在局域网, SOCKET用在互联网. 环境为windows xp+ delphi 7 + access2000 创建过程: 1、请用ACCESS2000新建一个数据库database02.mdb. 2、请在delphi7执行file-new- application, 新建一个桌面, 上面放一个label, label.caption =’服务器端已运行….’

3、接下来在delphi7执行file --new--other,选择"Multitier"--"Remote data module"。在跳出来的对话框里面输入名称(任意),例如: AppSqlConn。选择确定,进入remote data module窗口。 界面如下图所示

4、加入组件:adodataset,点击connectionstring属性,点击后面的…,进 入设定连接窗口。在选择数据库中选择自己想要使用的数据库 database02.mdb。一般只要地址正确、用户名和密码无误,肯定可以连接通过。确定。 3、ADODATASET1在commandtext中点击后面的…,啥也不用设定,默认 配置; 4、ADODATASET1将active属性设置为false。

5、再加入组件:datasetprovider。设定其dataset属性为上面的adodataset1。 5.1 接着设置datasetprovider1的属性,poallowcommandtext=true, 其他的参数默认即可. datasetprovider1的属性如下图所示

delphi数学模块函数、过程大全

function ArcCos(const X : Extended) : Extended; overload; function ArcCos(const X : Double) : Double; overload; function ArcCos(const X : Single) : Single; overload; function ArcSin(const X : Extended) : Extended; overload; function ArcSin(const X : Double) : Double; overload; function ArcSin(const X : Single) : Single; overload; function ArcTan2(const Y, X: Extended): Extended; procedure SinCos(const Theta: Extended; var Sin, Cos: Extended) register; function Tan(const X: Extended): Extended; function Cotan(const X: Extended): Extended; { 1 / tan(X), X <> 0 } function Secant(const X: Extended): Extended; { 1 / cos(X) } function Cosecant(const X: Extended): Extended; { 1 / sin(X) } function Hypot(const X, Y: Extended): Extended; { Sqrt(X**2 + Y**2) } function RadToDeg(const Radians: Extended): Extended; inline; { Degrees := Radians * 180 / PI } function RadToGrad(const Radians: Extended): Extended; inline; { Grads := Radians * 200 / PI } function RadToCycle(const Radians: Extended): Extended; inline; { Cycles := Radians / 2PI } function DegToRad(const Degrees: Extended): Extended; inline; { Radians := Degrees * PI / 180} function DegToGrad(const Degrees: Extended): Extended; function DegToCycle(const Degrees: Extended): Extended; function GradToRad(const Grads: Extended): Extended; inline; { Radians := Grads * PI / 200 } function GradToDeg(const Grads: Extended): Extended; function GradToCycle(const Grads: Extended): Extended; function CycleToRad(const Cycles: Extended): Extended; inline; { Radians := Cycles * 2PI } function CycleToDeg(const Cycles: Extended): Extended; function CycleToGrad(const Cycles: Extended): Extended; { Hyperbolic functions and inverses } function Cot(const X: Extended): Extended; inline; { alias for Cotan } function Sec(const X: Extended): Extended; inline; { alias for Secant } function Csc(const X: Extended): Extended; inline; { alias for Cosecant } function Cosh(const X: Extended): Extended; function Sinh(const X: Extended): Extended; function Tanh(const X: Extended): Extended; function CotH(const X: Extended): Extended; inline; function SecH(const X: Extended): Extended; inline; function CscH(const X: Extended): Extended; inline; function ArcCot(const X: Extended): Extended; { IN: X <> 0 } function ArcSec(const X: Extended): Extended; { IN: X <> 0 } function ArcCsc(const X: Extended): Extended; { IN: X <> 0 } function ArcCosh(const X: Extended): Extended; { IN: X >= 1 } function ArcSinh(const X: Extended): Extended;

DELPHI常用函数说明

一、数据类型转换函数1 在我们编写程序当中,根据不同情况,会使用到多种数据类型。当要对不同的类型进行操作时,必须要将不同的类型转换成同样的类型。因此熟练地掌握数据类型的转换是非常重要的。 1.FloatToStr 功能说明:该函数用于将“浮点型”转换成“字符型”。 参考实例: Edit1.Text := FloatToStr(1.981); 2.IntToStr 功能说明:该函数用于将“整数型”转换成“字符型”。 参考实例: S := IntToStr(10);(注:S为String类型变量。) 3.IntToHex 功能说明:该函数用于将“十进制”转换成“十进制”。该函数有二个参数1。第一个参数为要转换的十进制数据,第二个参数是指定使用多少位来显示十六进制数据。 参考实例: Edit1.Text := IntToHex('100', 2);

执行结果,Edit1.Text等于64。 注意:Delphi没有提供专门的“十六进制”转换为“十进制”的函数。使用StrToInt函数可以实现这个功能。具体代码是:I := StrToInt('S\' + '64'); 这时I等于100。加上一个'S\'即可将“十六进制”转换为“十进制”。 4.StrToInt 功能说明:该函数用于将“字符型”转换成“整数型”。 参考实例: I := StrToInt('100'); 注意:不能转换如StrToInt('ab')或StrToInt('好')这样的类型,因为他们并不存在数字型。 5.StrToFloat 功能说明:该函数用于将“字符型”转换成“浮点型”。 参考实例: N := StrToFloat(Edit1.Text); 注意:Edit1.Text中的内容为1.981(凡在Edit 控件中显示的文本均为字符串)。N为Double类型,用于保存转换后的浮点型数据。

Delphi调用WebService的实例(非常经典)

Delphi 调用webservice 经典实例 Dispatch: 派遣,分派 Invoke: 调用 Invokable: 可调用接口 TReomtable: WebService中自定义类都是继承自该类 TSOAPAttachment: Attachment:附件,一种流类型,可以返回流数据 CGI:(EXE) ISAPI:(DLL) Base64编码: uses EncdDecd; s := EncodeString(s); //加 base64 编码 s := DecodeString( str ); //解码 UTF8: UTF8 是8位的UNICODE字符,而ASCII是7位 ,gb2312和unicode是2字节/字,utf8是3字节/字utf8类似以前的8位转7位的编码,是为了在网络间不同系统的通讯方便而作的转换。几乎所有用.Net写的WebService只支持DOC方式、Delphi写的只支持RPC方式;J2ME目前对Web Service的支持仅限于RFC172,而 RFC172要求必须为DOC方式(sun怎么偏袒MS?)! 为了在设计中减少障碍,下面还介绍几个概念。 1) SOAP:SOAP是一种简单有效的数据传输协议,用于分布式网络环境下数据信息交换,它以XML 作为数据传输的格式,搭配Internet上标准的传输协议HTTP、SMTP、TCP等来传送信息。从本质上看,SOAP事实上只是将Request和Response经由XML格式把数据打包,达到双方沟通的目的。 2) WSDL:WSDL(Web Service Description Language)是一种以XML格式描述的Web Service语言,当Web Service Provider 要对外公布提供的 Web Service,就需要通过WSDL来构建描述语言。在WSDL中有两个非常重要的要素::此WSDL文件所要描述的Web Service集合;每一个Port代表外界Client可以和此Service沟通的一个进入点,一个Port会指定一个Binding方式。 3):处理中文乱码的问题: 将HttpRio的 Converter 的 Options 的 soUTF8InHeader 设为 True 将生成soap消息的HTTPSoapDispatcher控件,添加encoding为gb2312 https://www.doczj.com/doc/c213941262.html,eUTF8InHeader := True; 4)在Delphi中,能够传递的自定义类型的对象要继承TRemotable, 5:修正一个服务器端的一个Bug:将ISAPIThreadPool和ISAPIApp的次序变一下:ISAPIApp必须在 ISAPIThreadPool之前: uses ... ISAPIApp, ISAPIThreadPool 解决如下错误: Received content of invalid Content-Type setting:text/html -SOAP"expects"text/xml" 6:"XML document must have a top level element. Line: 0" 错误,我该如何解决??哈纳斯 (2002-08-05 17:26:00) 我也曾碰到同样的问题解决方法是:别设httprio的wsdllocation,设它的url 如http://localhost/mydir/project1.exe/wsdl/IFIRST mydir是你的可执行的虚拟目录,IFIRST是你定义的接口名 ********************************************************************* **************************

Delphi函数大全

Delphi函数大全 首部function Languages: TLanguages; $[ 功能返回系统语言对象 说明通过此函数可以得到系统的语言环境 参考type 例子 12a12c12a12c. 参考 例子:= IsValidIdent; ━━━━━━━━━━━━━━━━━━━━━ 首部function IntToStr(Value: Integer): string; overload; $[ 首部function IntToStr(Value: Int64): string; overload; $[ 功能返回整数Value转换成字符串 说明Format('%d', [Value]) 参考function 例子:= IntToStr; ━━━━━━━━━━━━━━━━━━━━━ 首部function IntToHex(V alue: Integer; Digits: Integer): string; overload; $[ 首部function IntToHex(V alue: Int64; Digits: Integer): string; overload; $[ 功能返回整数Value转换成十六进制表现结果;Format('%.*x', [Digits, Value]) 说明参数Digits指定字符最小宽度;最小宽度不足时将用0填充 参考function 例子:= IntToHex, ; ━━━━━━━━━━━━━━━━━━━━━ 首部function StrToInt(const S: string): Integer; $[ 功能返回字符串S转换成整数 说明字符串非整数表达时将引起异常 参考procedure 例子:= StrToInt; ━━━━━━━━━━━━━━━━━━━━━ 首部function StrToIntDef(const S: string; Default: Integer): Integer; $[ 功能返回字符串S转换成整数 说明字符串非整数表达时则返回默认值Default 参考procedure 例子:= StrToIntDef, 0); ━━━━━━━━━━━━━━━━━━━━━ 首部function TryStrToInt(const S: string; out Value: Integer): Boolean; $[ 功能返回字符串S转换成整数V alue是否成功 说明字符串非整数表达时返回False并且Value将输出为0 参考procedure 例子 ..);打开失败则返回负数 参考function

delphi7串口通信(spcomm控件)实例

Delphi7串口通信(spcomm控件)实例 最近在用delphi7做串口通信,网上找了很多例程,复制粘贴运行就没有能通过的,再次鄙视一下列位先行者,你们帮人倒是帮到底啊,没一个是拿过来能用的,太坑了,在N天的努力下(鄙人比较笨)终于通过串口接收到数据,希望给后来人予以帮助,程序如下: 功能简介 功能比较简单,只是从串口接收单片机发送的数据,给memo1 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes,

Graphics, Controls, Forms,

Dialogs, SPComm, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Comm1: TComm; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word); procedure Comm1ModemStateChange(Sender: TObject; ModemEvent: Cardinal); private { Private declarations } public { Public declarations } end; var

delphi_三层架构简单例子.

delphi 三层架构简单例子(经测试成功2009-01-22 下午 02:45所谓三层: (1 客户端 (2 服务器端 (3 数据库在数据访问时,使得客户端必须通过服务器来访问数据库。提高了系统的安全性。在Delphi中可以使用Socket或者Dcom来连接他们相互间的通讯。如果使用Scocket在系统使用时必须提供Scocket连接器,而Dcom 则不用。客户端和服务器的连接需要Broker来联系。环境为winxp sp2 + delphi 7 + db7.(MSSQL2000 创建过程: 1、请不要新建application.file-new-activex-activex library,file --new--other,选择"Multitier"--"Remote data module"。在跳出来的对话框里面输入名称(任意),例如:AppSqlConn。选择确定,进入remote data module窗口。 2、加入组件:adodataset,点击connectionstring属性,点击后面的…,进入 设定连接窗口。选择:use connection string--build,在提供程序中选择:"Microsoft ole db provider for sql server",在连接中:服务器名称输入sql server的ip地址,登录信息中输入用户名和密码(sql server),在选择数据库中选择自己想要使用的数据库。一般只要地址正确、用户名和密码无误,肯定可以连接通过。确定退出。 3、在commandtext中点击后面的…,进入sql 语句设定,根据自己的要求设定。 4、将active属性设置为true。只要前面的设定是正确的,这里应该顺利通过。 5、加入组件:datasetprovider。设定其dataset属性为上面的adodataset。 6、到此服务器端已经设置完成。请保存并且运行一次,从而使服务注册。 7、运行delphi的bin目录下面的scktsrvr,因为下面要使用socket连接。运行后任务栏中出现socket server的图标。 8、新建程序(application),然后file--new--data module,会创建客户端的data module。 9、加入组件:socketconnection,在address中输入sql server的ip地址,然后在servername中输入刚才创建的remote data module的服务程序。程序会自动在serverguid中加入id。然后选择connected属性为true。只要 此处不报告错误,此程序基本成功了。 10、加入组件:clientdataset,选择remoteserver属性为socketconnection,选择providename为服务器程序的datasetprovider。然后选择active属性为true。 11、到程序的form窗口状态,首先选择file--use unit,选择上面创建的data module,确定。然后加入组件datasource 和dbgrid。选择datasourece的dataset属性为data module的clientdataset,选择dbgrid的datasource为这里的datasource组件。现在应该可以看到dbgrid的窗口中

(DELPHI)API函数大全

(DELPHI)API函数大全 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称WNetGetLastError 获取网络错误的扩展错误信息WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC (统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置GetMessageTime 取得消息队列中上一条消息处理完毕时的时间PostMessage 将一条消息投递到指定窗口的消息队列PostThreadMessage 将一条消息投递给应用程序RegisterWindowMessage 获取分配给一个字串标识符的消息编号ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 3. API之文件处理函数 CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件

delphi函数参考手册

delphi函数参考手册 名称类型说明 abort 函数引起放弃的意外处理 abs 函数绝对值函数 addexitproc 函数将一过程添加到运行时库的结束过程表中addr 函数返回指定对象的地址 adjustlinebreaks 函数将给定字符串的行分隔符调整为cr/lf序列align 属性使控件位于窗口某部分 alignment 属性控件标签的文字位置 allocmem 函数在堆栈上分配给定大小的块 allowgrayed 属性允许一个灰度选择 ansicomparestr 函数比较字符串(区分大小写)ansicomparetext 函数比较字符串(不区分大小写)ansilowercase 函数将字符转换为小写 ansiuppercase 函数将字符转换为大写 append 函数以附加的方式打开已有的文件 arctan 函数余切函数 assignfile 函数给文件变量赋一外部文件名 assigned 函数测试函数或过程变量是否为空 autosize 属性自动控制标签的大小 backgrounddi2001.jpg 属性背景色 beginthread 函数以适当的方式建立用于内存管理的线程bevelinner 属性控件方框的内框方式

bevelouter 属性控件方框的外框方式 bevelwidth 属性控件方框的外框宽度 blockread 函数读一个或多个记录到变量中blockwrite 函数从变量中写一个或多个记录borderstyle 属性边界类型 borderwidth 属性边界宽度 break 命令终止for、while、repeat循环语句 brush 属性画刷 caption 属性标签文字的内容 change 函数改变文件的后缀 chdir 函数改变当前目录 checked 属性确定复选框选中状态 chr 函数返回指定序数的字符 closefile 命令关闭打开的文件 color 属性标签的颜色 columns 属性显示的列数 comparestr 函数比较字符串(区分大小写)concat 函数合并字符串 continue 命令继续for、while、repeat的下一个循环copy 函数返回一字符串的子串 cos 函数余弦函数 ctl3d 属性是否具有3d效果

delphi常用函数大全

delphi常用函数大全(转) Abort函数引起放弃的意外处理 Abs函数绝对值函数 AddExitProc函数将一过程添加到运行时库的结束过程表中 Addr函数返回指定对象的地址 AdjustLineBreaks函数将给定字符串的行分隔符调整为CR/LF序列Align属性使控件位于窗口某部分 Alignment属性控件标签的文字位置 AllocMem函数在堆栈上分配给定大小的块 AllowGrayed属性允许一个灰度选择 AnsiCompareStr函数比较字符串(区分大小写) AnsiCompareText函数比较字符串(不区分大小写) AnsiLowerCase函数将字符转换为小写 AnsiUpperCase函数将字符转换为大写 Append函数以附加的方式打开已有的文件 ArcTan函数余切函数 AssignFile函数给文件变量赋一外部文件名 Assigned函数测试函数或过程变量是否为空 AutoSize属性自动控制标签的大小 BackgroundColor属性背景色 BeginThread函数以适当的方式建立用于内存管理的线程 BevelInner属性控件方框的内框方式 BevelOuter属性控件方框的外框方式 BevelWidth属性控件方框的外框宽度 BlockRead函数读一个或多个记录到变量中 BlockWrite函数从变量中写一个或多个记录 BorderStyle属性边界类型 BorderWidth属性边界宽度 Break命令终止for、while、repeat循环语句 Brush属性画刷 Caption属性标签文字的内容 ChangeFileExt函数改变文件的后缀 ChDir函数改变当前目录 Checked属性确定复选框选中状态 Chr函数返回指定序数的字符 CloseFile命令关闭打开的文件 Color属性标签的颜色 Columns属性显示的列数 CompareStr函数比较字符串(区分大小写) Concat函数合并字符串 Continue命令继续for、while、repeat的下一个循环 Copy函数返回一字符串的子串 Cos函数余弦函数 Ctl3D属性是否具有3D效果 Cursor属性鼠标指针移入后的形状 Date函数返回当前的日期 DateTimeToFileDate函数将DELPHI的日期格式转换为DOS的日期格式DateTimeToStr函数将日期时间格式转换为字符串DateTimeToString函数将日期时间格式转换为字符串 DateToStr函数将日期格式转换为字符串

DELPHIXE移动开发调用的例子方法

调用的例子方法: uses Androidapi.JNI.GraphicsContentViewText, FMX.Helpers.Android, https://www.doczj.com/doc/c213941262.html,; procedure Call_URI(const AAction : JString;const AURI: string); var uri: Jnet_Uri; Intent: JIntent; begin uri := StrToJURI(AURI); Intent := TJIntent.JavaClass.init(AAction, uri); {Intent.putExtra() 如果是要发短信等复杂的应用,需要传递各种其他的参数.要用到Intent.putExtra()传递多个参数. 这里只封装最简单的,具体Intent.putExtra()的用法,可以查询Java的资料.大把的 } SharedActivityContext.startActivity(Intent); end; //使用例子: //打电话 Call_URI(TJIntent.JavaClass.ACTION_CALL, 'tel:137114553XX'); //打开地图显示某个坐标点 Call_URI(TJIntent.JavaClass.ACTION_VIEW, 'geo:38.899533,-77.036476'); //发送电子邮件 Call_URI(TJIntent.JavaClass.ACTION_SENDTO, 'mailto:wr960204@https://www.doczj.com/doc/c213941262.html,'); //播放音乐 Call_URI(TJIntent.JavaClass.ACTION_VIEW, 'file:///sdcard/download/最炫民族风.mp3'); 调用的例子方法: ===========================我是分割线================================================== android 系统常用URI: android 系统常用URI: android 系统常用URI: android 系统常用URI: 显示网页: 1. Uri uri = Uri.parse("https://www.doczj.com/doc/c213941262.html,"); 2. Intent it = new Intent(Intent.ACTION_VIEW,uri); 3. startActivity(it); 显示地图:

Delphi字符串处理函数

【字符串函数大全】 首部function AnsiResemblesText(const AText, AOther: string): Boolean; $[StrUtils.pas 功能返回两个字符串是否相似 说明ANSI(American National Standards Institute)美国国家标准协会;不区分大小写参考function StrUtils.SoundexProc; var StrUtils.AnsiResemblesProc 例子CheckBox1.Checked := AnsiResemblesText(Edit1.Text, Edit2.Text); ━━━━━━━━━━━━━━━━━━━━━ 首部function AnsiContainsText(const AText, ASubText: string): Boolean; $[StrUtils.pas 功能返回字符串AText是否包含子串ASubText 说明不区分大小写 参考function StrUtils.AnsiUppercase; function StrUtils.AnsiPos 例子CheckBox1.Checked := AnsiContainsText(Edit1.Text, Edit2.Text); ━━━━━━━━━━━━━━━━━━━━━ 首部function AnsiStartsText(const ASubText, AText: string): Boolean; $[StrUtils.pas 功能返回字符串AText是否以子串ASubText开头 说明不区分大小写 参考function https://www.doczj.com/doc/c213941262.html,pareString 例子CheckBox1.Checked := AnsiStartsText(Edit1.Text, Edit2.Text); ━━━━━━━━━━━━━━━━━━━━━ 首部function AnsiEndsText(const ASubText, AText: string): Boolean; $[StrUtils.pas 功能返回字符串AText是否以子串ASubText结尾 说明不区分大小写 参考function https://www.doczj.com/doc/c213941262.html,pareString 例子CheckBox1.Checked := AnsiEndsText(Edit1.Text, Edit2.Text); ━━━━━━━━━━━━━━━━━━━━━ 首部function AnsiReplaceText(const AText, AFromText, AToText: string): string; $[StrUtils.pas 功能返回字符串AText中用子串AFromText替换成子串AToText的结果 说明不区分大小写 参考function SysUtils.StringReplace; type SysUtils.TReplaceFlags 例子Edit4.Text := AnsiReplaceText(Edit1.Text, Edit2.Text, Edit3.Text);

相关主题
文本预览
相关文档 最新文档