⑴ 學習DElphi的技巧
通過書籍對Delphi語法熟練運用。
然後將書里自帶的實例都重新抄寫一遍,達到書里所達到的效果。
然後多思考,一個程序的流程是什麼,試著自己寫一些簡單的小程序。
慢慢了解更多的Delphi函數,API函數,和對Delphi編譯環境下的控制項有深入的認識
⑵ delphi編程技巧誰你呢個給我詳細談下
Delphi,是Windows平台下著名的快速應用程序開發工具(Rapid Application Development,簡稱RAD)。
要實現類似QQ的程序當然是可以的,但我感覺這並不是首選,關於它的變成技巧,你可以自己到扁豆波波去看一下,
不過所謂的技巧也並不是什麼訣竅,需要自己慢慢琢磨,慢慢積累的。
⑶ 關於DELPHI動態資料庫
在Delphi中動態建立資料庫結構
--------------------------------------------------------------------------------
一、問題的提出
在程序運行過程中動態建立資料庫結構是我們編寫功能通用的資料庫管理系統常見
的問題。通用資料庫管理系統開發的基本思路是:系統允許用戶自行設定管理對象的數據
庫結構,然後通過演算法和編程技巧,在用戶設定完成後動態創建管理對象的資料庫結構和
完成系統功能的一些其它數據,這樣可以滿足不同用戶對管理系統管理項目的不同要求,
進而達到通用的目的。因此,通用資料庫管理系統開發的關鍵是系統能否動態地創建數據
庫結構。我們熟悉的Foxbase+、Foxpro等語言,均提供了動態創建資料庫結構的命令或過
程。
但是,在許多資料和書籍中,沒有介紹用Delphi如何動態建立資料庫結構,給我們開發
一些功能通用的資料庫管理系統帶來了不便。那麼如何在Delphi中動態建立資料庫結構
呢?本文是作者在查閱大量資料,經過反復實踐的基礎上得出的在Delphi中動態創建數據
庫結構的方法。
二、設置Delphi資料庫配置程序
在Delphi中要進行資料庫管理必須先設置好資料庫配置程序BDE,所有對資料庫的操
作,最後都要通過BDE去完成。下面以最常見的Dbase資料庫為例來配置Delphi的資料庫引
擎BDE。
1. 進入Delphi的集成開發環境IDE(Integrated Development Environment),在Dat
abase菜單下選擇Explore,出現SQL Explorer窗體,在Object菜單下選擇BDE Administra
tor。
2. 出現BDE Administrator窗體後在Database頁上選擇Dbase,在Definition頁中將
Type項設為Standard;將Default Driver項設為Dbase;將Path項設為一工作目錄名(如:D
:\MYNAME)。以上過程即為資料庫的別名(Aliases)設置,這在以後Delphi的程序開發過程
中要經常用到。
3. 選擇Configration頁,在Drivers的Native項中選擇Dbase,在Definition頁中將T
ype項設為File;將Langdriver項設為DBASE CHS CP936;將Level項設為5。
4. 完成上述工作後,在Object菜單中選擇Save as Configration,按出現的對話框要
求將以上的設置保存好。至此,資料庫的基本配置工作就完成了,我們就可以進行下面的
工作了。
三、動態創建資料庫結構方法
在Delphi中動態創建資料庫結構有兩種方法。
方法一:使用Table組件的CreateTable方法。步驟如下:
1. 進入Delphi的IDE建立一個新項目文件和新窗體(Form1)單元文件(unit1.pas)。
2. 在Form1上加入Table1、Edit1、Edit2、Button1組件。將Button1組件的Captio
屬性設為『創建』。
3. 用滑鼠雙擊Button1進入Unit1.pas單元文件,在游標處加入下列代碼。
with table1 do
egi
active:=false
databasename:=『dbase'
tablename:=『my.dbf'
tabletype:=ttdbase
fielddefs.clear
fielddefs.add(edit1.text,ftstring,10,false)
fielddefs.add(edit2.text,ftinteger,0,false)
createtable
end
4. 按F9鍵編譯運行,在Edit1處輸入一欄位名稱:ZD1,在Edit2處輸入一欄位名稱:ZD
2,然後點擊"創建"按鈕,程序將在D:\MYNAME目錄中產生一個名為MY.DBF的資料庫文件,用
Database Desktop查看文件結構如下:
FieldName
Type
Size
Dec
ZD1 C 10
ZD2 N 11
方法二:使用Query組件,用結構化查詢語言SQL(Structured Query Language)語句創
建,步驟如下:
1. 同方法一之步驟1。
2. 在Form1窗體中加入Query1、Button1組件,將Query1的Database Name屬性設為『
Dbase』;將Button1組件的Caption屬性設為『創建』。
3. 在Query1的SQL屬性單擊,出現Sting List Editor窗口,在該窗體中輸入以下SQL
語句:
Create Table My(
ZD1 Char(10),
ZD2 Numeric(10,2))
4. 雙擊Button1進入Unit1.pas單元,在游標處加入下列代碼:
Query1.ExecSQL
5. 按F9鍵 編譯運行,在"創建"按鈕處單擊即可產生一個名為MY.DBF的資料庫文件,
存放在D:\MYNAME目錄中,用Database Desktop查看其結構如下:
FieldName Type Size Dec
ZD1 C 10
ZD2 N 10 2
以上所介紹的操作和程序均在Windows98操作系統下,Delphi 3.0 C/S版上調試運行
通過。
⑷ delphi TStringList 和 String 這兩個類型有什麼區別
TStringList 是一個字元串列表類型,是PASCAL系統管理的,數組一樣使用,但是大小是動態的,就是本質上是鏈表實現的,基於鏈表數據結構來的。這個東西是常用玩意,經常用來組織一堆字元串,就是String類型的數據。網上關於TStrigList的用法講了很多,可自行網路。
String就是一種數據類型,存儲字元串的。
Delphi中String類型原理介紹
Delphi中字元串的操作很簡單,但幕後情況卻相當復雜。Pascal傳統的字元串操作方法與Windows不同,Windows吸取了C語言的字元串操作方法。32位Delphi中增加了長字元串類型,該類型功能強大,是Delphi預設的字元串類型。
字元串類型在Borland公司的TurboPascal和16位Delphi中,傳統的字元串類型是一個字元序列,序列的頭部是一個長度位元組,指示當前字元串的長度。由於只用一個位元組來表示字元串的長度,所以字元串不能超過255個字元。這一長度限制為字元串操作帶來不便,因為每個字元串必須定長(確省最大值為255),當然你也可以聲明更短的字元串以節約存儲空間。
字元串類型與數組類型相似。實際上一個字元串差不多就是一個字元類型的數組,因此用[]符號,你就能訪問字元串中的字元,這一事實充分說明了上述觀點。
為克服傳統Pascal字元串的局限性,32位Delphi增加了對長字元串的支持。這樣共有三種字元串類型:
ShortString 短字元串類型也就是前面所述的傳統Pascal字元串類型。這類字元串最多隻能有255個字元,與16位Delphi中的字元串相同。短字元串中的每個字元都屬於
ANSIChar類型(標准字元類型)。
ANSIString 長字元串類型就是新增的可變長字元串類型。這類字元串由內存動態分配,引用計數,並使用了更新前拷貝(--on-write)技術。這類字元串長度沒有限制(可 以存儲多達20億個字元!),其字元類型也是ANSIChar類型。
WideString 長字元串類型與ANSIString 類型相似,只是它基於WideChar字元類型,WideChar字元為雙位元組Unicode字元。
使用長字元串
如果只簡單地用String定義字元串,那麼該字元串可能是短字元串也可能是ANSI長字元串,這取決於$H編譯指令的值,$H+(確省)代表長字元串(ANSIString類型)。長字元串是Delphi庫中控制項使用的字元串。
Delphi長字元串基於引用計數機制,通過引用計數追蹤內存中引用同一字元串的字元串變數,當字元串不再使用時,也就是說引用計數為零時,釋放內存。
如果你要增加字元串的長度,而該字元串鄰近又沒有空閑的內存,即在同一存儲單元字元串已沒有擴展的餘地,這時字元串必須被完整地拷貝到另一個存儲單元。當這種情況發生時,Delphi運行時間支持程序會以完全透明的方式為字元串重新分配內存。為了有效地分配所需的存儲空間,你可以用SetLength過程設定字元串的最大長度值,如:
SetLength (String1, 200);
SetLength過程只是完成一個內存請求,並沒有實際分配內存。它只是把將來所需的內存預留出來,實際上並沒有使用這段內存。這一技術源於Windows操作系統,現被
Delphi用來動態分配內存。例如,當你請求一個很大的數組時,系統會將數組內存預留出來,但並沒有把內存分配給數組。
一般不需要設置字元串的長度,不過當需要把長字元串作為參數傳遞給API函數時(經過類型轉換後),你必須用SetLength為該字元串預留內存空間,這一點我會在後面進行說明。
看一看內存中的字元串
為了幫你更好地理解字元串的內存管理細節,我寫了一個簡例StrRef。在程序中我聲明了兩個全程字元串:Str1和Str2,當按下第一個按鈕時,程序把一個字元串常量賦給第一個變數,然後把第一個變數賦給第二個:
Str1 := 'Hello';
Str2 := Str1;
除了字元串操作外,程序還用下面的StringStatus函數在一個列表框中顯示字元串的內部狀態:
function StringStatus (const Str: string): string;
begin
Result := 'Address: ' + IntToStr (Integer (Str)) +
', Length: ' + IntToStr (Length (Str)) +
', References: ' + IntToStr (PInteger (Integer (Str) - 8)^) +
', Value: ' + Str;
end;
在StringStatus函數中,用常量參數傳遞字元串至關重要。用拷貝方式(值參)傳遞會引起副作用,因為函數執行過程中會產生一個對字元串的額外引用;與此相反,通過引用(var)或常量(const)參數傳遞不會產生這種情況。由於本例不希望字元串被修改,因此選用常量參數。 為獲取字元串內存地址(有利於識別串的實際內容也有助於觀察兩個不同的串變數是否引用了同一內存區),我通過類型映射把字元串類型強行轉換為整型。字元串實際上是引用,也就是指針:字元串變數保存的是字元串的實際內存地址。
為了提取引用計數信息,我利用了一個鮮為人知的事實:即字元串長度和引用計數信息實際上保存在字元串中,位於實際內容和字元串變數所指的內存位置之前,其負偏移量對字元串長度來說是-4(用Length函數很容易得到這個值),對引用記數來說是-8。
不過必須記住,以上關於偏移量的內部信息在未來的Delphi版本中可能會變,沒有寫入正式Delphi文檔的特性很難保證將來不變。
通過運行這個例子,你會看到兩個串內容相同、內存位置相同、引用記數為2,如圖7.1中列表框上部所示。現在,如果你改變其中一個字元串的值,那麼更新後字元串的內存地址將會改變。這是-on-write技術的結果。
第二個按鈕(Change)的OnClick事件代碼如下,結果如圖7.1列表框第二部分所示:
procere TFormStrRef.BtnChangeClick(Sender: TObject);
begin
Str1 [2] := 'a';
ListBox1.Items.Add ('Str1 [2] := ''a''');
ListBox1.Items.Add ('Str1 - ' + StringStatus (Str1));
ListBox1.Items.Add ('Str2 - ' + StringStatus (Str2));
end;
注意,BtnChangeClick只能在執行完BtnAssignClick後才能執行。為此,程序啟動後第二個按鈕不能用(按鈕的Enabled屬性設成False);第一個方法結束後激活第二個按鈕。你可以自由地擴展這個例子,用StringStatus函數探究其它情況下長字元串的特性。
動態分配可以用任意一個分配內存的函數, 其實系統最終調用的都是GetMem, 其它的New、AllocMem、SetLength等等只不過除了調用GetMem外還做了一些初始化處理比如把內存清零。釋放可以用Dispose或者FreeMem, 系統最終都是調用FreeMem的, Dispose相當於Finalize(p); FreeMem(p);
Finalize的作用簡單說就是自動釋放結構或者數組中的string和動態數組, FreeMem則是直接釋放指針所指向的內存,例如:
type
TMyRec = record
Name: string;
X, Y: Integer;
end;
PMyRec = ^TMyRec;
var
MyRec : PMyRec;
begin
New(MyRec); // 編譯器會根據MyRec的大小自動計算需要分配的內存數量然後生成代碼調用GetMem並將其中的Name欄位清零
MyRec.Name := str1 + str2;
Dispose(MyRec); // 除了調用FreeMem釋放MyRec這個結構的內存外還會自動清除其中的Name所用到的內存(如果Name指向的string引用計數=1時);
// FreeMem(MyRec); <-- 如果直接調用FreeMem釋放MyRec, 則會造成內存泄露, 因為MyRec.Name指向的字元串沒有釋放(引用計數-1)
end;
由於delphi關於string的內存管理的特殊性, 可以有很多技巧充分利用其優點生成非常高效的代碼, 比如要用TList來保存string(不是TStringList), 一般的做法是TList.Items[i]中保存一個PString指針, 這樣就需要重新分配一塊內存並復制原串, 大數據量的情況下效率很低, 但是如果充分利用string的引用計數和強制類型轉換技巧, 可以直接將string作為指針保存在TList.Items[i]中: 比如:
var
List: TList;
GlobalString1, GlobalString2: string;
...
procere Test;
var
tmp: string;
begin
tmp := GlobalString1+GlobalString2;
List.Add(Pointer(tmp)); // 將tmp作為指針保存進List
{ 由於Test過程結束時會自動釋放掉tmp, 如果直接退出的話List中就保存了一個無效的指針了, 所以這里要欺騙編譯器, 讓它認為tmp已經被釋放掉了, 等於在不改動tmp引用計數(當前是1)的情況下執行相當於tmp := ''的語句, 由於直接tmp := ''會修改引用計數並可能釋放掉內存, 所以用強制類型轉換將tmp轉成一個Integer並將這個Integer設置成0(也就是nil), 此語句完全等價於pointer(tmp) := nil; 只是個人喜好我喜歡用Integer(tmp) := 0而已.
}
Integer(tmp) := 0;
end;
1. string是Delphi編譯器內在支持的(predefined or built-in),是Delphi的一個基本數據類型,而PChar只是一個指向零終止字元串的指針;
2. String 所存字元串是在堆分配內存的,String變數實際上是指向零終止字元串的指針,與此同時它還具有引用計數(reference count)功能,並且自身保存字元串長度,當引用計數為零時,自動釋放所佔用的空間。
3.將string賦值給另一個string,只是一個簡單的指針賦值,不產生動作,只是增加string的引用計數;
4.將一個PChar變數類型賦值給一個string 變數類型會產生真正的Copy動作,即將PChar所指向的字元串整個到為string分配的內存中;
5.將string賦值給一個PChar變數類型,只是簡單地將string的指針值賦值給PChar變數類型,而string的引用計數並不因此操作而發生變化,因為這種情況PChar會對string產生依賴,當string的引用計數為零自動釋放內存空間後,PChar很可能指向一個無效的內存地址,在你的程序你必須小心對付這種情況。
6.對PChar的操作速度要遠遠高於對string操作的速度,但PChar是一種落後的管理字元串的方式,而string則以高效的管理而勝出,PChar它的存在只是為了兼容早期的類型和操作系統(調用Windows API時會經常用到),建議平常使用string。
⑸ delphi那麼多類怎麼記憶啊
其實不用去背,它們是有規率的,剛開始了解就行了。以後用多了就自然記得了。比如:
TObject是所有類的祖先;
接下來是TPersistent,TPersistent的子類都有持久化的能力(流化);
接下來是TComponent,所有控制項都是TComponent的子類,但是直接從TComponent寫控制項,控制項是沒有可視界面的;
接下來是TControl,從這開始控制項有可視化的界面;
接下來是TWinControl,TWinControl是包裝Windows可視化類的,其實窗體,輸入框等都是WIndows已經提供了,Delphi把它重新包裝了;
等等,再往下還有各種分枝,但那都是具體細化的,總之你了解VCL的結構,如果要你寫個控制項知道怎麼選擇祖先類,那就夠了。除此之外,還要了解一下一些常用的類,比如最經常用的列表,TList,TStrings及它的後代,如TStringList,TObjectList等等,那就可以了
⑹ Delphi IDE 技巧
安裝個CnPack向導,它會自動畫線將配對的begin與end連起來。
你可以到它的官方網站下載,免費的
http://www.cnpack.org/index.php?lang=zh-cn
⑺ 初學delphi,應該掌握哪些東西
初學沒什麼擔心的!
一、看書最重要。
書基本的概念性的東西一定要記住了,這很重要。
二、多做實例。
書的的例子固然在高手看來是垃圾,但對於初學者來說,很重要。
三、想像能力。
沒有想像能力,做一萬個實例也不會有自己的創意。多想想,這些東西放一塊會發生什麼事情,不要怕錯誤。
四、多問。
不懂就問,把自己當菜鳥。不懂的問題多在各個有關論壇問問高手們該怎麼解決。
五、毅力。
這個就不要說了吧,你有我有他也有,關鍵看是不是懶的用。
書嘛,把我壓箱底的東東給你吧:
<<Delphi5開發者指南>>機械工業出版社
<<Delphi6.0從入門到精通>>電子工業出版社
《深入DELPHI6網路編程》
《delphi4從入門到精通》
《delphi com 深入編程》
《windows 高級開發指南》
《windows 程序設計》
《windows 圖形編程》
《windows 核心編程》
Delphi Win32核心API參考
<Delphi Win32核心API參考>!!!
Delphi深度歷險
:《Windows程序設計》
《DELPHI5開發人員指南》 美 業界標准手冊
《delphi5從入門到精通》美 delphi精英獎得主寫的!
《輕松掌握delphi4》美Tuobo power的工程師寫的,不同於一般的入門書,值得一看!
《delphi高級開發人員指南》美 delphi精英獎得主寫的!頂級高手必讀!
《delphi2程序設計大全》!!!美 delphi 技術支持部門主管寫的,我一直在看!不要被書
名所迷惑,如果要徹底精通delphi必讀該書!
《delphi4編程技術內幕》美 同上!對資料庫,網路計算偏重一些,也有關於游戲開發
的內容!
《精通delphi》中 國防科技大學的中國人寫的,該書再版多次,還記得著名的《Turbo
puscal大全》嗎?同一群作者!
<奇思異想編程序——Delphi篇>
<Delphi 5 API 函數開發實例>
<Delphi Win32核心API參考>
《delphi2程序設計大全》http://www.zhongguosou.com/ebook/ebook_13_windows.html
<Delphi5.0程序設計-基礎教學篇>
<PASCAL語言程序設計>
<Delphi編程技巧280例>
<Delphi 6開發人員指南>
<Delphi 5開發人員指南>
<計算機技術譯林精選系列 DELPHI 4 開發大全(上、下)>
<DELPHI 實用技術精粹>
<DELPHI 3 自學通>
delphi高級程序設計指南
Delphi 4開發大全
delphi4.0 從入門到精通
Delphi 2.0高級程序設計
《Windows程序設計》
《Delphi5開發大全》發消息
Delphi6徹底研究
Delphi的經典書籍:
1、《Delphi 技術手冊》 Ray Liscbner著 632頁 65元 中國電力出版社
2、《Delphi 5 開發人員指南》 Steve Teixeira & Xavier Pacheco著 1263頁 138元 機械工業出版社
3、《Delphi COM 深入編程》 Eric Harmon著 473頁 48元 機械工業出版社
4、《Delphi DirectX圖形與游戲程序設計》 John Ayres著 445頁 45元 電子科技大學出版社
5、《Delphi 4 編程技術內幕》 Charlie Calvert著 985頁 110元 機械工業出版社
6、《Delphi/Klyix 資料庫開發》 Eric Harmon著 277頁 29元 機械工業出版社
7、《Delphi 5.x 分布式多層應用》(三個系列) 李維著 機械工業出版社 (三本全買的話至少要260元)
8、《Delphi 6/Klyix 2 Soap/Web Service 程序設計篇》 李維著 404頁 65元 機械工業出版社
9、《Delphi 深度探索》 陳省著 481頁 49.8元 華中科技大學出版社
10、《Delphi 深度歷險》 陳寬達著 422頁 47元 科學出版社
11、《Delphi 5.X ADO/MTS/COM+高級程序設計篇》 李維著 600頁 機械工業出版社(90RMB)
12、《DELPHI 5 企業級解決方案及應用剖析》
13、《Advanced Delphi Developer』s Guide to ADO》 Federov, Alex, Natalia Elmanova
《Delphi5從入門到精通》,Marco Cantu著,電子工業出版社。在Delphi世界中,Marco Cantu 作為書
籍作者可說是人人皆知,Delphi從入門到精通系列更是絕對的經典。這本書雖然並不面向高端用戶,但它全
面地論述了Delphi編程中的各個方面,象組件開發、多線程、圖象處理、報表列印、I/O、資料庫、Inter-
net應用等等,是亟待提高的初學者的不二之選。
《Delphi4編程技術內幕》,Charlie Calvert著,機械工業出版社。作者是一位經驗極其豐富的高級程
序員,用深入淺出的語言,將Delphi中的許多復雜問題一一道來,令人豁然開朗。豐富的內容和獨特的風格
讓這本書的讀者不但有技術上的收獲,而且有閱讀上的快樂。很多人吐血推薦的東東,高手案頭必備之物。
《Delphi3開發使用手冊》,機械工業出版社。由Delphi的內部開發人員所著,權威性可見一斑。 雖然
它的可讀性並不是很好,但其全面、深入、權威的介紹,使得本書可以當作Delphi的使用手冊來讀。哪怕在
Delphi5已經發布的今天,這本書仍然有其不可替代的位置。
⑻ Delphi使用過程中的幾個技巧
1、設置控制項堆疊顯示的層次。
右鍵send to back,右鍵bring to front。
2、窗體關閉時釋放內存對象。
對於動態生成的窗體,一旦不再使用,一定要手動釋放資源,不然你會看到程序佔有內存瘋狂上漲,然後就被任務管理器幹掉了~手動釋放主要有兩種方式,第一種是顯示調用Form.Free這個方法。
3、delphi編譯提示 circular unit reference
解決方法: 在implementation後面uses ,不要在interface 後面 uses !
⑼ delphi 經驗之談,幫助新學者快速掌握Delphi的技巧活難點在哪裡
1.對比你的C,JAVA開發經驗,學習pascal語法;
2.熟悉基本控制項及Delphi的事件驅動的思想;
3.熟悉資料庫,網路等;
4.找相關的Demo,試著改一些東西