label1--用于显示手机号码的滚动
timer1(时钟)--用于产生随机的手机号码
button1--点击即抽奖,并将获奖号码保存到memo1中
memo1--用于保存获奖手机号码
unit Unit1
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls
type
TForm1 = class(TForm)
Label1: TLabel
Button1: TButton
Timer1: TTimer
Memo1: TMemo
procedure Timer1Timer(Sender: TObject)
procedure FormCreate(Sender: TObject)
procedure Button1Click(Sender: TObject)
private
{ Private declarations }
public
{ Public declarations }
end
const
n=20
a:array[1..n] of string[11]=('13607193000','13607193001',
'13607193002','13607193003','13607193004',
'13607193005','13607193006','13607193007',
'13607193008','13607193009',
'13607193010','13607193011','13607193012',
'13607193013','13607193014',
'13607193015','13607193016','13607193017',
'13607193018','13607193019')
var
Form1: TForm1
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject)
var
k:integer
begin
k:=trunc(n*random+1)
label1.Caption:=a[k]
end
procedure TForm1.FormCreate(Sender: TObject)
begin
randomize
end
procedure TForm1.Button1Click(Sender: TObject)
begin
memo1.Lines.Add(label1.Caption)
end
end.
朋友,想实现这些功能,任何一种通用语言都可以办到。甚至使用具有宏编程功能的一些办公软件也可以。我建议你使用Delphi或VB。其开发工具可以使任何初学者都快速上手。并且在显示上可以优雅地实现。
另外,单就此软件而言,恐怕将不可避免地使用数据库。作为个人使用,可采用最简单的Access桌面数据库。
我想你的设计意图大概是,针对历史数据进行分析和汇总,并给出最接近中奖的一组数字。所以,除掌握开发语言外,你还必须对用于 *** 作数据库的SQL语言有一定了解。
总结:学习Delphi,Access,SQL。此三种工具在书店有大量相关书籍可供购入。最好找以“Delphi数据库编程”为核心的书。其中将会提供翔实的例程。1.编程语言和 *** 作系统:Visual c++ (vc) visual baseic vb visual foxpro delphi c++ builder powerbuidervc.net vb.netAsp.net java;Windows32 win95,win98,win2000,windows me,windows2000,windowsxp,windowNT/winntlinux,PDA/windowsCE/smartphone手机/arm/ppc2000/ppc2002pocket pc2002, ce.net掌上电脑,嵌入式设备,移动设备;
2.控件及平台:二维绘图控件、2d/3D图形控件、三维图形控件、矢量图形控件、矢量绘图控件、图形中间件、图形插件、图形浏览控件,CAD插件、CAD控件、矢量控件、GIS控件、GIS图形控件,GIS插件,图形软件开发源码,测绘控件,视频CAD,图形算法库、几何算法库、winCE图形控件 PDA图形控件,源码、免费下载、软件试用、编程资源、矢量图形软件开发,算法源码,c++源码,SmartPhone,CAD软件开发,GIS软件开发,Linux图形平台,CAD自主平台,CAD开发平台,GIS开发平台,图形软件开发引擎,IE图形控件,几何算法控件;
3.文件格式解析、文件格式转换、图形文件浏览、BMP、GIF、ICO、TGA、PCX、WBMP、WMF、EMF,JPEG、PNG、MNG、TIFF、JBIG、PNM,PPM,PGM、RAS,DXF ,DWF(4.0-6.0)、DWG(2.5-2005) 、IGS, MIF,PLT,PRN,HPGL/HPGL2、DGN(8.0), SHP, IGSAT, PS/IGES, PS/STEP, PS/VDA-FS, PS/PRO ENGINEER, PS/ACIS, PS/BOBY SHOP,QCD,SHX字体、TTF字体、SHP字体,LIN,GBR,pat,AutoCAD字体线型,mdf,dwg浏览,SVG格式;dwg2005,dwgr14,autocad2005,r14,r15,r18,2006,,GERBER RS-274X
4.资源下载:SHX字体下载,TTF字体,SHP字体,图库下载,建筑图库,电气图库,园林图库下载,dwf2dxf.exe,dwg2dxf.exe,hpgl2cad.exe,askern.dll,asocx.ocx,depend.exe,winrar.exe,winzip.exe,zip,rar,mfc42.dll
5.算法总汇:求交算法,相切,裁减,直线、圆、弧、椭圆、样条曲线、函数曲线、曲面、三维消隐、面积算法、长度计算、体积计算;点云,不规则体、三角形、找最小区域、查找最大区域、路径查找、相量、向量、矢量、单位向量、矩阵、矩阵变换,交点、切点、圆心等、解析几何、线性代数,贝赛尔曲线算法;坐标变换;
6. 图形技术汇总:Unigraphics,pro/engineer,i-deas,pkpm,3ds,3dmax,mastercam9.0,dwfsdk toolkit,PRO/E,SOLiDWORKS,AUTOCAD,Intellicad,VisualCASE,SolidEdge,UG,caxa,MDA,catia,powercad,opengl,heidi,acis,ug,microstation,opendwg,opendgn,Freetype,OpenSceneGraph,brlcad,mapinfo,arcinfo,hoops,zlib,solidedge,mdt,gdi++,directX,directdraw,directshow,计算机图形学,OdDbDatabasePtr,DWGdirect使用;
7. PDM/MRPII/ERP/OA等行业:图形文件浏览、图档管理、审图、批注图纸、权限管理、web图档管理、xml/rml批注文件 兼容Volo View Express和AutoCAD格式;数字签名等;redline,rml红线批注文件,产品数据管理,电子图纸管理
Windows的动态链接库原理
动态链接库(DLLs)是从C语言函数库和Pascal库单元的概念发展而来的 所有的C语言标准库函数都存放在某一函数库中 同时用户也可以用LIB程序创建自己的函数库 在链接应用程序的过程中 链接器从库文件中拷贝程序调用的函数代码 并把这些函数代码添加到可执行文件中 这种方法同只把函数储存在已编译的 OBJ文件中相比更有利于代码的重用
但随着Windows这样的多任务环境的出现 函数库的方法显得过于累赘 如果为了完成屏幕输出 消息处理 内存管理 对话框等 *** 作 每个程序都不得不拥有自己的函数 那么Windows程序将变得非常庞大 Windows的发展要求允许同时运行的几个程序共享一组函数的单一拷贝 动态链接库就是在这种情况下出现的 动态链接库不用重复编译或链接 一旦装入内存 Dlls函数可以被系统中的任何正在运行的应用程序软件所使用 而不必再将DLLs函数的另一拷贝装入内存
动态链接库的工作原理
动态链接 这几字指明了DLLs是如何工作的 对于常规的函数库 链接器从中拷贝它需要的所有库函数 并把确切的函数地址传送给调用这些函数的程序 而对于DLLs 函数储存在一个独立的动态链接库文件中 在创建Windows程序时 链接过程并不把DLLs文件链接到程序上 直到程序运行并调用一个DLLs中的函数时 该程序才要求这个函数的地址 此时Windows才在DLLs中寻找被调用函数 并把它的地址传送给调用程序 采用这种方法 DLLs达到了复用代码的极限
动态链接库的另一个方便之处是对动态链接库中函数的修改可以自动传播到所有调用它的程序中 而不必对程序作任何改动或处理
DLLs不仅提供了函数重用的机制 而且提供了数据共享的机制 任何应用程序都可以共享由装入内存的DLLs管理的内存资源块 只包含共享数据的DLLs称为资源文件 如Windows的字体文件等
Windows系统的动态链接库
Windows本身就是由大量的动态链接库支持的 这包括Windows API函数 ( KRNLx EXE USER EXE GDI EXE …) 各种驱动程序文件 各种带有 Fon和 Fot 扩展名的字体资源文件等 Windows还提供了针对某一功能的专用DLLs 如进行DDE编程的ddeml dll 进行程序安装的ver dll等
虽然在编写Windows程序时必然要涉及到DLLs 但利用Delphi 用户在大部分时候并不会注意到这一点 这一方面是因为Delphi提供了丰富的函数使用户不必直接去使用Windows API另一方面即使使用Windows API 由于Delphi把API函数和其它Windows DLLs函数重新组织到了几个库单元中 因而也不必使用特殊的调用格式 所以本章的重点放在编写和调用用户自定义的DLLs上
使用传统的Windows编程方法来创建和使用一个DLLs是一件很令人头痛的事 正如传统的Windows编程方法本身就令人生畏一样 用户需要对定义文件 工程文件进行一系列的修改以适应创建和使用DLLs的需要 Delphi的出现 在这一方面 正如在其它许多方面所做的那样 减轻了开发者的负担 更令人兴奋的是Delphi利用DLLs 实现了窗体的重用机制 用户可以将自己设计好的窗体储存在一个DLLs中 在需要的时候可随时调用它
DLLs的编写和调用
DLLs的编写
在Delphi环境中 编写一个DLLs同编写一个一般的应用程序并没有太大的区别 事实上作为DLLs 主体的DLL函数的编写 除了在内存 资源的管理上有所不同外 并不需要其它特别的手段 真正的区别在工程文件上
在绝大多数情况下 用户几乎意识不到工程文件的存在 因为它一般不显示在屏幕上 如果想查看工程文件 则可以打开View菜单选择Project Source项 此时工程文件的代码就会出现在屏幕的Code Editor(代码编辑器)中
一般工程文件的格式为
program 工程标题
uses 子句
程序体
而DLLs工程文件的格式为
library 工程标题
uses 子句
exprots 子句
程序体
它们主要的区别有两点
一般工程文件的头标用program关键字 而DLLs工程文件头标用library 关键字 不同的关键字通知编译器生成不同的可执行文件 用program关键字生成的是 exe文件 而用library关键字生成的是 dll文件
假如DLLs要输出供其它应用程序使用的函数或过程 则必须将这些函数或过程列在exports子句中 而这些函数或过程本身必须用export编译指令进行编译
根据DLLs完成的功能 我们把DLLs分为如下的三类
完成一般功能的DLLs
用于数据交换的DLLs
用于窗体重用的DLLs
这一节我们只讨论完成一般功能的DLLs 其它内容将在后边的两节中讨论
编写一般DLLs的步骤
编写一般DLLs的步骤如下
利用Delphi的应用程序模板 建立一个DLLs程序框架
对于Delphi 的用户 由于没有DLLs模板 因此
( ) 建立一个一般的应用程序 并打开工程文件
( ) 移去窗体和相应的代码单元
( ) 在工程文件中 把program改成library 移去Uses子句中的Forms 并添加适当的库单元(一般SysUtils Classes是需要的) 删去begin…end之间的所有代码
以适当的文件名保持文件 此时library后跟的库名自动修改
输入过程 函数代码 如果过程 函数准备供其它应用程序调用 则在过程 函数头后加上export 编译指示
建立exports子句 包含供其它应用程序调用的函数和过程名 可以利用标准指示 name Index resident以方便和加速过程/函数的调用
输入库初始化代码 这一步是可选的
编译程序 生成动态链接库文件
动态链接库中的标准指示
在动态链接库的输出部分 用到了三个标准指示 name Index resident
name
name后面接一个字符串常量 作为该过程或函数的输出名 如
exports
InStr name MyInstr
其它应用程序将用新名字(MyInstr)调用该过程或函数 如果仍利用原来的名字(InStr) 则在程序执行到引用点时会引发一个系统错误
Index
Index指示为过程或函数分配一个顺序号 如果不使用Index指示 则由编译器按顺序进行分配
Index后所接数字的范围为 … 使用Index可以加速调用过程
resident
使用resident 则当DLLs装入时特定的输出信息始终保持在内存中 这样当其它应用程序调用该过程时 可以比利用名字扫描DLL入口降低时间开销
对于那些其它应用程序常常要调用的过程或函数 使用resident指示是合适的 例如
exports
InStr name MyInStr resident
lishixinzhi/Article/program/Delphi/201311/25207
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)