delphi安裝cad控件delphi一些語法及實(shí)例_第1頁
delphi安裝cad控件delphi一些語法及實(shí)例_第2頁
delphi安裝cad控件delphi一些語法及實(shí)例_第3頁
delphi安裝cad控件delphi一些語法及實(shí)例_第4頁
delphi安裝cad控件delphi一些語法及實(shí)例_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、delphi 安裝 cad 控件我下載的是使用版本,用的 Delphi 版本是 Delphi7 ,在下載的文件包目錄 CADImportVCLv6.1 產(chǎn)品試用版 cadimportvclDelphiLib7 有個 sgGrpVw7.dpk 文件,用 Delphi 打開后,先點(diǎn) compile , 然后再in stall就可以了,操作的時候貌似會出現(xiàn)message提示有warni ng,不過貌似不影響安裝。下面附加 Delphi 安裝第三方控件的方法供參考:由于組件提供的方式不同, 所以安裝的方法也是不一樣的, 下面就目前常見的各種形式的組 件的安裝方法介紹一下。1 只有一個 DCU 文件的組

2、件。 DCU 文件是編譯好的單元文件,這樣的組件是作者不想把源 碼公布。一般來說,作者必須說明此組件適合 Delphi 的哪種版本,如果版本不對,在安裝時就 會出現(xiàn)錯誤。也正是因為沒有源碼,給使用者帶來了不便,那就是一旦Delphi 版本升級,此組件就不能再使用了,當(dāng)然有的作者給出了幾種版本的 DCU 文件,用戶根據(jù)需要選擇使用。 這樣的組件的安裝方法是:在 Component 菜單中,選擇 install component ,在對話框中的into existing package頁中,單擊Unit file name ” 后的Browse”按鈕,在打開的文件對話框中,將“文件類型”設(shè)定為

3、*.dcu,找到要安裝的 DCU文件,按OK按鈕返回into existing package頁后再按OK按鈕就可以安裝了。注意,此時 Delphi會提示 dclusr40.dpk將被重建,是否繼續(xù),OK就可以了。這里是將組件安裝到dclusr40.dpk包中,此包從文件名上可以看出是用戶自定義組件包,先安裝到這個包中吧,下面再講有關(guān)注意 事項。安裝完畢會有已經(jīng)將組件注冊完的提示信息以及安裝到哪個組件頁中的信息等,到 組件面板上看看,一般會出現(xiàn)一個新的組件頁,其中有剛安裝的組件。2、 只有PAS文件或既有PAS又有DCU文件的組件。這種組件因為有PAS文件,也就是說作 者提供了源碼,這就好辦多

4、了。安裝的方法和上面是一樣的,在文件類型中可以設(shè)定為DCU也可以設(shè)定為PAS建議設(shè)定為 PAS這樣可用你的 Delphi重新編譯一下,看是否會出現(xiàn)問題。 Delphi升級后只能選擇 PAS文件安裝,這樣才能重新編譯,使得組件能適應(yīng)新Delphi版本。這樣的組件是很值得使用的,根據(jù)心鈴的經(jīng)驗,沒有源碼的組件最好不要使用,一是存在 Delphi 版本升級后無法使用的問題,再者當(dāng)程序出現(xiàn)問題后用戶無法調(diào)試組件來判斷是否 是組件中存在 BUG。3、有 dpk 文件的組件包。帶有 dpk 文件的組件包一般是有多個組件構(gòu)成的,也就是說安裝 后會有多個組件供使用,如果只有一個組件作者一般不會制成DPK 文件

5、,使用上面的方式發(fā)布就可以了。對于這樣的組件包,一般來說會有詳細(xì)的安裝說明文件,如上面提到的RXLIB, 由于組件復(fù)雜且安裝時有先后順序,作者不提供安裝說明用戶根本無法正確安裝。如果沒有安裝說明文件,那么用下面的方法安裝:在File菜單下,選擇”O(jiān)PEN”打開dpk文件(文件類型列表框中選*.dpk),在出現(xiàn)的Package窗口中,工具欄上有In stall按鈕,按此 按鈕即可進(jìn)行安裝。如果 Install 按鈕處于無效狀態(tài),那么先按 Compile 按鈕編譯,一般 來說編譯之后 Install 按鈕就會處于有效狀態(tài),此時再按 Install 按鈕就可以了。4、帶有 Bpl 文件的組件包。一般

6、來說這也是由多種組件構(gòu)成的組件包,它其實(shí)是一個動態(tài)連接庫文件(DLL)。對于這種組件包的安裝方法是:在component菜單下選擇“ in stall packages ”,然后單擊Add按鈕,在打開的文件對話框中找到相應(yīng)的bpl文件打開返回后,再單擊 Ok按鈕就可以了。5、 ActiveX 控件的安裝。要安裝這類控件,需要先用regsvr32.exe 注冊,然后選擇Component 菜單中 Import ActiveX Control 項。在 Import ActiveX Control 打開的窗口中, 只有已經(jīng)注冊的 ActiveX控件才出現(xiàn)在列表中,選中一個然后按In stall按鈕就

7、可以安裝了。如果事先沒有用regsvr32.exe注冊也可以按 ADD按鈕找到OCX文件即時注冊,注冊后再進(jìn) 行 安裝。幾點(diǎn)說明: 1 在拿到組件后先看是否有說明文件,一般來說在說明文件中有如何安裝的 指導(dǎo),有些還會有組件的屬性、事件、方法的使用說明,這些在使用時是非常重要的。2 在上面的組件(包)安裝操作之前,最好將 *.bpl 拷貝到你的 System 目錄中,將 *.pas、*.dcu、*.dcr、*.dp?拷貝到Delphi的Lib目錄中再進(jìn)行。3前面我們提到安 裝DCU組件時,選用的是已經(jīng)存在的dclusr40.dpk,當(dāng)然也可以選擇安裝到一個新的包中,如果選擇新包,需要先取一個名字

8、比如DEMO,事實(shí)上安裝完畢后用戶可以找到的是Demo.bpl,而找不到 DEMO.DPK。假如你已經(jīng)將一個組件安裝到dclusr40.dpk中了,還想再安裝一個組件,如果再安裝到 dclusr40.dpk 中,安裝后你得到提示,原來安裝的那個組件 已經(jīng)被取消注冊,你將無法使用了。這樣不就成了只能安裝一個組件了嗎?除非你再安裝 到一個新的包中才可以兩個組件同時使用。當(dāng)然每安裝一個組件生成一個新的BPL文件也未償不可,但BPL文件就增加許多。能否在 dclusr40.dpk中多安裝幾個組件呢?當(dāng)然是可 以的。方法如下:用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 實(shí)現(xiàn)對 AutoCAD 的操作 圖片 分享 復(fù)制地址 日志地址 : 請用Ctrl+C復(fù)制后貼給好友。雨蒙蒙的天空 2009 年 11月 05 日 18:33 閱讀(4) 評論(0) 分類:個人日記 權(quán)限: 公開字體:大 小 中 大 更多 設(shè)置置頂 權(quán)限設(shè)置 推薦日志 轉(zhuǎn)為私密日志 刪除 編輯一、概述AutoCAD? ActiveX?使用戶能夠從 AutoCAD的內(nèi)部或外部以編程方式來操作AutoCAD。它是通過將 AutoCAD 對象顯示到“外部世界”來做到這一點(diǎn)的。這些對象被顯示后,許多不同的編程語言和環(huán)境以及其他應(yīng)用

11、程序(例如 Microsoft? Word VBA 或Excel VBA)就可以 訪問它們。在 AutoCAD 中實(shí)現(xiàn) ActiveX 接口有兩大優(yōu)點(diǎn):更多的編程環(huán)境可以編程訪問 AutoCAD 圖形。 在 ActiveX Automation 出現(xiàn)以前,開發(fā)人員 只能使用 AutoLISP? 或 C+ 接口。與其他 Windows?應(yīng)用程序(如 Microsoft Excel和 Word)共享數(shù)據(jù)變得更加容易。二、在 Delphi中導(dǎo)入 AutoCAD類型庫AutoCAD 2005 Automation 工程與 AutoCAD 2004 Automation 工程使用同一類型庫 (acax1

12、6enu.tlb) 。類型庫位于 C:Program FilesCommon FilesAutodesk Shared 目錄下。在 Delphi 中按下述步驟導(dǎo)入類型庫: Project 菜單 Import Type LibraryAdd.選擇類型庫(acax16e nu.tlb) 1 nstall.然后就會生成一個 AutoCAD_TLB.pas 文件。在Unit單元中引用 AutoCAD_TLB,然后就可以按照 CAD自帶的幫助文件ActiveX和VBA開 發(fā)人員指南中的相關(guān)說明使用了。三、簡單的一個例子:(新建一個圖形文件,輸入文字,并全部顯示)新建一個工程,添加一個按鈕。下面為全部代碼

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;/ 設(shè)置為可視trycaddoc:=cad.activedocument;/ 選擇當(dāng)前活動文檔 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 導(dǎo)入 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 的 參 數(shù) / 關(guān)鍵是這里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 否則不 能導(dǎo)入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; / 根據(jù)自己習(xí)慣 做吧 .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,導(dǎo)入完成!,完成! ,MB_OK+MB_ICONINFORMATION); exceptMessageBox(Ha ndle,失??!,信息! ,MB_OK+MB_ICONINFORMATION);en d;en d;procedure TForm1.Button2Click(Sender: TObject); 打開 access -SP 表 begin/判斷是否連if 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 !”現(xiàn)在,真是有越來越多的人開始用Delphi 了。不過,高手畢竟是少數(shù),像我這樣的菜鳥可謂遍地都是, 哈哈。既然是菜鳥自然就有一大堆很菜的問題,什 么這個怎么設(shè)置、那個怎么寫的所以,以下我就以我所積累的那一點(diǎn)點(diǎn)經(jīng)驗和論壇上常見的小問題作一個總結(jié)性發(fā)言(全場熱烈鼓掌!哎

25、, 這鮮花我就收下了, 那個什么爛番茄就 不要扔上來了嘛)=系統(tǒng)應(yīng)用篇=A. Delphi自代了大量的常用控件,女口 Delphi5就有一百多了,而今年出的 Delphi6更是Delphi5 的 1.5 倍。這么多控件,就是在 1024*768 的分辨率下也無法全部顯示他們的組件面板,而 每次要按那兩顆小按鈕來顯示更多的面板, 真是非常不方便! 但通過添加下面那一個注冊表 鍵值就能實(shí)現(xiàn)組件面板自動展開:HKEY_CURRENT_USERSoftwareBorlandDelphiX.0ExtrasAutoPaletteSelect=1(注:X.0表示你的Delphi的版本號;如果沒有 Extra

26、s主鍵則新建即可,下同)E.每次新建窗體,然后設(shè)置其字體、大小真是好麻煩的!那就再添加一個以下的鍵值,讓系統(tǒng)自動來設(shè)置吧:HKEY_CURRENT_USERSoftwareBorlandDelphiX.0FormDesignDefaultFont= 宋體,9,_(注:_表示空格,也可以用Bold(粗體)等代替)C. 自定義工作環(huán)境,讓它更加適合自己。?設(shè)置工具欄。在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 工具欄。?設(shè)置窗口布局。為了能跟高效的編寫程序,合理的布置各個窗口是很重要的。我常用的窗口有: Object Inspector 、 Project Manager(View|Project Manager) 、 Watch List(Run|AddWatch.) ,具體的停放位置如圖 1。設(shè)置好各個窗體后按 Desktop 工具欄上的 Sav

28、e Current Desktop 按鈕保存。?設(shè)置顯示顏色。 讓代碼的顏色更符合自己的習(xí)慣, 有利于編寫時思維的清晰。 Tools|Editor Options打開Editor Properties,選Color標(biāo)簽頁,設(shè)置代碼顏色。以下僅解釋一下幾個常用 的:Whitespace :空白處,即背景;Comment :注釋;Reserved word :保留字;String :字符串;Number :數(shù)字;Execution Point :正在執(zhí)行的當(dāng)前行(即F7步入時所到達(dá)的那一行);Enabled break :斷點(diǎn);Error line :錯誤發(fā)生行;D. 掌握一些Delphi編程中的

29、快捷鍵,能夠極大程度的提高效率,還不會讓你因為過多無聊的設(shè)置等而感到厭煩, 現(xiàn)在如果不用這些快捷鍵, 我會很不適應(yīng)這樣的編程的! 以下我就 介紹一下我常用的幾個快捷鍵:Esc :選擇當(dāng)前選中組件的容器(通常是Panel,GroupBox或Form等);Ctrl+方向鍵:將所選組件移動一個像素;Ctrl+Shift+方向鍵:將所選組件移動一大格(類似 Fireworks中按住Shift再用方向鍵移動時 的效果);Shift+方向鍵:調(diào)整選中組件的大小,每次一像素;Shift+選中組件:按住Shift鍵再用鼠標(biāo)點(diǎn)擊組件,可以同時選擇多個組件;Ctrl+鼠標(biāo)左鍵:在procedure中掉用其他的函數(shù)

30、(如一個自定義的過程),在這個調(diào)用處按住 Ctrl 會發(fā)現(xiàn)當(dāng)鼠標(biāo)移上去的時候變成了一個類似超鏈接的格式,鼠標(biāo)單擊就能直接轉(zhuǎn)到所調(diào)用的此函數(shù)的實(shí)現(xiàn)部分。這個功能我可是用的最多了,讓我找模塊變得非常方便!Ctrl+Shift+C :在一個對象中聲明了一個方法,然后把光標(biāo)放到它的上面,按下Ctrl+Shift+C就可以為他的實(shí)現(xiàn)建立一個基本框架,如:TForm1 = class(TForm)private Private declarations public Public declarations procedure Mine;end;把光標(biāo)放到procedure Mine這行,按下 Ctrl+S

31、hift+C,下面這段代碼將自動插入到單元中: procedure TForm1.Mine;beginend;=窗體操作篇=在有多個窗體的程序中, Delphi 默認(rèn)是將它們在程序啟動時全部創(chuàng)建(只是都隱藏了, 只顯示一個主窗體) ,這樣,那些暫時不必要啟動的窗體就占用了許多內(nèi)存空間。所以我們 需要在菜單 Project|Options. 的 Forms 標(biāo)簽頁下, 將那些暫時不要啟動的窗體從 “Auto-create forms ”下轉(zhuǎn)移到“Available forms ”中。這樣,這些窗體的創(chuàng)建和釋放就需要代碼來實(shí)現(xiàn)了。A.兩種創(chuàng)建窗體方法之比較。對于這些非自動創(chuàng)建的窗體,我們必須在Sh

32、ow之前Creat(Self)或 Create(Application),將其創(chuàng)建。如 Form2.Creat(Self)和 Form2.Create(Application),可是, 它們兩個到底有什么區(qū)別呢?其實(shí)兩者區(qū)別不大, 但如果 Owner 是屬于別的窗口或控件的話,當(dāng)它的 Owner 被釋放的時候,該 Owner 所擁有 的也會被釋放。 關(guān)鍵的區(qū)別是由誰來管理該窗體的資源。用第一種方法創(chuàng)建, 該窗體的資源由編程者來負(fù)責(zé)管理;用第二種方法創(chuàng)建,該窗體的資源由 Application 來管理。E. 幾種窗體的釋放方法。既然是為了節(jié)約內(nèi)存,那么用完了的窗體就應(yīng)該“搬出”內(nèi)存。 在這里我列

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、過,內(nèi)容太多了,要用好也不容易。我在此拿 RxRichEdit 簡單地說幾點(diǎn)。?好多人都問RxLib怎么安裝,似乎的確有點(diǎn)復(fù)雜,呵呵,所以我也順便說一下:運(yùn)行 rxinst.exe 將 RxLib 先安裝到 Program FilesBorlandDelphi5 (或 6) RX 文件夾下, 然后打開 Delphi,選 FileOpen.,將 RXCTL5.DPK RXDB5.DPK RXBDE5.DPK分別打開后按 compile,繼續(xù)打開:DCLRX5.DPK DCLRXDB5.DPK和 DCLRXBD5.DPK 將這三個分別按 compile 后按 install 就可以了 :-)?Al

36、lowObjects屬性。Win98下默認(rèn)設(shè)置為 True,右鍵菜單沒有問題,但設(shè)為 False時快捷 菜單會連續(xù)出現(xiàn)兩次; Win2000下,設(shè)為True時會使右鍵菜單無法彈出,而 False時卻顯示 正常。所以,為了系統(tǒng)的兼容性,需要判斷當(dāng)前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;但我不知這個屬性為什么會有這么一個問題,還望高手指點(diǎn)。?0nURLCIick事件。RXRichEdit有自動將網(wǎng)頁地址轉(zhuǎn)為超鏈接格式,但具體的行為還是要自己寫代碼的,不然這些地址就成了個空殼了: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.為了節(jié)約內(nèi)存,優(yōu)化運(yùn)行,我們總是動態(tài)創(chuàng)建組件??僧?dāng)用完之后,如果不及時徹底的 將其從內(nèi)存中清理出去,那就有違我們的初衷了??稍趺础皻⑺馈彼鶆?chuàng)建的組件 ? 比如創(chuàng)建 了一個Edit控件,現(xiàn)在想讓它消失,但用Edit.Free后,調(diào)用Edit.Text卻仍然存在我們知道,光Free是不行的,這只是將Edit所指向的內(nèi)存空間釋放了,但是指針并沒有設(shè)定為nil ,當(dāng)調(diào)用Edit.Text時,Delphi仍然會根據(jù)Edit提供的指針訪問已經(jīng)釋放的內(nèi)存區(qū)域,所以會產(chǎn)生 Acces

39、s Violation .錯誤。所以我們需要在Free 后 Edit:=nil 或者 FreeAndNil (只在 Delphi5下有效)將指針 nil 掉,才能保證以后的正常運(yùn)行。C.將各控件的提示文本顯示于狀態(tài)行上。這個可用Application的On Hi nt事件,但由于Application 為不可件對象,因此可以采用如下方法:publicprocedure DisplayHint(Sender: TObject); / 聲明一個方法用于顯示提示文本 end;procedure TForm1.DisplayHint(Sender: TObject); / 實(shí)現(xiàn)部分beginStatu

40、sBar1.SimpleText := GetLongHint(Application.Hint);end;procedure TForm1.FormCreate(Sender: TObject);beginApplication.OnHint := DisplayHint;end;這樣顯示在狀態(tài)欄里的文本和提示框 (就是那個自動出現(xiàn)的黃色小框) 里的是一樣的。 如果 想要在狀態(tài)欄里的提示文本更加詳細(xì)怎么辦?其實(shí),只要控件的Hint 屬性這樣寫:MyHint|Its just a MyHint! ,就可以讓“ |”前的內(nèi)容顯示在提示框( Help Hint box )里,“|” 的后面的內(nèi)容顯

41、示在狀態(tài)欄里了。D. ListView使用中的一些要點(diǎn)。以下以一個兩列的ListView為例。T增加一行:with ListView1 dobeginListItem:=Items.Add;ListItem.Caption:= 第一列內(nèi)容 ;ListItem.SubItems.Add( 第二列內(nèi)容 );end;t清空 ListViewl :ListView1.Items.Clear;t得到當(dāng)前被選中行的行的行號以及刪除當(dāng)前行:For i:=0 to ListView1.Items.Count-1 DoIf ListView1.Itemsi.Selected then /i=ListView1.

42、Selected.indexbeginListView1.Items.Delete(i); / 刪除當(dāng)前選中行end;當(dāng)然, 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、 列以次類推,可以用循環(huán)讀出整列。T將焦點(diǎn)上移一行: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;就能設(shè)定焦點(diǎn)了。=其他=?為了優(yōu)化軟件, 使其精益求精, 當(dāng)用到數(shù)組時

44、經(jīng)常采用動態(tài)數(shù)組。 在聲明時, 如: A : array of string,然后在使用數(shù)組之前,SetLength(A,3)設(shè)置數(shù)組長度為 3,即A0,A1,A2,這樣就可以了。當(dāng)需要擴(kuò)大數(shù)組長度時,再一次:SecLength(A,5),那么,就增加了 A3和A4,而前面的A0,A1,A2里的值不會清空;同樣,如果SecLength(A,3)后再SecLength(A,1)的話,就只剩 A0 了,A1和A2自動被清除內(nèi)存。注意:動態(tài)數(shù)組是從“0”開始的,所以SetLength(A,1)后 High(A)=0 的! !最后當(dāng)不再用這個動態(tài)數(shù)組了,而程序還沒有要退出,那為了節(jié)省內(nèi)存用:A:=ni

45、l 來釋放掉這個數(shù)組,這下真正達(dá)到了“綠色環(huán)?!?:)?“怎么獲取當(dāng)前程序運(yùn)行的路徑”這個問題經(jīng)常能夠在論壇上看到。的確,這個函數(shù)在編程中不時的要用到的。其實(shí)有好幾個函數(shù)都能達(dá)到這個效果: t GetCurre ntDirectory() : Win API 函數(shù),具體用法如下:varMyCurrentDir:Array0.144 of Char; / 存儲當(dāng)前絕對路徑beginGetCurrentDirectory(SizeOf(MyCurrentDir),MyCurrentDir); / 取得當(dāng)前絕對路徑 ,最 后得到的格式如: C:WINDOWSSYSTEMMyCurrentDir:=M

46、yCurrentDir+MySoftName.exe;end;t GetCurrentDir() : GetCurrentDirectory 經(jīng)過 Delphi 封裝后的 一個函 數(shù), 用 法簡單 : MyCurrentDir:=GetCurrentDir 。最后得到的格式如: C:WINDOWSSYSTEM還有就是可以直接得到路徑的函數(shù): ExtractFilePath(ParamStr(0) 、ExtractFilePath(Application.exename) 等。?系統(tǒng)的關(guān)機(jī)、重新啟動等操作的消息。這也是一個常有人問的問題,在此我也順便在提一下:關(guān)機(jī): ExitWindowsEx(

47、EWX_SHUTDOWN,32); 重新啟動: ExitWindowsEx(EWX_REBOOT,32);注銷: ExitWindowsEx(EWX_LOGOFF,32);關(guān)閉電源: ExitWindowsEx(EWX_POWEROFF,32);?在 Delphi 中,除了使用 #39 外,要在程序中(如 ShowMessage 中)顯示“單個單引號” 要如何處理? 和 都會出現(xiàn)編譯錯誤。 其實(shí),是四個單引號表示一個單引號, 也就是是 , 第二個和第三表明這是一個 “ ”,第一個和第四個是表明這是一個字符型。呵呵,很有趣哦: )?ShowMessage 中的漢化問題。 ShowMessage

48、中的按鈕都是 E 文的,讓人很不舒服。其實(shí) 經(jīng)過我們的一番 DIY,也能把它們都弄成中文的。首先要保存當(dāng)前的工程,然后選Project|Languages|Add. ,出現(xiàn) Add Language 對話框,選擇你要漢化的工程(也可以自定義文件夾),Next;選最后一項“中文(中國)”,Next ;Next ; Next ; Fi nish; OK;然后就出現(xiàn)了 Tran slation Ma nager對話框,在左邊選“中文(中 國) |Resource Scripts|Projet1_DRC (這個具體要看你的工程文件名) ”,然后右邊的列表里找 到“Const_SMsgDlgOK項,將其

49、的“中文(中國)(translated) ”格改為“確定”(原為OK), 保存后退出。這下,再運(yùn)行一下程序,哈哈,是不是就是中文按鈕啦!不過,ShowMessage這種類型的信息對話框非常簡單了,可以在系統(tǒng)調(diào)試期間顯示給開發(fā)人員一些過程信息。 但由于過于簡單, 所以我建議在軟件的正式版中不要使用這樣的對話 框。而且,最好用 MessageBox代替ShowMessage以減小軟件的體積,例如,同樣一個DLL文件,采用 MessageBox編譯后的 DLL文件大小為 58K,而ShowMessage后就變成了 301K! !語言: Delphi方法一:api 函數(shù): shfileoperatio

50、n 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(fromdir,Pchar

51、(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)0thenraiselastwin32error;en

52、d;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/ 先保存當(dāng)前目錄sCurDir:=GetCurrentDir;ChDir(sDirName);hFindFile

53、:=FindFirstFile(*.*,FindFileData);ifhFindFileINVALID_HANDLE_VALUEthen begin ifnotDirectoryExists(sToDirName)then ForceDirectories(sToDirName);repeattfile:=FindFileData.cFileName;if(tfile=.)or(tfile=.)thenContinue;ifFindFileData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORYthenbegint:=sToDirName+tfile;if

54、 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,*.*);hFind=FindFirstFile

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論