麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > 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.為了節約內存,優化運行,我們總是動態創建組件。可當用完之后,如果不及時徹底的將其從內存中清理出去,那就有違我們的初衷了。可怎么“殺死”所創建的組件? 比如創建了一個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來釋放掉這個數組,這下真正達到了“綠色環保”:)

  •“怎么獲取當前程序運行的路徑”這個問題經常能夠在論壇上看到。的確,這個函數在編程中不時的要用到的。其實有好幾個函數都能達到這個效果:
→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大全在线免费观看 | 一区二区三区欧洲 | av中文在线观看 | 欧美成人黄色小视频 | 看免费黄色一级片 | 免费看污视频在线观看 | 羞羞视频免费网站含羞草 | 黄色片在线观看网站 | 免费黄网站在线播放 | 久久精品伊人网 | 国产免费最爽的乱淫视频a 毛片国产 | 日本高清电影在线播放 | 国产免费观看一区二区三区 | 国产精品久久av | 精品一区二区在线播放 | 久久精品一区二区三区国产主播 | 久草久视频| 国产美女的小嫩bbb图片 | 国产亚洲综合精品 | 999精品久久久| 久久久久久久久久久久久久久伊免 | 91久久久久 | 福利在线国产 | 日本在线播放一区二区三区 | 青青草成人影视 | 港台三级在线观看 | 中文字幕在线观看精品 | 国产成人精品自拍视频 | 免费毛片视频 | 精品三级内地国产在线观看 | 久久精品亚洲成在人线av网址 | 欧美精品一区自拍a毛片在线视频 | 久久精品亚洲成在人线av网址 | 久草成人在线观看 | 午夜视频免费播放 | 他也色在线视频 | av观看国产 | 91九色蝌蚪国产 | 97中文字幕第一一一页 | 国产成年人网站 | 亚洲精品一区二区三区免 |