目前分類:程式設計 (17)

瀏覽方式: 標題列表 簡短摘要

BCB-取得檔名並不包含副檔名的方法

在 BCB 裡頭可以很輕易的取得某個檔案的名稱,可是它會包含其副檔名,
有很多時候我們並不需要副檔名

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
AnsiString Name;
Name = "1234.bmp";
Name = Name.Delete(Name.Pos(ExtractFileExt(Name) ),ExtractFileExt(Name).Length() ) ;
}


另一個方法

文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-修改ListBox 的字體顏色
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,TRect &Rect, TOwnerDrawState State)
{
if(State.Contains(odSelected)){
ListBox1->Canvas->Brush->Color = clBlue;
ListBox1->Canvas->Font->Color = clYellow;
}else{
ListBox1->Canvas->Brush->Color = clWhite;
ListBox1->Canvas->Font->Color = clBlack;
}
ListBox1->Canvas->FillRect(Rect);
文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-MessageBox 的使用方法


int MessageBox(const char* Text, const char* Caption, int Flags);

Text : 您要顯示的訊息
Caption : MessageBox 的標題
Flags : 設定要顯示按鈕格式


文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-Memo貼上之後自動換行-WM_PASTE 


有時候你可能會需要讓使用者在 Memo 貼上文字之後自動換行。要達到這樣的效果有幾種方法辦得到。第一種是在OnMouseUp event 裡頭偵測使用者是否按下了 Ctrl+V。

不過這方法並不是很好,所以在這裡我要介紹第二種方法。第二種方法是直接偵測送到 Memo 的 WM_PASTE 訊息。



//Unit1.h

private: // User declarations

文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-控制多個元件的方法-FindComponent()

 

我們可以透過 ComponentCount 來掃瞄 Form 底下的所有元件,進而控制這些元件,例如底下這個 sample code 可以把 Form 

底下的 Edit 元件一口氣改掉。

Example:
     for (int i = 0; i < ComponentCount; ++i){
         if (Components[i]->ClassNameIs(“TEdit”))
              ((TEdit *)Components[i])->Text = “我被改了”;
     }

文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-取得指定目錄下特定副檔名的所有檔案到特定資料夾-WinAPI應用


這一段程式碼是可以取得指定目錄及其子目錄下,所有副檔名為 .url 的檔案 (沒錯,這就是拿來掃瞄 IE 我的最愛),取得的所有檔名會存放在一個名叫 sList 的 StringList 裡頭。



void __fastcall TForm1::LoadFavorite(AnsiString Dir, TStringList *sList) // Dir 就是你要掃瞄的目錄, sList 拿來存放檔名

{

文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-用右鍵選擇 TreeNode 並顯示右鍵選單


假設你有一個 TreeView 叫做 tvArticle,有個 PopupMenu 叫做 PopupMenu1,你希望用右鍵可以點選 tvArticle 的節點,然後再顯示右鍵選單。
首先你要把 PopupMenu1 的 AutoPupop 屬性設為 false,然後在 tvArticle 的 OnMouseDown 事件加入以下程式碼。


void __fastcall TForm1::tvArticleMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TPoint p;
文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

void __fastcall TForm1::ListBox1MouseUp(TObject *Sender,
  TMouseButton Button, TShiftState Shift, int X, int Y)
{
   if (Button == mbRight){
      ListBox1->ItemIndex = ListBox1->ItemAtPos(Point(X,Y), true);
   }
}
文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-設定Excel欄位為通用格式

Worksheet.OlePropertyGet("Cells", row, 10).OlePropertySet("NumberFormatLocal","@");


文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-兩個StringGrid 同步滾動

void __fastcall TForm1::StringGrid1TopLeftChanged(TObject *Sender)

{

  StringGrid2->TopRow = StringGrid1->TopRow;

  StringGrid2->LeftCol = StringGrid1->LeftCol;

}


文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-替代字元應用函數

oneData->CommaText=StringReplace(csvFile->Strings[i]," ","^",TReplaceFlags()<<rfReplaceAll);

將某一字串內容的空白字變成 "^"字元

如 I Love You --> I^Love^You



文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB 透過winrar 進行壓縮

ShellExecute(NULL,"open","C:\\Program Files\\WinRAR\\WinRAR.exe","a -r -y -o+ -m5 C:\\temp1\\123.rar","C:\\bak\\1215",SW_HIDE);


ShellExecute(NULL,"open",WinRAR.exe路徑,WinRAR解壓縮參數與壓縮檔名路徑,要壓縮的路徑位置,執行時隱藏);


文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCBStringGrid中文字居中

BCBDelphi中,StringGrid中的文字無法置中,一般只能自己寫代碼来,下面的代碼可以完成這個功能,同時還支持列寬自動置中。

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,

      int ARow, TRect &Rect, TGridDrawState State)

{

AnsiString Str=" ";

 ((TStringGrid*)Sender)->Canvas->Font=((TStringGrid*)Sender)->Font;

 for(int i=0;i<((TStringGrid*)Sender)->RowCount;i++){

     if(((TStringGrid*)Sender)->Cells[ACol][i].Length()>Str.Length())

         Str=((TStringGrid*)Sender)->Cells[ACol][i];

文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-DBGrid 滑鼠滾輪

void __fastcall TForm1::DBGridWndProc(TMessage &Message)

{

    short int Delta;

    if(Message.Msg == WM_MOUSEWHEEL) // 判斷訊息是否為 [滑鼠滾輪]

    {

        Delta = Message.WParamHi;

        if (Delta < 0) DataSource3->DataSet->Next(); // 往上滾動時跳到上一筆資料

        if (Delta > 0) DataSource3->DataSet->Prior(); // 往下滾動時跳到下一筆資料

    }else{

文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-字串上補0 製作流水序號

int L_Num=5;

AnsiString::StringOfChar('0',4-IntToStr(L_Num).Length())+IntToStr(++L_Num);


result: 0006

---------------------------------------------------------------------------------------------------------------

 

int L_Num=9;

 

文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-字串時間加上一分鐘

   

  

  ShortDateFormat = "yyyy/mm/dd";       // 設定時間格式

  DateSeparator = '/';                            //設定時間分隔符號, 如 '/' , '-', ':' ....等

  DateTimeToStr(Now()+0.001)              // 現在時間加上1分鐘

  

  --------延伸

  DateTimeToStr(Now()-7).SubString(1,10);     // 取得前7天的日期,一週前的日期

  DateTimeToStr(Now()-28).SubString(1,10);   // 取得前28天的日期

文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()

BCB-防止程式重複執行

要防止自己的程式重複執行,使用的方法有好幾種,有些方法甚至要去修改*.bpr(C++ Builder 專案檔),但建議不要任意修改 C++ Builder 自動維護的專案檔;使用下列方法只要將下列程式碼原封不動的抄到FormCreate() 事件中即可,不但不會讓相同的程式同時存在第二個實體,而且在執行時發現第一個實體已存在而且是最小化時,還會將其彈出展開於桌面上....

//-------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 
Application->Title=Form1->Caption;
 
HANDLE PrevInstHandle;
 
HANDLE Mutex = OpenMutex(SYNCHRONIZE,false,Application->Title.c_str());
 
if (Mutex != null){

文章標籤

yao67 發表在 痞客邦 留言(0) 人氣()