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

Delphi如何使用基本的绘图函数绘制统计图
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--使用当前选定的刷子填充指定设备描述表中的一块区域;

FrameRect--使用指定的方式画一矩形的边框;

LineTo--使用当前画笔从当前位置到指定点画一条直线;

Lock--防止其它线程在画布上绘图;

MoveTo--指定一新的当前画笔位置;

Pie--按指定方式画饼状图;

PolyBezier--按指定方式画多条贝塞尔线;

PolyBezierTo--按指定方式画多条贝塞尔线并更新当前的画笔位置值; Polygon--绘制一个由多个顶点的任意序列组成的多边形;

Polyline--使用当前画笔画一系列的多边形;

Rectangle--绘制矩形;

RoundRect--绘制圆角矩形;

StretchDraw--在指定的矩形区域通过指定的绘图参数来绘制图形; TextExtent--返回使用当前字体设置的字符的象素宽度和高度等参数; TextHeight--返回使用当前字体设置的字符的象素高度;

TextOut--在指定位置绘制文本,并更新画笔的当前位置;

TextRect--在一剪切矩形区域中绘制文本;

TextWidth--返回使用当前字体设置的字符的象素宽度;

TryLock--对当前没加锁的画布进行加锁;

Unlock--对当前加锁的画布进行解锁;

例如以下是两个小例子:

procedure TForm1.Button2Click(Sender: TObject);

var

ARect: TRect;

begin //实现了剪切效果;

with Image1.Canvas do

begin

CopyMode := cmWhiteness; //设置复制模式;

ARect := Rect(0, 0, Image1.Width, Image1.Height);

CopyRect(ARect, Image1.Canvas, ARect);

CopyMode := cmSrcCopy; //恢复复制模式;

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

var

W: Word;

begin //在窗口中画一条彩线;

for W := 10 to 200 do

Canvas.Pixels[W, 10] :=RGB(random(255),random(255),random(255));; end;

灵活使用这些函数及其内部参数会让我们得到意想不到的效果;

(二) 画笔

画笔是一个GDI对象,定义了绘制直线或轮廓形状的方法.

画笔内部共有五种属性:颜色,句柄,模式,风格和宽度.

Color--决定指定直线或轮廓形状的RGB颜色。

Handle--指向了窗口画笔对象句柄。

Mode--指定了画笔以何种方式在画布(canvas)上画线,在帮助文档中的该定义是(全部以pm_开头):

type TPenMode =( pmBlack, //总是黑色;

pmWhite, //总是白色;

pmNop, //颜色不变;

pmNot, //画布颜色取反;

pmCopy, //颜色属性中指定的画笔颜色;

pmNotCopy, //画笔颜色取反;

pmMergePenNot, //画笔颜色和画布背景色取反后颜色的结合;

pmMaskPenNot, //画笔颜色和画笔背景色取反后颜色共同色的结合;

pmMergeNotPen, //画笔颜色取反后和画布背景色的结合;

pmMaskNotPen, //画布颜色和画笔颜色取反后颜色共同色的结合;

pmMerge, //画笔和画布背景色的结合;

pmNotMerge, //画笔颜色和画布背景色的结合;

pmMask, //画笔和画布背景色共同色的结合;

pmNotMask, //pmMask取反,画笔和画布背景色共同色的结合;

pmXor, //取画笔或画布背景中的任一种颜色;

pmNotXor //pmXor取反,取画笔或画布背景中的任一种颜色;

);

Style--则指定了画笔操作的风格,在线文档中的定义是(全部以ps_开头):

type TPenStyle=( psSolid, //画笔是───

psDash, //画笔是------

psDot, //画笔是......

psDashDot, //画笔是_._._.

psDashDotDot, //画笔是_.._..

psClear, //画笔是透明色

psInsideFrame //画笔是实线,但设置大于1时会抖动;

);

另外,在windows.pas中还有其他扩展的画笔风格定义,只在特殊的支持设备上

才有效,如PS_ENDCAP_ROUND, PS_JOIN_ROUND等;

Width--指定了待使用画笔的宽度,单位是象素.

和画笔相关的函数有:

CreatePen--用指定风格创建画笔;

CreatePenIndirect--根据LOGPEN数据结构创建一画笔;

ExtCreatePen-- 创建带指定风格,宽度和刷子属性的几何画笔;

(三)刷子

刷子定义了区域填充的GDI对象,刷子是一个8×8象素的区域,它可以被绘制在指定的设备上.刷子不仅可以是纯色的,也可以由不同的位图图案组成.

刷子的属性有位图,颜色,句柄和风格四种:

Bitmap--是指定一个外部位图文件来填充指定的区域.如果指定的图象比填充的区域大,

则只有左上角与填充区域等大的部分有效,其余的被自动裁减了.

Color--指定了刷子的颜色.当刷子风格为bsClear时,该属性无效.

Handle--指向指定设备窗口.

Style--则指定了当前刷子的填充风格,在线文档中的定义是(都以bs_开头): type TBrushStyle=( bsSolid, //填充格式为实体填充

bsClear, //填充格式为透明填充

bsHorizontal, //填充格式为------

bsV ertical, // 填充格式为|||||

bsFDiagonal, // 填充格式为/////

bsBDiagonal, // 填充格式为\\\\\

bsCross, // 填充格式为+++++

bsDiagCross // 填充格式为xxxxx

);

和刷子有关的API函数有:

CreateBrushIndirect--根据LOGBRUSH创建一刷子; CreateDIBPatternBrushPt--使用设备无关位图来创建刷子,以便指定刷子的模式; CreateHatchBrush--创建一带有阴影模式的刷子,阴影模式为以HS_开头的常数; CreatePatternBrush--用位图来创建刷子,以便指定刷子的模式; CreateSolidBrush--创建一实体颜色刷子;

GetBrushOrgEx--获取指定设备描述表中当前选择刷子的原点; GetSysColorBrush--获取和指定颜色索引相关的逻辑刷子的句柄; SetBrushOrgEx--设置指定设备描述表中当前选择刷子的原点;

(四)画图和填充相关的API函数;

BeginPaint--准备在指定窗口绘画或对指定区域进行填充; DrawAnimatedRects--NT支持函数,画一环有游动边框的矩形;

DrawCaption--NT支持函数,为指定窗口的标题赋值;

DrawEdge--为指定矩形画一道或多道边框;

DrawFocusRect--画焦点矩形;

DrawFrameControl--画一指定类型和风格的边框控件;

DrawState--NT支持函数,为图象画一可视效果标明其状态;

DrawStateProc--NT支持函数,调用为图象画一可视效果标明其状态的函数; DrawTextEx--NT支持函数,在指定区域输出格式化文本;

EndPaint--结束绘画;

ExcludeUpdateRgn--将窗口无效部分(更新区域)从裁剪区中排除掉;

GdiFlush--使当前GDI闪烁;

GdiGetBatchLimit--获取缓冲GDI函数数量;

GdiSetBatchLimit--设置缓冲GDI函数数量;

GetBkColor--获取背景颜色;

GetBkMode--获取背景模式;

GetBoundsRect--获取边界矩形;

GetROP2--获取当前绘图模式;

GetUpdateRect--获取指定窗口最小的矩形;

GetUpdateRgn--获取描述窗口中无效区的区域;

GetWindowDC--获取窗口DC;

GetWindowRgn--获取窗口区域;

GrayString--在指定位置画灰色文本;

InvalidateRect--使DC指定的矩形无效;

InvalidateRgn--使DC指定的矩形无效;

LockWindowUpdate--禁止或允许在指定窗口中绘画;

OutputProc--调用输出进程,向GrayString输送文本;

PaintDesktop--NT支持函数,在指定的窗口区域用指定的桌面颜色或墙纸填充裁剪区;

RedrawWindow--更新客户区的指定区域或矩形;

SetBkColor--设置背景颜色;

SetBkMode--设置背景模式;

SetBoundsRect--设置边界矩形;

SetRectRgn--设置矩形区域;

SetROP2--设置当前绘图模式;

SetWindowRgn--设置窗口区域;

UpdateWindow--更新窗口;

ValidateRect--使客户区中指定矩形有效;

ValidateRgn--使客户区中的指定区域有效;

WindowFromDC--获取和指定窗口相关的句柄;

具体实现――

1.本例以常见的统计图来说明问题。该例能实现对统计图的动态绘制,并且可以自定义设置统计图的形状和颜色。在说明问题之前,来了解程序用到的一些比较复杂的函数或算法:函数――

1.Polygon(Points: array of TPoint)

用于绘出指定的多边形。括号内是预定点的集合,该集合可以在使用之前定义,也可以在使用时同时定义,本例属于后者;

2.Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Longint)

用于绘制饼状图,饼状图其实就是椭圆的一部分。在这些参数中,其中(X1, Y1)和(X2, Y2)定义了框住饼状图的矩形,而从椭圆中心发出的射线经过(X3, Y3)和(X4, Y4)两点,就把一个饼状图截出来了。

3.FormatFloat(const Format: string; Value: Extended)

函数的意义是按指定方式格式化字符串,Format指定了格式化的方式,Value则指定了要格式化的文本或其他数据。下面列举了一些范例,可供我们学习时参考:格式化符号(Format) 1234 -1234 0.5 0

1234 -1234 0.5 0

0 1234 -1234 1 0

0.00 1234.00 -1234.00 0.50 0.00

#.## 1234 -1234 .5

#,##0.00 1,234.00 -1,234.00 0.50 0.00

#,##0.00;(#,##0.00) 1,234.00 (1,234.00) 0.50 0.00

#,##0.00;;Zero 1,234.00 -1,234.00 0.50 Zero

0.000E+00 1.234E+03 -1.234E+03 5.000E-01 0.000E+00

#.###E-0 1.234E3 -1.234E3 5E-1 0E0

该例是在小数点后保留两位小数,因此用"##.##",具体见程序代码中。

算法――

本例的实现依赖一定的算法。这里介绍主要的两点:

1)在连接多边形各点时,我们要注意那几个点一定要构成一个闭合的图形,这就要保证最后一个点要和第一个点重合。至于其他的点怎么布局,则要有一定的空间感。

我们先画一个矩形,然后再根据平行关系确定其他的点:

rectangle(50,x,70,220); //画主视面;

Canvas.Polygon([Point(50, x), Point(70,x-10),Point(90,x-10), Point(70, x),Point(50, x)]); //画顶面;

Canvas.Polygon([Point(90,x-10), Point(70, x),Point(70,220),Point(90,210),Point(90,x-10)]); //画侧面;

2)确定圆上指定角度的边与圆的交点

在该例中画饼状图时,我们要按照一定的比例画扇形,这就要确定扇形的起始点和终止点。我们把起始点设为一个定点,而终止点则根据实际情况设置,如图:

――饼状图的数学原理――

假设画图时已知一个比例数是K,则在饼状图中的角度是θ=(K*360),根据图中的关系(Y 轴向下符合屏幕坐标系定义),可以用三角函数知识求得PX,PY:

PX=op*cosθ

PY=op*sinθ

上述式子的前提条件是O点是原点,OP是圆的半径。如果O点不是原点,而是坐标系中的一个点(X0,Y0),则此时的P点坐标是

PX=X0+op*cosθ

PY=Y0+op*sinθ

3.本例的界面布局可以参考程序运行的结果图,其中代表“刷子类型”的combobox1的items的属性设置如图。该例实现的主要代码如下:

procedure TForm1.Button1Click(Sender: TObject);

var

x,i,j:integer;

k:real;

begin

refresh;

//标明写上“Y”轴;

label4.left:=25;

label4.top:=2;

label4.caption:='Y';

label4.Transparent:=true;

//标明写上“X”轴;

label5.left:=395;

label5.top:=227;

label5.caption:='X';

label5.Transparent:=true;

x:=220-round(strtofloat(edit1.text)/strtofloat(edit2.text)*200);

with form1.Canvas do

begin

pen.width:=strtoint(edit3.text); //设置画笔宽度;

case combobox1.Items.IndexOf(combobox1.text) of //设置刷子的填充风格;

0: brush.style:=bsSolid;

1: brush.style:=bsClear;

2: brush.style:=bsHorizontal;

3: brush.style:=bsVertical;

4: brush.style:=bsFDiagonal;

5: brush.style:=bsBDiagonal;

6: brush.style:=bsCross;

7: brush.style:=bsDiagCross;

end;

//画出X轴;

MoveTo(2,220);

LineTo(400,220);

//画出Y轴;

MoveTo(20,5);

LineTo(20,230);

//画出Y轴的箭头方向"∧";

moveto(20,5);

lineto(15,12);

moveto(20,5);

lineto(25,12);

//画出X轴的箭头方向"∧";

moveto(400,220);

lineto(395,213);

moveto(400,220);

lineto(395,227);

if checkbox1.Checked then //绘制立体的直方柱图;

begin

//画正面的矩形图;,可以根据实际情况动态定义它的高度;

rectangle(50,x,70,220);

//画顶面,随着正面矩形的高度变化而变化;

Canvas.Polygon([Point(50, x), Point(70,x-10),Point(90,x-10), Point(70, x),Point(50, x)]);

//画侧面,随着正面矩形的高度变化而变化;

Canvas.Polygon([Point(90,x-10), Point(70, x),Point(70,220),Point(90,210),Point(90,x-10)]); end

else

rectangle(50,x,70,220); //如果没有选中要以立体形式绘制,则以平面形式绘制的直方柱图; //画饼状统计图

k:=(strtofloat(edit1.text)/strtofloat(edit2.text))*360; //将数据按比例转换成;

i:=round(250+100*cos(k*3.14159/180));

j:=round(120+100*sin(k*3.14159/180));

pie(150,20,350,220,i,j,350,120);

label3.caption:='比例是'+formatfloat('##.##',(k/360)*100)+'%'; //设置比例的函数;

end;

end;

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if colordialog1.Execute then //设置窗口背景颜色;

shape1.Brush.color:=colordialog1.Color;

form1.color:=ColorDialog1.Color;

end;

procedure TForm1.Shape2MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if colordialog2.Execute then //设置刷子颜色;

shape2.Brush.color:=colordialog2.Color;

form1.Canvas.Brush.color:=colordialog2.Color;

end;

procedure TForm1.Shape3MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if colordialog3.Execute then //设置画笔颜色;

shape3.Brush.color:=colordialog3.Color;

form1.Canvas.Pen.color:=colordialog3.Color;

end;

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数学模块函数、过程大全

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如何使用基本的绘图函数绘制统计图

一个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--使用当前选定的刷子填充指定设备描述表中的一块区域;

delphi自定义函数收集1

本文包含以下自定义函数: 1、Base64编码函数。 2、Base64解码函数。 3、截取汉字子串函数,防止出现半个汉字现象。 4、人民币小写转换为大写函数。 1、Base64编码函数。 //Base64编码函数 function Base64Encode(InputData: string): string; //; Var OutputData: String const Base64TableLength = 64; Base64Table: string[Base64TableLength] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+*'; Pad = '='; var i: integer; CurrentB, PrevB: byte; c: byte; s: char; InputLength: integer; OutputData: string; FilterDecodeInput: Boolean; function ValueToCharacter(value: byte; var character: char): Boolean; //****************************************************************** // 将一个在0..Base64TableLength-1区间内的值,转换为与Base64编码相对应 // 的字符来表示,如果转换成功则返回True //****************************************************************** begin result := true; if (value > Base64TableLength - 1) then result := false else character := Base64Table[value + 1]; end; begin FilterDecodeInput := true; OutputData := ''; InputLength := Length(InputData); i := 1;

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函数大全

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

DELPHI常用组件

Delphi常用组件的使用 目录 1.按钮类组件 1.1Button组件

Button组件位于Standard页。 Button组件的常用属性表 属性描述 Cation用于在按钮上显示文本内容 Cancel用来指定按钮是否为取消按钮 Default用于指定按钮是否为默认按钮,在按Enter键时也选中命令按钮Hint设置鼠标在组件上短暂停时在组件旁显示的提示小窗口的内容ShowHint确定是否显示提示文本,默认值是FALSE 1.2Bitbtn组件 Bitbtn组件(位图组件)位于Additional,与Button很相似,只是多了一个位图符号在按钮上(如带有对号的OK,问好的Help等),其某些属性与Button类似,下表为其独有的的特性。(注:此组件不需编写代码) Bitbtn组件的常用属性表 属性描述 Kind Kind属性的值就是位图按钮上显示的图标。Kind属性后的下拉列表中有一组默认图标的属性值,有bkCancel(取消)、bkAbort(终止)、bkAll(所有)、 bkClose(关闭)等。 Glyph用于在位图按钮上显示加载后的位图图形 NumGlyphs用于指明位图按钮所能使用位图的个数。在delphi中,最多允许向一个位图按钮提供4个图像文件,用于表示4中不停状态 Layout用于指出位图图形在位图组件上的放置位置 1.3SpeedButton组件 SpeedButton组件(加速按钮)位于Additional,常放置在Panel组件上,用于设计工具栏。它与Bitbtn相似,也可以显示图像和文本,但通常只用于显示图像。 SpeedButton组件的常用属性表 属性描述 AllowAllUp用于设置同一组的加速按钮是否具有同时弹起的状态。若设置为FALSE,则当同一组加速按钮中的一个被按下时,其他加速按钮都处于弹起状态,即这 组按钮必须有且只有一个处于按下状态 Down用于设置该加速按钮是否处于按下状态,若设置为TRUE,则表示按钮处于按下状态 Flat用于设置在鼠标移动到该按钮上时,按钮是否显示三维效果。为FLASE则不出现 GroupIndex用于将数个加速按钮设置成一组,只需将其值设置成不等于0的数值即可1.4RadioButton组件

《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函数合并字符串

用PS绘画与绘图操作方法

用PS绘画与绘图操作方法?选区? 一;基本绘制方法; 1;基本上色流程;打开文件后,复制线稿图层(Ctri+J) 将复制的混合模式设置正片叠底,锁定图层,在背景层与复制层之间新建图层,根据颜色部位前后关系利用画笔配 合油漆桶进行上色。 2;绘制过程;(1)绘制基色,如果需要填色面积过大,首先使用画笔对需要进行上色的局部边缘细致描绘出一个闭合区域,再配合(油漆桶工具)进行填充,如果需要填色 面积过小,直接使用画笔进行填充。 (2)锁定,单击(图层)面板上的(锁定透明像素)按钮,避 免绘制其他部分时对该部分误操作。 (3)绘制明暗,利用画笔绘制出光影效果。 3;操作步骤;(1)打开本章素材的线稿图片,(2)CtrI+J复制背景层命名为“稿件”设定图层混合模式为“正片叠底”并且单击(锁定全部)按钮。(3)选择背景层,新建图层,选择(画笔工具)单击选项栏上的(切换画笔面板)按钮,就会弹出(画笔)面板,在这里可以设置画笔种类,也就是画笔大小和形状。 你知道吗?; 当我们在进行绘画,填充和描边选区等操作时PhotoShop黙认使用的颜色为前景色,就是工具箱颜色选区框上端的色块,也是使用画笔工具或油漆桶工具直接上色的时候,图像窗口上显示的

颜色,背景色是下端色块,是使用背景色生成渐变填充和在图像的涂抹区域中填充的时候显示的颜色。 常用快捷键; (画笔工具)B 画笔面板为F5 调整画笔大小快捷键缩小为放大为。橡皮擦工具为E 油漆桶工具的快捷键为G (如果当前显示的为(渐变工具)可按Shift+G 键。 (4)按照基本绘制方法,首先绘制面部(在新图层上)设置前 景色为RGB (241 219 155) 设置画笔为尖角9像素,对面部及其他皮肤部分上色。 (5)单击(图层)面板上的(锁定透明像素)按钮设置前景 色为TGB (231 115 108) 选择画笔工具,设置笔刷为喷溅 24像素,按下F5键打开(画笔)面板设置如下。 画笔笔尖形状;设置间距为1% 形状动态;大小抖动的控制设置为渐隐,步数为40(可根据不同尺寸的图像,进行适当改变)选择“杂色”与喷枪。 在画笔工具选项栏中设置不透明度为50%流量为50% 设定光源位置为右上方,粗略绘制出头发,袖口以及裙子遮 挡住的皮肤阴影部分,得到初步效果,在明暗的基础效果上进行进一步的 加工处理,可以使用模糊工具,对反差较大部分进行柔化处理,(6)按照此方法绘制眼睛,在使用画笔的过程中,可以使用快捷键随时控制画笔的笔尖大小,以得到最佳效果。 (7)设置前景色为RGB(255 201 92 ) 绘制头发,并按照上面的步骤对头发的细节进行刻画,效果。

(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属性自动控制标签的大小 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函数将日期格式转换为字符串

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字符串处理函数

【字符串函数大全】 首部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.360docs.net/doc/0715294524.html,pareString 例子CheckBox1.Checked := AnsiStartsText(Edit1.Text, Edit2.Text); ━━━━━━━━━━━━━━━━━━━━━ 首部function AnsiEndsText(const ASubText, AText: string): Boolean; $[StrUtils.pas 功能返回字符串AText是否以子串ASubText结尾 说明不区分大小写 参考function https://www.360docs.net/doc/0715294524.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);

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效果

Delphi函数大全 (2)

Delphi函数大全 function Int(X:Extended):Extended;//取整 function Round(X:Extended):Int64;//四舍五入function Trunc(X:Extended):Int64;//将小数无条件舍去信息来源:邪恶八进制信息安全团队 名称类型说明 ---------------------------------------------------------------------------------- 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函数改变当前目录

Delphi基本语法格式和常用函数讲解

Delphi基本语法格式和常用函数 分类: 《Delphi中的进制转换(如hex与bin)》 ShowMessage(Format('%d:%d', [pos, length(keys)])+':'+keys); Format('%d:%d:%x', [pos, key_len,byte(pchar(keys)[0])]) // 其中keys 为string类型 《delphi快捷键-和vim对应上的快捷键》 delphi延时函数代码! Delphi文件操作函数 Delphi关于多线程同步的一些方法,信号量,互斥量和临界区 delphi轻松实现原子操作-CreateSemaphore 获得Integer和DWord类型的最大值 ShowMessage(IntToStr(High(Integer))); ShowMessage(IntToStr(High(DWord))); // delphi的sleep()就是一个ms毫秒级延时函数,但是使用sleep会导致程序短暂pending procedure TForm1.delay(MSecs: Integer); //延时函数,MSecs单位为毫秒(千分之1秒) var FirstTickCount, Now: Longint; begin if MSecs <> 0 then begin FirstTickCount := GetTickCount(); repeat Application.ProcessMessages; Now := GetTickCount(); until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount); end; end; var write_semaphore:THandle; write_semaphore:=CreateSemaphore(0, 1, 1, nil); procedure TForm1.Button1Click(Sender: TObject);

相关文档
最新文档