




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、delphi 安装 cad 控件我下载的是使用版本,用的 Delphi 版本是 Delphi7 ,在下载的文件包目录 CADImportVCLv6.1 产品试用版 cadimportvclDelphiLib7 有个 sgGrpVw7.dpk 文件,用 Delphi 打开后,先点 compile , 然后再in stall就可以了,操作的时候貌似会出现message提示有warni ng,不过貌似不影响安装。下面附加 Delphi 安装第三方控件的方法供参考:由于组件提供的方式不同, 所以安装的方法也是不一样的, 下面就目前常见的各种形式的组 件的安装方法介绍一下。1 只有一个 DCU 文件的组
2、件。 DCU 文件是编译好的单元文件,这样的组件是作者不想把源 码公布。一般来说,作者必须说明此组件适合 Delphi 的哪种版本,如果版本不对,在安装时就 会出现错误。也正是因为没有源码,给使用者带来了不便,那就是一旦Delphi 版本升级,此组件就不能再使用了,当然有的作者给出了几种版本的 DCU 文件,用户根据需要选择使用。 这样的组件的安装方法是:在 Component 菜单中,选择 install component ,在对话框中的into existing package页中,单击Unit file name ” 后的Browse”按钮,在打开的文件对话框中,将“文件类型”设定为
3、*.dcu,找到要安装的 DCU文件,按OK按钮返回into existing package页后再按OK按钮就可以安装了。注意,此时 Delphi会提示 dclusr40.dpk将被重建,是否继续,OK就可以了。这里是将组件安装到dclusr40.dpk包中,此包从文件名上可以看出是用户自定义组件包,先安装到这个包中吧,下面再讲有关注意 事项。安装完毕会有已经将组件注册完的提示信息以及安装到哪个组件页中的信息等,到 组件面板上看看,一般会出现一个新的组件页,其中有刚安装的组件。2、 只有PAS文件或既有PAS又有DCU文件的组件。这种组件因为有PAS文件,也就是说作 者提供了源码,这就好办多
4、了。安装的方法和上面是一样的,在文件类型中可以设定为DCU也可以设定为PAS建议设定为 PAS这样可用你的 Delphi重新编译一下,看是否会出现问题。 Delphi升级后只能选择 PAS文件安装,这样才能重新编译,使得组件能适应新Delphi版本。这样的组件是很值得使用的,根据心铃的经验,没有源码的组件最好不要使用,一是存在 Delphi 版本升级后无法使用的问题,再者当程序出现问题后用户无法调试组件来判断是否 是组件中存在 BUG。3、有 dpk 文件的组件包。带有 dpk 文件的组件包一般是有多个组件构成的,也就是说安装 后会有多个组件供使用,如果只有一个组件作者一般不会制成DPK 文件
5、,使用上面的方式发布就可以了。对于这样的组件包,一般来说会有详细的安装说明文件,如上面提到的RXLIB, 由于组件复杂且安装时有先后顺序,作者不提供安装说明用户根本无法正确安装。如果没有安装说明文件,那么用下面的方法安装:在File菜单下,选择”OPEN”打开dpk文件(文件类型列表框中选*.dpk),在出现的Package窗口中,工具栏上有In stall按钮,按此 按钮即可进行安装。如果 Install 按钮处于无效状态,那么先按 Compile 按钮编译,一般 来说编译之后 Install 按钮就会处于有效状态,此时再按 Install 按钮就可以了。4、带有 Bpl 文件的组件包。一般
6、来说这也是由多种组件构成的组件包,它其实是一个动态连接库文件(DLL)。对于这种组件包的安装方法是:在component菜单下选择“ in stall packages ”,然后单击Add按钮,在打开的文件对话框中找到相应的bpl文件打开返回后,再单击 Ok按钮就可以了。5、 ActiveX 控件的安装。要安装这类控件,需要先用regsvr32.exe 注册,然后选择Component 菜单中 Import ActiveX Control 项。在 Import ActiveX Control 打开的窗口中, 只有已经注册的 ActiveX控件才出现在列表中,选中一个然后按In stall按钮就
7、可以安装了。如果事先没有用regsvr32.exe注册也可以按 ADD按钮找到OCX文件即时注册,注册后再进 行 安装。几点说明: 1 在拿到组件后先看是否有说明文件,一般来说在说明文件中有如何安装的 指导,有些还会有组件的属性、事件、方法的使用说明,这些在使用时是非常重要的。2 在上面的组件(包)安装操作之前,最好将 *.bpl 拷贝到你的 System 目录中,将 *.pas、*.dcu、*.dcr、*.dp?拷贝到Delphi的Lib目录中再进行。3前面我们提到安 装DCU组件时,选用的是已经存在的dclusr40.dpk,当然也可以选择安装到一个新的包中,如果选择新包,需要先取一个名字
8、比如DEMO,事实上安装完毕后用户可以找到的是Demo.bpl,而找不到 DEMO.DPK。假如你已经将一个组件安装到dclusr40.dpk中了,还想再安装一个组件,如果再安装到 dclusr40.dpk 中,安装后你得到提示,原来安装的那个组件 已经被取消注册,你将无法使用了。这样不就成了只能安装一个组件了吗?除非你再安装 到一个新的包中才可以两个组件同时使用。当然每安装一个组件生成一个新的BPL文件也未偿不可,但BPL文件就增加许多。能否在 dclusr40.dpk中多安装几个组件呢?当然是可 以的。方法如下:用File菜单下的OPEN打开dclusr40.dpk文件,单击 ADD按钮,
9、在打开的对话框中选择 ADD UNIT页面,按Unit file name后的Browse”按钮打开组件单元文件, OK 即可,用此种方法这样可添加多个组件的单元文件,添加完毕,按一下编译按钮,然后 再按In stall按钮即可,如果单元文件是编译好的(DCU)可以直接按安装按钮。4组件的删除。光会安装可不行,还要会删除呀。很简单,在 component 菜单下,选择 in stall packages,在列表中找到安装所在的Bpl,按Remove按钮,ok!再把Bpl文件删掉就彻底了,如果不删除BPL文件,下次可以按安装BPL组件的方法再安装使用。上一篇: Delphi 连接 AutoCA.
10、下一篇:Object Pascal 的| 返回日志列表 用 Delphi 实现对 AutoCAD 的操作 图片 分享 复制地址 日志地址 : 请用Ctrl+C复制后贴给好友。雨蒙蒙的天空 2009 年 11月 05 日 18:33 阅读(4) 评论(0) 分类:个人日记 权限: 公开字体:大 小 中 大 更多 设置置顶 权限设置 推荐日志 转为私密日志 删除 编辑一、概述AutoCAD? ActiveX?使用户能够从 AutoCAD的内部或外部以编程方式来操作AutoCAD。它是通过将 AutoCAD 对象显示到“外部世界”来做到这一点的。这些对象被显示后,许多不同的编程语言和环境以及其他应用
11、程序(例如 Microsoft? Word VBA 或Excel VBA)就可以 访问它们。在 AutoCAD 中实现 ActiveX 接口有两大优点:更多的编程环境可以编程访问 AutoCAD 图形。 在 ActiveX Automation 出现以前,开发人员 只能使用 AutoLISP? 或 C+ 接口。与其他 Windows?应用程序(如 Microsoft Excel和 Word)共享数据变得更加容易。二、在 Delphi中导入 AutoCAD类型库AutoCAD 2005 Automation 工程与 AutoCAD 2004 Automation 工程使用同一类型库 (acax1
12、6enu.tlb) 。类型库位于 C:Program FilesCommon FilesAutodesk Shared 目录下。在 Delphi 中按下述步骤导入类型库: Project 菜单 Import Type LibraryAdd.选择类型库(acax16e nu.tlb) 1 nstall.然后就会生成一个 AutoCAD_TLB.pas 文件。在Unit单元中引用 AutoCAD_TLB,然后就可以按照 CAD自带的帮助文件ActiveX和VBA开 发人员指南中的相关说明使用了。三、简单的一个例子:(新建一个图形文件,输入文字,并全部显示)新建一个工程,添加一个按钮。下面为全部代码
13、。unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls,ComObj,autocad_tlb;typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);private Private declarations public Public declarations end;varForm1: TForm1;imple
14、mentation$R *.dfmprocedure TForm1.Button1Click(Sender: TObject);var cad,CADDOC,inpoint:variant;textheight:integer;begin/form1.Visible:=false;trycad:=GetActiveOleObject(AutoCAD.Application);exceptcad:=createOleObject(AutoCAD.Application);end;cad.WindowState := $00000003; / 最大化/(acmax-$00000003,acmin-
15、$00000002,acnorm-$00000001) cad.Visible := true;/ 设置为可视trycaddoc:=cad.activedocument;/ 选择当前活动文档 exceptcaddoc:=cad.documents.add();/ 如果没有打开文档则新建一个 end;inpoint:=varArraycreate(0,2,5);inpoint0:=strtoint(30);inpoint1:=strtoint(40);inpoint2:=strtoint(30);textheight:=strtoint(5);caddoc.ModelSpace.addtext(
16、Hello , World! ,inpoint,textheight); cad.Application.ZoomExtents;end;end.unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids;typeTForm1 = class(TForm)ADOConnection1: TADOConnection;ADOConnection2: TADOConnect
17、ion;Button1: TButton;OpenDialog2: TOpenDialog;ADOQuery1: TADOQuery;ADOQuery2: TADOQuery;DBGrid1: TDBGrid;DataSource1: TDataSource;Button2: TButton;Label1: TLabel;SaveDialog1: TSaveDialog;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TOb
18、ject);private Private declarations public Public declarations end;varForm1: TForm1;implementation$R *.dfmprocedure TForm1.Button1Click(Sender: TObject); 将 Excel 导入 access varsFileName, sTableName: string;sl: TStringList;i: integer;beginif not OpenDialog2.Execute then Exit;if not ADOConnection1.Conne
19、cted then ADOConnection1.Connected:=True; / 判断是否连 接trysFileName := OpenDialog2.FileName;ADOConnection2.Connected := False; / 注 意 这 里 连 接 EXCEL 的 参 数 / 关键是这里ADOConnection2.ConnectionString := Provider=Microsoft.Jet.OLEDB.4.0;Password=;Data Source= + sFileName + ;Extended Properties=Excel 8.0;IMEX=1;P
20、ersist Security Info=False;ADOConnection2.Connected := True;/sl := TStringList.Create;ADOConnection2.GetTableNames(sl); / 记住 Excel 文件的 底部 必须是 sheet1 否则不 能导入sTableName := sl0;if Pos($, sTableName) 0 then sTableName := + sTableName + ;ADOquery2.Close;ADOquery2.SQL.Clear;ADOquery2.SQL.Text := SELECT *
21、FROM + sTableName;ADOquery2.Open;sl.Free;ADOquery1.Close;ADOquery1.Sql.Text := SELECT top 1 * FROM shiyan where 1=0; / 打开 空记录表 这里可以用 insert, 不用 appendADOquery1.Open; / 根据自己习惯 做吧 .if ADOquery2.RecordCount 0 thenbeginADOquery2.First;for i := 1 to ADOquery2.RecordCount do / beginADOquery1.Append;ADOque
22、ry1.FieldValues 孔号 :=ADOquery2.FieldValueskonghao;ADOquery1.FieldValues 图号 :=ADOquery2.FieldValuestuhao;ADOquery1.FieldValues 层号 :=ADOquery2.FieldValuescenghao;AD0query1.FieldValues深度:=AD0query2.FieldValuesshendu;AD0query1.FieldValues岩土名称:=AD0query2.FieldValuesytmc;ADOqueryl. Post;ADOquery2.Next;en
23、d;en d;MessageBox(Ha ndle,导入完成!,完成! ,MB_OK+MB_ICONINFORMATION); exceptMessageBox(Ha ndle,失败!,信息! ,MB_OK+MB_ICONINFORMATION);en d;en d;/判断是否连procedure TForm1.Button2Click(Sender: TObject); 打开 access -SP 表 beginif n ot ADOCo nn ectio n1.Co nn ected the nADOCo nn ectio n1.Co nn ected:=True;接ADOquery1.C
24、lose;ADOquery1.Sql.Text := SELECT * FROM shiya n;ADOquery1.Ope n;en d;procedure TForm1.FormCreate(Sender: TObject);beginen d;en d.DBGrid1 图为:i-F屮4Yi-“聪明的程序员用 Delphi !”现在,真是有越来越多的人开始用Delphi 了。不过,高手毕竟是少数,像我这样的菜鸟可谓遍地都是, 哈哈。既然是菜鸟自然就有一大堆很菜的问题,什 么这个怎么设置、那个怎么写的所以,以下我就以我所积累的那一点点经验和论坛上常见的小问题作一个总结性发言(全场热烈鼓掌!哎
25、, 这鲜花我就收下了, 那个什么烂番茄就 不要扔上来了嘛)=系统应用篇=A. Delphi自代了大量的常用控件,女口 Delphi5就有一百多了,而今年出的 Delphi6更是Delphi5 的 1.5 倍。这么多控件,就是在 1024*768 的分辨率下也无法全部显示他们的组件面板,而 每次要按那两颗小按钮来显示更多的面板, 真是非常不方便! 但通过添加下面那一个注册表 键值就能实现组件面板自动展开:HKEY_CURRENT_USERSoftwareBorlandDelphiX.0ExtrasAutoPaletteSelect=1(注:X.0表示你的Delphi的版本号;如果没有 Extra
26、s主键则新建即可,下同)E.每次新建窗体,然后设置其字体、大小真是好麻烦的!那就再添加一个以下的键值,让系统自动来设置吧:HKEY_CURRENT_USERSoftwareBorlandDelphiX.0FormDesignDefaultFont= 宋体,9,_(注:_表示空格,也可以用Bold(粗体)等代替)C. 自定义工作环境,让它更加适合自己。?设置工具栏。在Delphi的工具栏右键单击,选Customize,然后挑选需要的按钮拖到工具上,把不要的拖出来。 我常用的是: Standard 工具栏下的 Open、 Open Project 、 Save、 Save All、 Un do、R
27、edo; Debug 工具栏下的 Pause、Add Watch、Program Reset、Ru n; Desktop 工具栏 下的 Save Current Desktop、 Set Debug Desktop; Component Palette 工具栏。?设置窗口布局。为了能跟高效的编写程序,合理的布置各个窗口是很重要的。我常用的窗口有: Object Inspector 、 Project Manager(View|Project Manager) 、 Watch List(Run|AddWatch.) ,具体的停放位置如图 1。设置好各个窗体后按 Desktop 工具栏上的 Sav
28、e Current Desktop 按钮保存。?设置显示颜色。 让代码的颜色更符合自己的习惯, 有利于编写时思维的清晰。 Tools|Editor Options打开Editor Properties,选Color标签页,设置代码颜色。以下仅解释一下几个常用 的:Whitespace :空白处,即背景;Comment :注释;Reserved word :保留字;String :字符串;Number :数字;Execution Point :正在执行的当前行(即F7步入时所到达的那一行);Enabled break :断点;Error line :错误发生行;D. 掌握一些Delphi编程中的
29、快捷键,能够极大程度的提高效率,还不会让你因为过多无聊的设置等而感到厌烦, 现在如果不用这些快捷键, 我会很不适应这样的编程的! 以下我就 介绍一下我常用的几个快捷键:Esc :选择当前选中组件的容器(通常是Panel,GroupBox或Form等);Ctrl+方向键:将所选组件移动一个像素;Ctrl+Shift+方向键:将所选组件移动一大格(类似 Fireworks中按住Shift再用方向键移动时 的效果);Shift+方向键:调整选中组件的大小,每次一像素;Shift+选中组件:按住Shift键再用鼠标点击组件,可以同时选择多个组件;Ctrl+鼠标左键:在procedure中掉用其他的函数
30、(如一个自定义的过程),在这个调用处按住 Ctrl 会发现当鼠标移上去的时候变成了一个类似超链接的格式,鼠标单击就能直接转到所调用的此函数的实现部分。这个功能我可是用的最多了,让我找模块变得非常方便!Ctrl+Shift+C :在一个对象中声明了一个方法,然后把光标放到它的上面,按下Ctrl+Shift+C就可以为他的实现建立一个基本框架,如:TForm1 = class(TForm)private Private declarations public Public declarations procedure Mine;end;把光标放到procedure Mine这行,按下 Ctrl+S
31、hift+C,下面这段代码将自动插入到单元中: procedure TForm1.Mine;beginend;=窗体操作篇=在有多个窗体的程序中, Delphi 默认是将它们在程序启动时全部创建(只是都隐藏了, 只显示一个主窗体) ,这样,那些暂时不必要启动的窗体就占用了许多内存空间。所以我们 需要在菜单 Project|Options. 的 Forms 标签页下, 将那些暂时不要启动的窗体从 “Auto-create forms ”下转移到“Available forms ”中。这样,这些窗体的创建和释放就需要代码来实现了。A.两种创建窗体方法之比较。对于这些非自动创建的窗体,我们必须在Sh
32、ow之前Creat(Self)或 Create(Application),将其创建。如 Form2.Creat(Self)和 Form2.Create(Application),可是, 它们两个到底有什么区别呢?其实两者区别不大, 但如果 Owner 是属于别的窗口或控件的话,当它的 Owner 被释放的时候,该 Owner 所拥有 的也会被释放。 关键的区别是由谁来管理该窗体的资源。用第一种方法创建, 该窗体的资源由编程者来负责管理;用第二种方法创建,该窗体的资源由 Application 来管理。E. 几种窗体的释放方法。既然是为了节约内存,那么用完了的窗体就应该“搬出”内存。 在这里我列
33、举几个大同小异的方法:(1)procedure TForm1.Button1Click(Sender :TObject);begin if Form2 = nil thenForm2:=TForm2.Create(Application);Form2.ShowModal;end;procedure TForm2.close(Sender: TObject; var Action: TCloseAction); beginModalResult := mrNone;Action := caFree;Form2 := nil;end;(2)procedure TForm1.Button1Click
34、(Sender :TObject);beginif not Assigned(Form2) thenbeginApplication.CreateForm(TForm2,Form2);tryForm2.ShowModal;finallyForm2.Free;Form2 := nil;end;endelseForm2.ShowModal;end;(3)procedure TForm2.Button1Click(Sender :TObject);beginForm2.Close;Form2.Release;end;=控件使用篇=A.大名鼎鼎的RXLib控件包是由三位俄罗斯高手编写的,非常的出色!不
35、过,内容太多了,要用好也不容易。我在此拿 RxRichEdit 简单地说几点。?好多人都问RxLib怎么安装,似乎的确有点复杂,呵呵,所以我也顺便说一下:运行 rxinst.exe 将 RxLib 先安装到 Program FilesBorlandDelphi5 (或 6) RX 文件夹下, 然后打开 Delphi,选 FileOpen.,将 RXCTL5.DPK RXDB5.DPK RXBDE5.DPK分别打开后按 compile,继续打开:DCLRX5.DPK DCLRXDB5.DPK和 DCLRXBD5.DPK 将这三个分别按 compile 后按 install 就可以了 :-)?Al
36、lowObjects属性。Win98下默认设置为 True,右键菜单没有问题,但设为 False时快捷 菜单会连续出现两次; Win2000下,设为True时会使右键菜单无法弹出,而 False时却显示 正常。所以,为了系统的兼容性,需要判断当前OS版本:procedure TFormMain.FormCreate(Sender: TObject);varOSVI:OSVERSIONINFO;beginOSVI.dwOSVersionInfoSize:=sizeof(OSVERSIONINFO);GetVersionEx(OSVI);case OSVI.dwPlatformId of1:RxR
37、ichEdit1.AllowObjects:=true;2:RxRichEdit1.AllowObjects:=false;end;end;但我不知这个属性为什么会有这么一个问题,还望高手指点。?0nURLCIick事件。RXRichEdit有自动将网页地址转为超链接格式,但具体的行为还是要自己写代码的,不然这些地址就成了个空壳了:procedure TFormMain.RXRichEdit1URLCIick(Sender: T0bject; const URLText: String; Button: TMouseButton);beginif Button = mbLeft thenShe
38、IIExecute(HandIe, niI, PChar(URLText), niI, niI, SW_SH0W);end;E.为了节约内存,优化运行,我们总是动态创建组件。可当用完之后,如果不及时彻底的 将其从内存中清理出去,那就有违我们的初衷了。可怎么“杀死”所创建的组件 ? 比如创建 了一个Edit控件,现在想让它消失,但用Edit.Free后,调用Edit.Text却仍然存在我们知道,光Free是不行的,这只是将Edit所指向的内存空间释放了,但是指针并没有设定为nil ,当调用Edit.Text时,Delphi仍然会根据Edit提供的指针访问已经释放的内存区域,所以会产生 Acces
39、s Violation .错误。所以我们需要在Free 后 Edit:=nil 或者 FreeAndNil (只在 Delphi5下有效)将指针 nil 掉,才能保证以后的正常运行。C.将各控件的提示文本显示于状态行上。这个可用Application的On Hi nt事件,但由于Application 为不可件对象,因此可以采用如下方法:publicprocedure DisplayHint(Sender: TObject); / 声明一个方法用于显示提示文本 end;procedure TForm1.DisplayHint(Sender: TObject); / 实现部分 beginStat
40、usBar1.SimpleText := GetLongHint(Application.Hint);end;procedure TForm1.FormCreate(Sender: TObject);beginApplication.OnHint := DisplayHint;end;这样显示在状态栏里的文本和提示框 (就是那个自动出现的黄色小框) 里的是一样的。 如果 想要在状态栏里的提示文本更加详细怎么办?其实,只要控件的Hint 属性这样写:MyHint|lts just a MyHint!,就可以让| ”前的内容显示在提示框(Help Hint box )里,|”的后面的内容显示在状态
41、栏里了。D. ListView使用中的一些要点。以下以一个两列的ListView为例。T增加一行:with ListView1 dobeginListItem:=Items.Add;ListItem.Caption:= 第一列内容 ;ListItem.SubItems.Add( 第二列内容 );end;t清空 ListViewl :ListView1.Items.Clear;t得到当前被选中行的行的行号以及删除当前行:For i:=0 to ListView1.Items.Count-1 DoIf ListView1.Itemsi.Selected then /i=ListView1.Sele
42、cted.indexbeginListView1.Items.Delete(i); / 删除当前选中行end;当然, ListView 有 OnSelectItem 事件 ,可以判断选择了哪行 ,用个全局变量把它赋值出来。T读某行某列的操作:Edit1.Text := listview1.Itemsi.Caption; / 读第 i 行第 1 列Edit2.Text := listview1.Itemsi.SubItems.strings0;/ 读第 i 行第 2 列Edit3.Text := listview1.Itemsi.SubItems.strings1;/ 读第 i 行第 3 列以次
43、类推,可以用循环读出整列。T将焦点上移一行:For i:=0 to ListView1.Items.Count-1 DoIf (ListView1.Itemsi.Selected) and (i0) thenbeginListView1.SetFocus;ListView1.Items.Itemi-1.Selected := True;end;不过在 Delphi6 中, ListView 多了一个 ItemIndex 属性,所以只要ListView1.SetFocus;ListView1.ItemIndex:=3;就能设定焦点了。=其他=?为了优化软件, 使其精益求精, 当用到数组时经常采用
44、动态数组。 在声明时, 如: A : array of string,然后在使用数组之前,SetLength(A,3)设置数组长度为 3,即A0,A1,A2,这样就可以了。当需要扩大数组长度时,再一次:SecLength(A,5),那么,就增加了 A3和A4,而前面的A0,A1,A2里的值不会清空;同样,如果SecLength(A,3)后再SecLength(A,1)的话,就只剩 A0 了,A1和A2自动被清除内存。注意:动态数组是从“0”开始的,所以SetLength(A,1)后 High(A)=0 的! !最后当不再用这个动态数组了,而程序还没有要退出,那为了节省内存用:A:=nil 来释
45、放掉这个数组,这下真正达到了“绿色环保” :)?“怎么获取当前程序运行的路径”这个问题经常能够在论坛上看到。的确,这个函数在编程中不时的要用到的。其实有好几个函数都能达到这个效果: t GetCurre ntDirectory() : Win API 函数,具体用法如下:varMyCurrentDir:Array0.144 of Char; / 存储当前绝对路径beginGetCurrentDirectory(SizeOf(MyCurrentDir),MyCurrentDir); / 取得当前绝对路径 ,最 后得到的格式如: C:WINDOWSSYSTEMMyCurrentDir:=MyCur
46、rentDir+MySoftName.exe;end;t GetCurrentDir() : GetCurrentDirectory 经过 Delphi 封装后的 一个函 数, 用 法简单 : MyCurrentDir:=GetCurrentDir 。最后得到的格式如: C:WINDOWSSYSTEM还 有 就 是 可 以 直 接 得 到 路 径 的 函 数 : ExtractFilePath(ParamStr(0) 、ExtractFilePath(Application.exename) 等。?系统的关机、重新启动等操作的消息。这也是一个常有人问的问题,在此我也顺便在提一下:关机: Exi
47、tWindowsEx(EWX_SHUTDOWN,32); 重新启动: ExitWindowsEx(EWX_REBOOT,32);注销: ExitWindowsEx(EWX_LOGOFF,32);关闭电源: ExitWindowsEx(EWX_POWEROFF,32);?在 Delphi 中,除了使用 #39 外,要在程序中(如 ShowMessage 中)显示“单个单引号” 要如何处理? 和 都会出现编译错误。 其实,是四个单引号表示一个单引号, 也就是是 , 第二个和第三表明这是一个 “ ”,第一个和第四个是表明这是一个字符型。呵呵,很有趣哦: )?ShowMessage 中的汉化问题。 S
48、howMessage 中的按钮都是 E 文的,让人很不舒服。其实 经过我们的一番 DIY,也能把它们都弄成中文的。首先要保存当前的工程,然后选Project|Languages|Add. ,出现 Add Language 对话框,选择你要汉化的工程(也可以自定义文件夹),Next;选最后一项“中文(中国)”,Next ;Next ; Next ; Fi nish; OK;然后就出现了 Tran slation Ma nager对话框,在左边选“中文(中 国) |Resource Scripts|Projet1_DRC (这个具体要看你的工程文件名) ”,然后右边的列表里找 到“Const_SM
49、sgDlgOK项,将其的“中文(中国)(translated) ”格改为“确定”(原为OK), 保存后退出。这下,再运行一下程序,哈哈,是不是就是中文按钮啦!不过,ShowMessage这种类型的信息对话框非常简单了,可以在系统调试期间显示给开发人员一些过程信息。 但由于过于简单, 所以我建议在软件的正式版中不要使用这样的对话 框。而且,最好用 MessageBox代替ShowMessage以减小软件的体积,例如,同样一个DLL文件,采用 MessageBox编译后的 DLL文件大小为 58K,而ShowMessage后就变成了 301K! !语言: Delphi方法一:api 函数: shf
50、ileoperation procedureCopyDirTree(Ahdl:THandle;SourceDir,TargetDir:String); varSHFileOpStruct:TSHFileOpStruct;FromDir,ToDir:PChar;beginGetMem(fromdir,length(sourcedir)+2);GetMem(todir,length(targetdir)+2);tryfillchar(fromdirA,le ngth(sourcedir)+2,0);fillchar(todirA,le ngth(targetdir)+2,0);strcopy(fr
51、omdir,Pchar(sourcedir);strcopy(todir,Pchar(targetdir);withSHFileOpStructdobeginwnd:=ahdl;wfunc:=FO_COPY;pfrom:=fromdir;pto:=todir;fflags:=FOF_NOCONFIRMATIONorFOF_RENAMEONCOLLISION;fAnyOperationsAborted:=false;hnamemappings:=nil;lpszprogresstitle:=nil;ifshfileoperation(shfileopstruct)0thenraiselastwi
52、n32error;end;finallyFreeMem(fromdir,length(sourcedir)+2);FreeMem(todir,length(targetdir)+2);end;end;方法二:functionDoCopyDir(sDirName:String;sToDirName:String):Boolean;varhFindFile:Cardinal;t,tfile:String;sCurDir:String255;FindFileData:WIN32_FIND_DATA;begin/ 先保存当前目录sCurDir:=GetCurrentDir;ChDir(sDirName
53、);hFindFile:=FindFirstFile(*.*,FindFileData);ifhFindFileINVALID_HANDLE_VALUEthen begin ifnotDirectoryExists(sToDirName)then ForceDirectories(sToDirName);repeattfile:=FindFileData.cFileName;if(tfile=.)or(tfile=.)thenContinue;ifFindFileData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORYthenbegint:=sToDirNa
54、me+tfile;if notDirectoryExists(t)thenForceDirectories(t);ifsDirNameLength(sDirName)thenDoCopyDir(sDirName+tfile,t)elseDoCopyDir(sDirName+tfile,sToDirName+tfile);endelsebegint:=sToDirName+tFile;CopyFile(PChar(tfile),PChar(t),True);end;untilFindNextFile(hFindFile,FindFileData)=false;Windows.FindClose(hFindFile);endelsebeginChDir(sCurDir);result:=false;exit;end;/ 回到原来的目录下ChDir(sCurDir);result:=true;end;语言: VC方法一:#define_WIN32_WINNT0x0400#includewindows.hvoidcopydir(char*src,char*dst)WIN32_FIND_DATAFindFileData;HANDLEhFind;chartmpsrc256;strcpy(tmpsrc,src);strcat(tmpsrc,*.*);hFi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年成语故事试题及答案
- 2025-2030年移动公共厕所项目商业计划书001
- 初中语文阅读理解试题及答案
- 2025年血液系统用药项目发展计划
- 心理咨询师考试时应避免的错误试题及答案
- 2024年中医康复理疗师考试热点试题与答案
- 语文作业的设计与反馈机制试题及答案
- 2024年心理咨询师考试复习建议试题及答案
- 2025年镉镍航空蓄电池合作协议书
- 学生如何利用碎片时间进行自我学习
- 《公共建筑节能设计标准》广东省实施细则
- 心理健康教育-探索发现乐趣多课件
- 印章移交清单
- 1992年毕业证样本
- 可爱的中国教案全册
- 老年人慢性阻塞性肺疾病的护理-课件
- 水下地形测量技术设计书
- 2023版押品考试题库必考点含答案
- 质量管理工具与方法
- 全知读者视角
- 早会模板完整版
评论
0/150
提交评论