2018年3月29日 星期四

BCB 選擇路徑(資料夾)

BCB 選擇路徑(資料夾)


工作關係要將各式各樣的資料彙整並輸出
各式各樣的資料都放在同一目錄下
所以在設計程式就必須設計可以給使用者選擇目錄
但BCB10似乎沒有這種元件
(其實有 DirectoryListBox 但我駕馭不了)

於是Google發現大家用的是 SelectDirectory();
網路上大大們說有 2 種版本

Boolean SelectDirectory(AnsiString Directory, TSelectDirOpts Options, Longint HelpCtx);
Boolean SelectDirectory(const AnsiString Caption, const BSTR Root, AnsiString Directory, TSelectDirExtOpts Options = [sdNewUI], TWinControl * Parent = nil);

一個是 Windows 的對話框,一個是 BCB 自己的
但我試不出來兩個似乎都長一樣
不知道是 BCB10 的改動還是我用錯

以下是程式碼 ( 第2種版本 )
#include <vcl .filectrl.hpp>
void __fastcall TMainForm::BitBtn1Click(TObject *Sender)
{
    String str;
    TSelectDirExtOpts opt;
    opt += TSelectDirExtOpts()<<sdShowEdit;
    opt += TSelectDirExtOpts()<<sdValidateDir;
    if (SelectDirectory(L"Please Select a Directory", L"", str, opt, this))
        LabeledEdit1->Text = str;
}

SelectDirectory 共輸入了 5 個參數

第一個 Caption = 對話框顯示的字

第二個 Root = 根路徑

第三個 Directory = 選擇的字串

第四個 Options = 對話框樣式

第五個 不清楚,自己理解是 選擇 this 等於我按"這個" Button 這元件就會跳出來

其中 TSelectDirExtOpts 參數可以參考官方文件


參考資料
http://hcl123.blogspot.tw/2012/09/using-open-directory-dialog-box-in-bcb.html

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/FileCtrl_SelectDirectory@string@TSelectDirOpts@Longint.html

BCB Debug

BCB Debug


因為工作關係接觸了 BCB10
這是我人生中第一次學 C++
頁面打開其實不難理解但仍然迷茫了一星期
( 公司只有一個人會,不好意思一直煩他 )

雖然有強大的斷點功能
但我還是不太會用,應該說不習慣
加上我寫的都是小程式
所以我選擇寫一個TXT檔 來記錄LOG
程式碼如下
void BugReport(AnsiString msg)
{
    AnsiString Path = ExtractFilePath(Application->ExeName);
    Path.cat_sprintf("DeBug.txt");
    FILE *fp = fopen(Path.c_str(), "a+");
    if(!fp)return;
    fprintf(fp, "%s\n", msg);
    fclose(fp);
}

至於為什麼用 AnsiString
因為網路上大大們分享的程式碼都是 BCB6
也就是他們的 String 等於 AnsiString
而 BCB10 的 String 等於 UnicodeString
兩者有啥不同,我想痛過就知道

Hi

第一篇就來寫寫動機吧

如果改了部落格標題的話

寫這篇的時候標題應該是"沒有方向整天偷懶的工程師"

如標題所示

為了維持工作動能,記錄程式碼,以及工作上大大小小的事

我決定開始寫 Blog



期許

每六日早上都能更新一禮拜發生的事

沒寫希望是出國或很忙,而不是因為通宵打 PS4 或 POE


( PS. 這篇是上班打的,夠偷懶的吧! )


Popular Posts