顯示具有 CBuilder 標籤的文章。 顯示所有文章
顯示具有 CBuilder 標籤的文章。 顯示所有文章

2023/10/06

[CB][Delphi]解決跨國小數點符號不同的程式處理

作者:吳祐賓





多數歐洲國家的數字浮點數,會使用逗號「,」作為小數點基點。

這陣子接獲客戶反應他們開發的軟體遇上 "Invalid floating point operation" 的錯誤

雖然最後並沒有採用程式解法來撫平此問題,只是這解決過程太有趣,一定要和你分享!



2018/06/06

Boost Regex and Unicode in C++ Builder

Boost - Bast C++ Library
Because "String" default is unicode in C++ Builer 2009 later.

And same std::wstring.

so, We should to use prefix "w" class, like:
wregex, wsmatch etc.

The Sample code below:

2018/01/20

JSON build and parser with C++ Builder (CHT)

圖片來源

開始學習網頁技術後,大致上都在 JSON 上面繞圈圈。

由於 C++ 本身沒有相關的函式庫,所以必須要找 3rd library 加以載入後才能使用。

然而 Delphi 已經有提供 JSON Framework,想必 C++ Builer 也一定會有,問題在於……





2016/11/07

初探 C++【Vector容器】與【VCL/FireMonkey framework】的結合

其實 Vector 就是 C++ 容器符號的表徵(【{】和【}】) 圖片來源

最近,有人在群裡問了在C++ Builder裡要怎麼有效率的處理【動態陣列】,讓群裡頓時又熱鬧起來,而「陣列」就屬於「容器」的應用,在群裡被廣泛提到的有『TList』、『TStringList』等『VCL Framework』專屬容器,這不禁讓我回想起多年前與【Vector】的奮戰歷程。

Vector

C++標準函式庫的容器成員之一,和C#的泛型相比,C++顯得更早想到【容器】概念。

Vector在C++界被廣泛應用,但不知道為什麼和VCL/FireMonkey framework就是難以結合應用,成為CB裡經典的遺珠之憾之一。


Vector:中文翻譯為【向量】,怎麼會跟向量扯上邊呢?

2016/10/31

淺談物件的釋放以及使用時機的探討 -- 使用 RAD Studio C++ Builder Berlin


據說,未來是個沒有 Delete 的世界(大誤) 圖片來源

在說明物件釋放方法之前,還得先聊聊 C++ Builder 開發者的習慣

就目前所接觸到會使用 C++ Builder 的開發者所整理的經驗,他們使用 C++ Builder 的理由大致上是以下兩點:
  1. 本身具有極高的 C 語言造詣,通常具有硬體開發經驗
  2. 和 Visual Studio C++ 相比,C++ Builder 的 UI 更是直覺的建立

由 1 可知,會使用 C 語言的開發者,通常有很強烈的語言潔癖,以及有自己一套對記憶體控制的要求

由 2 可知,C++ Builder 對從 C 過來的開發者來說,是很棒的 UI 建模工具

<以下 C++ Builder 簡稱 CB>
 
只是,由於 CB 的 WinForm 是建構在 VCL framework 之上,所以學習 C++ 的物件自然是必須要的。在擴充C++的基本知識後,底下便是常見的寫法:

2009/08/26

用C++實作Strtok (類似 Java StringTokenizer)

來源:strtok:Split string into tokens

在網路上在查Strtok的做法,無意間找到C++的處理模式
有網友熱心的公佈出他的程式碼(類似 Java StringTokenizer)
內容寫的真的很棒,所以就轉來這邊收藏。
如果要套用AnsiString,則可以使用AnsiString的c_str()函式,也同樣適用哦!
以下是它的源始碼內容:
//---------------------------------------------------------------------------
#include <iostream>
#include <string>
#include <vector>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

class StringTokenizer : public std::vector<string>{

public:
 StringTokenizer(const string& s, const string& delim = " ,") {
   string::size_type lastPos = s.find_first_not_of(delim, 0);
   string::size_type pos = s.find_first_of(delim, lastPos);

   while( string::npos != pos || string::npos != lastPos ) {
     push_back(s.substr(lastPos, pos - lastPos));
     lastPos = s.find_first_not_of(delim, pos);
     pos = s.find_first_of(delim, lastPos);
   }
 }
};
int main(int argc, char* argv[])
{
 StringTokenizer stk("1, 2, 3");

 for( StringTokenizer::size_type i = 0; i < stk.size(); i++ ) {
   cout << stk[i] << endl;
 }

 system("pause");
 return 0;
}
//---------------------------------------------------------------------------