亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi入門點點滴滴

2019-11-18 18:05:45
字體:
來源:轉載
供稿:網友
“聰明的程序員用Delphi!”現在,真是有越來越多的人開始用Delphi了。不過,高手畢竟是少數,像我這樣的菜鳥可謂遍地都是,哈哈。既然是菜鳥自然就有一大堆很菜的問題,什么這個怎么設置、那個怎么寫的……所以,以下我就以我所積累的那一點點經驗和論壇上常見的小問題作一個總結性發言(全場熱烈鼓掌!哎,這鮮花我就收下了,那個什么爛番茄就不要扔上來了嘛)


==系統應用篇==

A.Delphi自代了大量的常用控件,如Delphi5就有一百多了,而今年出的Delphi6更是Delphi5的1.5倍。這么多控件,就是在1024*768的分辨率下也無法全部顯示他們的組件面板,而每次要按那兩顆小按鈕來顯示更多的面板,真是非常不方便!但通過添加下面那一個注冊表鍵值就能實現組件面板自動展開:
[HKEY_CURRENT_USER/Software/Borland/Delphi/X.0/Extras]
"AutoPaletteSelect"="1"
(注:X.0表示你的Delphi的版本號;如果沒有Extras主鍵則新建即可,下同)

B.每次新建窗體,然后設置其(注:_表示空格,也可以用Bold(粗體)等代替)

C.自定義工作環境,讓它更加適合自己。
  •設置工具欄。在Delphi的工具欄右鍵單擊,選Customize,然后挑選需要的按鈕拖到工具上,把不要的拖出來。我常用的是:Standard工具欄下的Open、Open
PRoject、Save、Save All、Undo、Redo;Debug工具欄下的Pause、Add Watch、Program Reset、Run;Desktop工具欄下的Save Current Desktop、Set Debug Desktop;Component Palette工具欄。
  •設置窗口布局。為了能跟高效的編寫程序,合理的布置各個窗口是很重要的。我常用的窗口有:Object Inspector、Project Manager(View|Project Manager)、Watch List(Run|Add Watch...) ,具體的停放位置如圖1。

設置好各個窗體后按Desktop工具欄上的Save Current Desktop按鈕保存。
  •設置顯示顏色。讓代碼的顏色更符合自己的習慣,有利于編寫時思維的清晰。Tools|Editor Options打開Editor Properties,選Color標簽頁,設置代碼顏色。以下僅解釋一下幾個常用的:
  Whitespace:空白處,即背景;
  Comment:注釋;
  Reserved Word:保留字;
  String:字符串;
  Number:數字;
  Execution Point:正在執行的當前行(即F7步入時所到達的那一行);
  Enabled break:斷點;
  Error line:錯誤發生行;

D.掌握一些Delphi編程中的快捷鍵,能夠極大程度的提高效率,還不會讓你因為過多無聊的設置等而感到厭煩,現在如果不用這些快捷鍵,我會很不適應這樣的編程的!以下我就介紹一下我常用的幾個快捷鍵:
Esc : 選擇當前選中組件的容器(通常是Panel,GroupBox或Form等);
Ctrl+方向鍵 :將所選組件移動一個像素;
Ctrl+Shift+方向鍵 :將所選組件移動一大格(類似fireworks中按住Shift再用方向鍵移動時的效果);
Shift+方向鍵 :調整選中組件的大小,每次一像素;
Shift+選中組件 :按住Shift鍵再用鼠標點擊組件,可以同時選擇多個組件;
Ctrl+鼠標左鍵 :在procedure中掉用其他的函數(如一個自定義的過程),在這個調用處按住Ctrl會發現當鼠標移上去的時候變成了一個類似超鏈接的格式,鼠標單擊就能直接轉到所調用的此函數的實現部分。這個功能我可是用的最多了,讓我找模塊變得非常方便!
Ctrl+Shift+C :在一個對象中聲明了一個方法,然后把光標放到它的上面,按下Ctrl+Shift+C就可以為他的實現建立一個基本框架,如:
TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Mine;
  end;
把光標放到procedure Mine這行,按下Ctrl+Shift+C,下面這段代碼將自動插入到單元中:
procedure TForm1.Mine;
begin

end;


==窗體操作篇==

    在有多個窗體的程序中,Delphi默認是將它們在程序啟動時全部創建(只是都隱藏了,只顯示一個主窗體),這樣,那些暫時不必要啟動的窗體就占用了許多內存空間。所以我們需要在菜單Project|Options...的Forms標簽頁下,將那些暫時不要啟動的窗體從“Auto-create forms”下轉移到“Available forms”中。這樣,這些窗體的創建和釋放就需要代碼來實現了。
A.兩種創建窗體方法之比較。對于這些非自動創建的窗體,我們必須在Show之前Creat(Self)或Create(application),將其創建。如Form2.Creat(Self)和Form2.Create(Application),可是,它們兩個到底有什么區別呢?其實兩者區別不大,
但如果Owner是屬于別的窗口或控件的話,當它的Owner被釋放的時候,該Owner所擁有的也會被釋放。關鍵的區別是由誰來管理該窗體的資源。用第一種方法創建,該窗體的資源由編程者來負責管理;用第二種方法創建,該窗體的資源由Application來管理。

B.幾種窗體的釋放方法。既然是為了節約內存,那么用完了的窗體就應該“搬出”內存。在這里我列舉幾個大同小異的方法:
(1)
procedure TForm1.Button1Click(Sender :TObject);
begin
......
if Form2 = nil then
  Form2:=TForm2.Create(Application);
Form2.ShowModal;
......
end;

procedure TForm2.close(Sender: TObject; var Action: TCloseAction);
begin
  ModalResult := mrNone;
  Action := caFree;
  Form2 := nil;
end;
(2)
procedure TForm1.Button1Click(Sender :TObject);
begin
  if not Assigned(Form2) then
  begin
    Application.CreateForm(TForm2,Form2);
    try
      Form2.ShowModal;
    finally
      Form2.Free;
      Form2 := nil;
    end;
  end
  else
    Form2.ShowModal;
end;
(3)
procedure TForm2.Button1Click(Sender :TObject);
begin
  Form2.Close;
  Form2.Release;
end;


==控件使用篇==

A.大名鼎鼎的RXLib控件包是由三位俄羅斯高手編寫的,非常的出色!不過,內容太多了,要用好也不容易。我在此拿RxRichEdit簡單地說幾點。
  •好多人都問RxLib怎么安裝,似乎的確有點復雜,呵呵,所以我也順便說一下:
    運行rxinst.exe將RxLib先安裝到/Program Files/Borland/Delphi5(或6)/RX文件夾下,然后打開Delphi,選File/Open...,將RXCTL5.DPK、RXDB5.DPK、RXBDE5.DPK分別打開后按compile,繼續打開:DCLRX5.DPK、DCLRXDB5.DPK和DCLRXBD5.DPK,將這三個分別按compile后按install就可以了:-)
  •AllowObjects屬性。Win98下默認設置為True,右鍵菜單沒有問題,但設為False時快捷菜單會連續出現兩次;Win2000下,設為True時會使右鍵菜單無法彈出,而False時卻顯示正常。所以,為了系統的兼容性,需要判斷當前OS版本:
procedure TFormMain.FormCreate(Sender: TObject);
var
  OSVI:OSVERSIONINFO;
......
begin
  OSVI.dwOSVersionInfoSize:=sizeof(OSVERSIONINFO);
  GetVersionEx(OSVI);
  case OSVI.dwPlatformId of
    1:RxRichEdit1.AllowObjects:=true;
    2:RxRichEdit1.AllowObjects:=false;
  end;
.......
end;
但我不知這個屬性為什么會有這么一個問題,還望高手指點。
  •OnURLClick事件。RXRichEdit有自動將網頁地址轉為超鏈接格式,但具體的行為還是要自己寫代碼的,不然這些地址就成了個空殼了:
procedure TFormMain.RXRichEdit1URLClick(Sender: TObject; const URLText: String; Button: TMouseButton);
begin
  if Button = mbLeft then
    ShellExecute(Handle, nil, PChar(URLText), nil, nil, SW_SHOW);
end;

B.為了節約內存,優化運行,我們總是動態創建組件??僧斢猛曛?,如果不及時徹底的將其從內存中清理出去,那就有違我們的初衷了??稍趺础皻⑺馈彼鶆摻ǖ慕M件? 比如創建了一個Edit控件,現在想讓它消失,但用Edit.Free后,調用Edit.Text卻仍然存在……我們知道,光Free是不行的,這只是將Edit所指向的內存空間釋放了,但是指針并沒有設定為nil,當調用Edit.Text時,Delphi仍然會根據Edit提供的指針訪問已經釋放的內存區域,所以會產生access Violation ....錯誤。所以我們需要在Free后Edit:=nil或者FreeAndNil(只在Delphi5下有效)將指針nil掉,才能保證以后的正常運行。

C.將各控件的提示文本顯示于狀態行上。這個可用Application的OnHint事件,但由于Application為不可件對象,因此可以采用如下方法:
......
  public
    procedure DisplayHint(Sender: TObject); //聲明一個方法用于顯示提示文本
  end;
......
procedure TForm1.DisplayHint(Sender: TObject); //實現部分
begin
  StatusBar1.SimpleText := GetLongHint(Application.Hint);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnHint := DisplayHint;
end;
這樣顯示在狀態欄里的文本和提示框(就是那個自動出現的黃色小框)里的是一樣的。如果想要在狀態欄里的提示文本更加詳細怎么辦?其實,只要控件的Hint屬性這樣寫:MyHint|It's just a MyHint!,就可以讓“|”前的內容顯示在提示框(Help Hint box)里,“|”的后面的內容顯示在狀態欄里了。

D.ListView使用中的一些要點。以下以一個兩列的ListView為例。
  →增加一行:
with ListView1 do
  begin
    ListItem:=Items.Add;
    ListItem.Caption:='第一列內容';
    ListItem.SubItems.Add('第二列內容');
  end;
  →清空ListView1:
ListView1.Items.Clear;
  →得到當前被選中行的行的行號以及刪除當前行:
For i:=0 to ListView1.Items.Count-1 Do
  If ListView1.Items[i].Selected then  //i=ListView1.Selected.index
    begin
      ListView1.Items.Delete(i);  //刪除當前選中行
    end;
當然,ListView有OnSelectItem事件,可以判斷選擇了哪行,用個全局變量把它賦值出來。
  →讀某行某列的操作:
Edit1.Text := listview1.Items[i].Caption;  //讀第i行第1列
Edit2.Text := listview1.Items[i].SubItems.strings[0];  //讀第i行第2列
Edit3.Text := listview1.Items[i].SubItems.strings[1];  //讀第i行第3列
以次類推,可以用循環讀出整列。
  →將焦點上移一行:
For i:=0 to ListView1.Items.Count-1 Do
  If (ListView1.Items[i].Selected) and (i>0) then
    begin
      ListView1.SetFocus;
      ListView1.Items.Item[i-1].Selected := True;
    end;
不過在Delphi6中,ListView多了一個ItemIndex屬性,所以只要
ListView1.SetFocus;
ListView1.ItemIndex:=3;
就能設定焦點了。


==其他==

  •為了優化軟件,使其精益求精,當用到數組時經常采用動態數組。在聲明時,如:A : array of string,然后在使用數組之前,SetLength(A,3)設置數組長度為3,即A[0],A[1],A[2],這樣就可以了。當需要擴大數組長度時,再一次:SecLength(A,5),那么,就增加了A[3]和A[4],而前面的A[0],A[1],A[2]里的值不會清空;同樣,如果SecLength(A,3)后再SecLength(A,1)的話,就只剩A[0]了,A[1]和A[2]自動被清除內存。注意:動態數組是從“0”開始的,所以SetLength(A,1)后High(A)=0的??!
    最后當不再用這個動態數組了,而程序還沒有要退出,那為了節省內存用:A:=nil來釋放掉這個數組,這下真正達到了“綠色環?!保海?/P>

  •“怎么獲取當前程序運行的路徑”這個問題經常能夠在論壇上看到。的確,這個函數在編程中不時的要用到的。其實有好幾個函數都能達到這個效果:
→GetCurrentDirectory():WinAPI函數,具體用法如下:
        var
          MyCurrentDir:Array[0..144] of Char; //存儲當前絕對路徑
        begin
          GetCurrentDirectory(SizeOf(MyCurrentDir),MyCurrentDir); //取得當前絕對路徑,最后得到的格式如:C:/WINDOWS/SYSTEM
          MyCurrentDir:=MyCurrentDir+'/MySoftName.exe';
        end;
→GetCurrentDir():GetCurrentDirectory經過Delphi封裝后的一個函數,用法簡單:MyCurrentDir:=GetCurrentDir。最后得到的格式如:C:/WINDOWS/SYSTEM
    還有就是可以直接得到路徑的函數:ExtractFilePath(ParamStr(0))、ExtractFilePath(Application.exename)等。

  •系統的關機、重新啟動等操作的消息。這也是一個常有人問的問題,在此我也順便在提一下:
關機:ExitWindowsEx(EWX_SHUTDOWN,32);
重新啟動:ExitWindowsEx(EWX_REBOOT,32);
注銷:ExitWindowsEx(EWX_LOGOFF,32);
關閉電源:ExitWindowsEx(EWX_POWEROFF,32);

  •在Delphi中,除了使用#39外,要在程序中(如ShowMessage中)顯示“單個單引號”要如何處理?'''和'''''都會出現編譯錯誤。其實,是四個單引號表示一個單引號,也就是是 '''',第二個和第三表明這是一個“'”,第一個和第四個是表明這是一個字符型。呵呵,很有趣哦:)

  •ShowMessage中的漢化問題。ShowMessage中的按鈕都是E文的,讓人很不舒服。其實經過我們的一番DIY,也能把它們都弄成中文的。
    首先要保存當前的工程,然后選Project|Languages|Add...,出現Add Language對話框,選擇你要漢化的工程(也可以自定義文件夾),Next;選最后一項“中文(中國)”,Next;Next;Next;Finish;OK;然后就出現了Translation Manager對話框,在左邊選“中文(中國)|Resource Scripts|Projet1_DRC(這個具體要看你的工程文件名)”,然后右邊的列表里找到“Const_SMsgDlgOK”項,將其的“中文(中國)(translated)”格改為“確定”(原為OK),保存后退出。這下,再運行一下程序,哈哈,是不是就是中文按鈕啦!
    不過,ShowMessage這種類型的信息對話框非常簡單了,可以在系統調試期間顯示給開發人員一些過程信息。但由于過于簡單,所以我建議在軟件的正式版中不要使用這樣的對話框。而且,最好用MessageBox代替ShowMessage以減小軟件的體積,例如,同樣一個DLL文件,采用MessageBox 編譯后的DLL文件大小為58K,而ShowMessage后就變成了301K!!


上一篇:delphi8里在VCL.net使用Ado.net

下一篇:Delphi,編譯文件(第8頁)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品美女久久久久| 91超碰caoporn97人人| 国产精品免费在线免费| 国产精品日韩在线| 久久免费精品日本久久中文字幕| 亚洲欧美中文在线视频| 欧美最猛黑人xxxx黑人猛叫黄| 91精品国产高清自在线| 亚洲色图25p| 欧美精品成人在线| 久久精品最新地址| 在线精品视频视频中文字幕| 成人性生交xxxxx网站| 精品久久久香蕉免费精品视频| 黄色91在线观看| 亚洲亚裔videos黑人hd| 黄色91在线观看| 福利二区91精品bt7086| 欧美理论电影在线观看| 美日韩精品视频免费看| 国产午夜精品视频免费不卡69堂| 8090成年在线看片午夜| 亚洲最新视频在线| 亚洲国产精彩中文乱码av在线播放| 国产亚洲视频在线| 国产精品久久久av久久久| 日韩高清电影免费观看完整| 欧美黑人性视频| 日韩网站在线观看| 中文字幕日韩欧美精品在线观看| 亚洲国产精品久久久久秋霞不卡| 欧美激情中文字幕乱码免费| 日韩中文字幕在线视频播放| 亚洲天堂男人天堂女人天堂| 岛国视频午夜一区免费在线观看| 国产精品久久久久久久美男| 欧美亚洲在线视频| 中文字幕欧美日韩在线| 欧美成人精品不卡视频在线观看| 欧美老妇交乱视频| 国模极品一区二区三区| 亚洲精品日韩丝袜精品| 少妇高潮 亚洲精品| 亚洲人午夜精品| 欧美精品做受xxx性少妇| 久久久精品在线观看| 国产亚洲成av人片在线观看桃| 韩国三级电影久久久久久| 日韩女优人人人人射在线视频| 成人国内精品久久久久一区| 18性欧美xxxⅹ性满足| 福利微拍一区二区| 亚洲人成在线观看| 日韩极品精品视频免费观看| 亚洲丝袜av一区| 精品视频久久久久久| 欧美在线视频观看| 欧美日韩国产精品一区| 91在线视频精品| 97久久超碰福利国产精品…| 日韩精品久久久久久福利| 欧美精品亚州精品| 欧美日韩亚洲精品内裤| 久久精品99国产精品酒店日本| 精品呦交小u女在线| 欧美风情在线观看| 国产成人精品一区二区| 成人黄色免费在线观看| 欧美激情a在线| 91视频88av| 国产精品入口福利| 亚洲码在线观看| 日韩av综合中文字幕| 亚洲国产天堂久久国产91| 欧美俄罗斯乱妇| 久久999免费视频| 国内精品伊人久久| 欧美大片在线看免费观看| 久久露脸国产精品| 九九精品在线播放| 69视频在线播放| 成人激情在线观看| 久久视频在线观看免费| 日韩在线精品一区| 91久久在线播放| 日韩美女av在线免费观看| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲欧美国内爽妇网| 久久免费视频观看| 久久影院中文字幕| 国外成人免费在线播放| 亚洲一区二区三区777| 中文字幕日韩在线播放| 久久久精品一区二区| 欧美电影在线免费观看网站| 亚洲高清不卡av| 久久亚洲精品国产亚洲老地址| 一个人www欧美| 国产日本欧美在线观看| 91系列在线观看| 国产精品久久久久久网站| 国产精品99久久久久久www| 欧美日韩中文在线观看| 成人免费看吃奶视频网站| 4438全国成人免费| 欧美日韩激情美女| 亚洲黄一区二区| 国产精品旅馆在线| 国内外成人免费激情在线视频网站| 午夜剧场成人观在线视频免费观看| 78m国产成人精品视频| 91精品在线国产| 久久成人在线视频| 国产精品一区二区女厕厕| 日本aⅴ大伊香蕉精品视频| 日韩免费在线视频| 国产不卡一区二区在线播放| 国产中文字幕亚洲| 久久久久久久色| 亚洲国产成人在线视频| 欧美成人剧情片在线观看| 青青a在线精品免费观看| 中文字幕精品影院| 欧美成人免费全部| 国产精品久久久久99| 欧美亚洲成人xxx| 成人激情视频在线播放| 第一福利永久视频精品| 午夜精品久久久久久久99热| 日韩免费在线看| 欧美大片免费观看在线观看网站推荐| 97色在线播放视频| 久久免费视频网站| 日韩在线观看免费| 国产欧美精品在线播放| 精品国产91乱高清在线观看| 亚洲福利视频久久| 日韩电影中文字幕在线| 国产成人一区二区三区小说| 亚洲精品国产精品久久清纯直播| 成人综合国产精品| 国产日韩综合一区二区性色av| 国产精品69久久久久| 国产主播喷水一区二区| 中文字幕久久久| 欧美有码在线观看| 亚洲国产精品久久久久久| 91国产美女在线观看| 一区二区三区动漫| 亚洲精品wwwww| 欧美另类极品videosbestfree| 国产成人精品久久二区二区| 日韩美女视频在线观看| 欧美影院久久久| 国产精品久久综合av爱欲tv| 国产一区深夜福利| 久久青草福利网站| 久久精品国产久精国产一老狼| 日韩中文在线不卡| 91亚洲精品久久久久久久久久久久| 热门国产精品亚洲第一区在线| 久久理论片午夜琪琪电影网| 国产精品久久久久福利| 国产成人精品免高潮在线观看|