2013年12月6日 星期五

[Delphi] Break, Exit, Abort, Continue 使用

Break;
中斷執行迴圈,可從當前 for…to…do、while…do、repeat…until 執行中途跳出,繼續執行該迴圈的下一段程式碼。

Continue;
繼續迴圈,可從當前 for…to…do、while…do、repeat…until 執行中途,忽略以下程式碼,跳到迴圈頭續續執行。

Exit;
離開函式,可從當前 procedure、function 執行中跳出,繼續執行呼叫的程式碼。

Abort;
中斷函式,可從當前 procedure、function 執行中跳出,並觸發 try…except(如有將 Abort 包進 try…except)

Break, Continue 範例結果:
procedure Test;
begin
for i := 0 to 3 do
begin
if i := 0 then begin
continue;
ShowMessage('After Continue' + IntToStr(i));
end;
if i := 2 then begin
break;
ShowMessage('After Break;' + IntToStr(i));
end;
ShowMessage('End of If' + IntToStr(i));
end;
ShowMessage('End of For' + IntToStr(i));
end; // end of procedure


結果應該會依序出現

End of If 1


End of For 3




Exit, Abort 範例結果



procedure Test;
begin
try
Abort;
ShowMessage('After Abort 1');
except
ShowMessage('Enter Except 1');
end;
ShowMessage('Out try...except 1 ');

try
Exit;
ShowMessage('After Exit 2');
except
ShowMessage('Enter Except 2');
end;
ShowMessage('Out try...except 2');
end;



結果應該會依序出現

Enter Except 1


Out try…except 1

2013年12月5日 星期四

[Delphi 7](2014.3.3改)Indy 10 網路元件安裝

舊的方法原本是以下這樣,後來我裝新的XP系統時發現無法成功

首先從 http://www.indyproject.org/downloads/10/indy10.0.52_source.zip 下載壓縮檔。
(或是到這個網頁找 http://www.indyproject.org/sockets/download/files/indy10.en.aspx )

Indy 10 安裝步驟:

移除舊版 Indy 9
  1. 進 Delphi 後,選擇 Component –> Install Packages…
  2. 在 Design Packages 找有 Indy 字樣的選項後,Remove 後離開。
  3. 在 Delphi 裡,選擇 Tools –> Environment Options,打開 Library 標籤,刪除有Indy 的路徑。
  4. 在系統資料夾找所有 Indy 開頭的 Indy*.bpl 和 Indy*.dcp 檔案,並刪除。
開始安裝:
  1. 解壓縮剛下載的 Indy10.0.52_source.zip 檔至 您放置 Lib 的目錄 (例:C:\Program Files (x86)\Borland\Delphi7\Source\Indy10),並將底下四個目錄加入 Delphi 內的 Library 路徑。
  2. 打開 \System\IndySystem70.dpk        ,Compile
  3. 打開 \Core\IndyCore70.dpk               ,Compile
  4. 打開 \Protocols\IndyProtocols70.dpk   ,Compile
  5. 打開 \SuperCore\IndySuperCore70.dpk,Compile
  6. 打開 \Core\dclIndyCore70.dpk            ,Install
  7. 打開 \Protocols\dclIndyProtocols70.dpk,Install
  8. 打開 \SuperCore\dclIndySuperCore70.dpk,Install

 

新的方式(成功率大幅提高)

http://indy.fulgan.com/ZIP/ 下載開發中的Indy10,(2014.3.3)今日的版本是 Indy10_5099.zip 
(下載舊方法的連結 indy10.0.52_source.zip 應該也可以,但我沒試過)

開始進行安裝

先移除原安裝的 Indy (Delphi7之後好像都會自動裝Indy9,大致和舊方式相同,這邊再寫詳細一點):

  1. 進 Delphi 後,選擇上方功能選項 「Component」 –> 「Install Packages…」
  2. 在 「Design Packages」框框裡找有「Indy」字樣的選項,點選後按「Remove」移除(如有安裝過或Delphi7之後版本應該有1,2個)
  3. 全部移乾淨後,按 「OK」離開
  4. 再選擇上方功能選項「Tools」 –> 「Environment Options」,再點開「Library」標籤
  5. 在「Directories」框框裡,找「Library path」的最後面,點「…」按鈕
  6. 尋找列表內,有任何「Indy」字樣的路徑,點選後按「Delete」刪除掉
  7. 刪除完後,點選「OK」離開,關掉 Delphi
  8. 再從檔案總管中,搜尋「系統資料夾」(就是Windows目錄)內所有的Indy開頭的檔案,應該都會在 windows/system32 裡面

確定以上步驟都完成,或是您確定沒安裝任何版本的Indy ,就可以開始進行安裝

  1. 解壓縮剛下載的壓縮檔到你想參照的目錄位置,我是放在 C:\Program Files (x86)\Borland\Delphi7\Source\Indy10
  2. 進入 \Lib 目錄,找Fulld_7.bat,點選執行 (不同版本請自行變通,這步不做應該也可以,10.0.52版沒有這檔案,請自行嘗試)
  3. 點擊打開 \System\IndySystem70.dpk ,然後點 Compile
  4. 點擊打開 \Core\IndyCore70.dpk ,然後點 Compile
  5. 點擊打開 \Protocols\IndyProtocols70.dpk ,然後點 Compile
  6. 在 Delphi 上面功能列選擇「Component」 –> 「Install Packages…」 (用點擊檔案打開後Install的方式經常失敗)
  7. 點「Add…」按鈕,選擇 \Core\dclIndyCore70.dpk,然後「開啟舊檔」
  8. 再點「Add…」按鈕,選擇 \Protocols\dclIndyProtocols70.dpk,然後「開啟舊檔」
  9. P.S. 「SuperCore」可以完全忽視,不用安裝

我照這個步驟的成功率目前是百分百,提供給大家試試看

參照網址 http://www.indyproject.org/Sockets/Docs/Indy10Installation.EN.aspx

2013年12月4日 星期三

[Delphi]設定Record Array不定長度

從資料庫抓取資料出來時,卻不確定筆數有幾筆,可以用這種方式,在將資料庫資料抓出來後,設定陣列的長度空間並放入資料。

定義結構 Record 及 Array

type
RDBData = Record
A:Integer;
B:String;
end;
ARDBData = Array of RDBData;


設定 Array 長度



function GetData: ARDBData;
var
dbData: ARDBData;
i: Integer;
begin
...
dbQuery.SQL.Text := 'SELECT * FROM [User]';
dbQuery.Open;

SetLength(dbData, dbQuery.RecordCount);
for i := 0 to dbQuery.RecordCount - 1 do begin
dbData[i].A := dbQuery.Fields[0].AsInteger;
dbData[i].B := dbQuery.Fields[1].AsInteger;
dbQuery.Next;
end;
Result := dbData;
...
end;



可以注意到,也可以回傳陣列沒問題