您心中不可缺少的Delphi Libraries是?

寫了Delphi多年,常常是有許多library是開新專案就會use進來的,避免重覆開發輪子的冏境。

整理了一篇「Indispensable Delphi Libraries」,列出他不可缺少的Library。如果要筆者加上的話,大概是一些商用元件像TMS、Infopower這類的元件吧:)

Delphi仿POS系統設定按鈕拖曳更改排序

drag2

drag1
許多餐飲或是快餐POS系統都會提供拖曳去更改按鈕排序!
在Delphi可不可以做得到呢?當然是簡單的~

1)MouseDown事件加上
(sender as tbutton).BeginDrag(false);
2)DragOver事件加上
if source is TButton then
Accept:=true;
3)DragDrop事件加上 >> 互換對方的caption
if Sender is TButton then begin
TempCaption := TButton(Source).Caption;
TButton(Source).Caption := TButton(Sender).Caption;
TButton(Sender).Caption := TempCaption;
end;

架設網站又不想自己管理主機~遠振租用虛擬主機也不錯

架設網站除了自己架設主機外,還有一種方式是租用主機(虛擬主機、雲端主機….)。尤其遇到像筆者一樣比較想專心在程式上的人(明明就是懶)。或是一開始流量小的網站都可以考慮用這樣的方式。

筆者自己倒是喜歡用遠振資訊的主機服務架設網站,目前遠振有推出雲端主機服務的方案。朋友們可以參考看看!

官方網站: 遠振資訊

遠振資訊有限公司

 

Delphi XE5開發的Mobile APP有那些上架?

Delphi 支援 Android / iOS的行動裝置開發已經一段時間了!許多人好奇開發出來的APP到底可不可以在 Google Play 或是  Apple Store上架?

Embarcadero整理了一個「RAD Studio Application Showcase」網頁,讓大家知道有那些已上架的APP。

android ios

當然如果您要回報你使用Delphi、C++ Builder或RAD Studio開發且上架的程式,也可以透過這個表單送出。

facebook建立了一個Delphi Developer Forum

由於比較常在Facebook上出沒,所以索性在Facebook建了一個「Delphi Developer【Delphi開發者】」,主要討論的是所有Delphi開發的大小事以及新知。

也期待有更多人踏入Delphi for Mobile的開發 🙂

 

 

網址: https://www.facebook.com/groups/585770898163978/

Delphi Xe5二行程式碼搞定iOS讀取QR、UPC、EAN條碼

TMS Software 看到TMSFMXZBarReader這個元件,只要在要出現Barcode Scanner的地方寫一行

TMSFMXZBarReader1.show

取得掃到的內容則是在TMSFMXZBarReader的GetResult的AResult(文字)

元件下載網址: http://www.tmssoftware.net/public/TMSFMXZBarReaderPkgDXE5.zip

   

 

相關網址:
ZBar bar code reader

Delphi POS餐飲系統開發支援多國語言作法

開發餐飲POS或是其他系統,如果想打入國際市場的話,都會考量多國語系的問題,大部份就是使用mapping的方式。

在Delphi裡面的做法也很簡單~

先取得form上面的元件數(ComponentCount)

接下來用一個迴圈去比對即可。

資料表也可以開成一個

表單名稱、元件名稱、語言1、語言2、語言3的欄位…

不過因為裡面使用了infopower的wwdbgrid元件,寫在formcreate或formshow都抓不到值,後來是放到FormActivate才順利抓到

以下提供簡單的範例

 
[pascal]
var
sFormName:String;
i:integer;
begin
sFormName:= Self.Name; // 表單名稱
for i:=0 to self.ComponentCount -1 do begin
if Components[i] is TLabel then begin
if (TLabel(components[i]).Caption <>”) then begin
TLabel(components[i]).Caption := 取得語系….;
end;
end;
if Components[i] is TButton then begin
if (TButton (components[i]).Caption <>”) then begin
TButton (components[i]).Caption := 取得語系….;
end;
end;
end;
end;
[/pascal]
wwDBGrid的話關鍵有:
s:= TwwDBGrid(Components[i]).DataSource.DataSet.Fields[j].FieldName;
TwwDBGrid(Components[i]).ColumnByName(s).DisplayLabel
TwwDBGrid(Components[i]).ColumnByName(s).GroupName

Delphi透過MySQL存入檔案備份

MySQL存Blog的大小
TINYBLOB – 255 bytes
BLOB – 65535 bytes
MEDIUMBLOB – 16,777,215 bytes (2^24 – 1)
LONGBLOB – 4G bytes (2^32 – 1)

透過資料庫存取的方式重點:

TBlobField – LoadFromStream、SaveToStream
Tmemorystream – LoadFromFile、SaveToFile(.Position :=0)

存入資料庫

[pascal]
var
astream : Tmemorystream;
begin
AStream := TMemoryStream.Create;
try
astream.LoadFromFile(filename);
AStream.Position := 0;
if adotable1.Active then
begin
adotable1.Edit;
TBlobField(adotable1.FieldByName(‘t2’)).LoadFromStream(AStream);
adotable1.Post;
end;
finally
AStream.free;
end;
end;
[/pascal]

存回檔案

[pascal]
var
Ms:Tmemorystream;
begin
Ms := Tmemorystream.Create;
try
if adotable1.Active then
begin
TBlobField(adotable1.FieldByName(‘t2’)).SaveToStream(Ms);
Ms.Position := 0;
MS.SaveToFile(sname);
end;
finally
ms.Free;
end;
end;
[/pascal]

MySQL預設的BLOB為1M
別忘了 My.ini調整
max_allowed_packet = XXM