Delphi輸入法切換

Delphi-IME
由於微軟內附的螢幕小鍵盤還真的有點小,加上POS餐飲系統開發需要螢幕小鍵盤,所以乾脆自己寫一個”大”鍵盤。

裡面需要做輸入法的切換,所以分享給大家。

需要Uses到Winapi.imm;

[pascal]
Uses Winapi.Imm;
[/pascal]

1取得所有的輸入法名稱

[pascal]
var
i: integer;
begin
for i := 0 to screen.imes.count – 1 do
begin
ComBoBox1.Items.Add(screen.Imes.strings[i]);
end;
end;
[/pascal]

2切換到輸入法

[pascal]
var
I: integer;
myhkl: hkl;
begin
if ComboBox1.Text <> ” then
begin
if Screen.Imes.Count <> 0 then
begin
I := screen.Imes.indexof(ComboBox1.Text);
if I >= 0 then
myhkl := hkl(screen.Imes.objects[i]);
activatekeyboardlayout(myhkl, KLF_ACTIVATE);
end;
end;
end;
[/pascal]

3關閉輸入法

[pascal]
begin
ImmSimulateHotKey(Handle, IME_THOTKEY_IME_NONIME_TOGGLE);
ComBobox1.Text := ”;
end;
[/pascal]

4取得目前輸入法

[pascal]
var
IMEHandle: THandle;
Idx: Integer;
IMEName: String;
begin
IMEName := ”;
ImeHandle := GetKeyBoardLayOut(0);
for Idx := 0 to Pred(Screen.Imes.Count) do
if HKL(Screen.Imes.Objects[Idx]) = ImeHandle then
IMEName :=Screen.Imes[Idx];
ShowMessage(IMEName);
end;
[/pascal]

GitHub連結: https://github.com/superlevin/DelphiIme

Delphi Xe5 with InfoPower on GooglePlay

InfoPower是一套資料庫開發的元件,現在Woll2Woll Software也將它搬上FireMonkey並且支援Android了!
它們也在Googleplay上放了一個InfoPower FireMonkey Demo 的app讓大家下載試用。

不過壽山看來怎麼好像是在Android上跑Windows 呢?大家可以試看看好了!

 

相關連結:
Woll2Woll Software website : http://www.woll2woll.com/infopower.html

Delphi 使用idhttp下載顯示進度列及檔案大小

downloadwithprocessbar

在更新程式時,需要知道目前下載到多少百分比及大小怎麼做?

在Delphi使用idhttp及IdAntiFreeze(防止程式看起來當掉)二個元件就可以做得到。順便列下關鍵程式碼

[pascal]
procedure TForm1.BtnDownloadClick(Sender: TObject);
var
tStream: TMemoryStream;
begin
tStream := TMemoryStream.Create;
try
IdHTTP1.Get(EdtSource.Text, tStream);
tStream.SaveToFile(EdtTarget.Text);
ShowMessage(‘Download Success!’);
except
ShowMessage(‘Download Fail!’);
end;
tStream.Free;
end;

procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
begin
Label1.Caption := BytesToStr(aWorkCount);
ProgressBar1.Position := aWorkCount;
Update;
end;

procedure TForm1.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Int64);
begin
ProgressBar1.Max := aWorkCountMax; // Set File total size
Label2.Caption := BytesToStr(aWorkCountMax);
Update;
end;

[/pascal]

Github原始碼下載 : https://github.com/superlevin/downloadwithprocessbar

PHP ord()函數utf8問題

早上在寫註冊機程式,不過遇到php的ord函數遇到utf8時無法運作的冏境。
找到了一個解決方式,另外寫了一個delphi xe5的ord函數比對確定無誤。

來源: phpkode

[php]
function utf8_ord($chr) {
$ord0 = ord($chr);
if ( $ord0 >= 0 && $ord0 <= 127 ) {
return $ord0;
}
if ( !isset($chr{1}) ) {
trigger_error(‘Short sequence – at least 2 bytes expected, only 1 seen’);
return FALSE;
}
$ord1 = ord($chr{1});
if ( $ord0 >= 192 && $ord0 <= 223 ) {
return ( $ord0 – 192 ) * 64
+ ( $ord1 – 128 );
}
if ( !isset($chr{2}) ) {
trigger_error(‘Short sequence – at least 3 bytes expected, only 2 seen’);
return FALSE;
}
$ord2 = ord($chr{2});
if ( $ord0 >= 224 && $ord0 <= 239 ) {
return ($ord0-224)*4096
+ ($ord1-128)*64
+ ($ord2-128);
}
if ( !isset($chr{3}) ) {
trigger_error(‘Short sequence – at least 4 bytes expected, only 3 seen’);
return FALSE;
}
$ord3 = ord($chr{3});
if ($ord0>=240 && $ord0<=247) {
return ($ord0-240)*262144
+ ($ord1-128)*4096
+ ($ord2-128)*64
+ ($ord3-128);

}

if ( !isset($chr{4}) ) {
trigger_error(‘Short sequence – at least 5 bytes expected, only 4 seen’);
return FALSE;
}
$ord4 = ord($chr{4});
if ($ord0>=248 && $ord0<=251) {
return ($ord0-248)*16777216
+ ($ord1-128)*262144
+ ($ord2-128)*4096
+ ($ord3-128)*64
+ ($ord4-128);
}

if ( !isset($chr{5}) ) {
trigger_error(‘Short sequence – at least 6 bytes expected, only 5 seen’);
return FALSE;
}
if ($ord0>=252 && $ord0<=253) {
return ($ord0-252) * 1073741824
+ ($ord1-128)*16777216
+ ($ord2-128)*262144
+ ($ord3-128)*4096
+ ($ord4-128)*64
+ (ord($c{5})-128);
}

if ( $ord0 >= 254 && $ord0 <= 255 ) {
trigger_error(‘Invalid UTF-8 with surrogate ordinal ‘.$ord0);
return FALSE;
}

}
[/php]

免費Bootstrap管理介面後台模板

網站不可或缺的就是後台程式,不過後台其實不用像前台如此麻煩,我都喜歡直接找現成的使用,這邊就跟大家分享我喜歡用的二種基於bootstrap的後台模板,提供大家做為參考選用!

Metis

網址:http://demo.onokumus.com/metis/index.html

Metis-admin-templates-bootstrap

charisma

網址:http://usman.it/themes/charisma/

charisma-admin-templates-bootstrap

 

美觀的標籤雲插件 Muki Tag Cloud

WordPress自從新版本後,就內建了標籤雲的功能。可以到外觀→小工具中拖拉標籤雲到側邊欄欲放置的位置就可以,並且可以透過點選標籤跑到自己想看的文章去。聽起來感覺不錯!不過內建的標籤雲真的單調了一點,除了字型大小會不同外,字體的顏色是單一顏色,少了些炫麗的元素。

台灣一位很年輕但鑽精於CSS的設計師Muki在部落格中教導大家「製作不規則形狀的 WordPress 標籤雲」不過還是太複雜了!佛心來著就跟朋友一同將它實作成Wordpress的外掛Muki Tag Cloud 

結果就如下圖,不規則的排序加上質感且漂亮的顏色,不愧是設計師出身。

更多介紹就請自己轉台到原作者的介紹網頁「漂亮的 WordPress 標籤雲外掛: Muki Tag Cloud」。

muki_tag_cloud

 

 

延伸閱讀:

Muki Tag Cloud插件

PHP合作設計者Mesak-[Plugin] WordPress 標籤雲外掛: Muki Tag Cloud

原作者Muki漂亮的 WordPress 標籤雲外掛: Muki Tag Cloud

作者facebook粉絲頁-Muki Space

 

 

Delphi XE5也可以開發 Google Glass應用

來源: 

中午看到 Jim McKeeth秀出了他把Delphi XE5開發的程式裝在Google Glass上面了!

利用 SysCheck 找到Google Glass處理器是 ARMv7 PRocessor rev 3 (v71) ,系統版本則是 4.0.4 ,符合 Delphi XE5的需求。

在設計上可以使用 Google Mirror API 或 GDK

Google Mirror API是基於REST and JSON 的API,可以輕鬆使用Delphi XE5最新的TRESTClient元件做到。

HelloGlassProjectManager

JimWithGlass

Delphi XE5 App running on Google Glass

原文連結:Hello Google Glass from Delphi XE5

常見的餐飲、飲料POS機硬體設定問題

接觸餐飲、快餐、飲料店等POS開發後,週遭許多朋友都會問相關的問題!
不過許多看起來真的都是設定上的問題,可能是因為有潔癖的關係,看到線髒了就像拔起來擦一擦,不過悲劇就開始發生了~接回去硬體全都不聽使喚!再加上呼叫POS廠商叫天天不應、叫地地不靈的情況下,欲哭無淚。

不過真的有這麼困難嗎?其實也還好啦!就由壽山來帶領大家稍微認識一下。

1441363_10151669974171541_2044485183_n-2上圖是POS機器與各種硬體連接的介面,大致上就是幾種規格:

  • LPT 點矩陣式印表機用
  • Line In/Out 麥克風/喇叭
  • COM(Serial port) 主要POS機硬體規格
  • USB
  • LAN 網路
  • PS/2 鍵盤、滑鼠
  • VGA 可以第二台螢幕
  • RJ11
  • DC 電源

言歸正傳,那為什麼我把家裡USB的鍵盤、滑鼠、隨身碟隨便拔插都可以抓得到?為什麼上面的COM1~4我接錯了就不會動呢?

螢幕快照 2013-11-04 下午5.59.16

原因是Serial Port的控制是直接將指令送到指定的Com Port去,不經過驅動程式去驅動的情況下直接使用。

所以下一次在拔插Com Port的插頭時,記得要先記住那個Port是接在那個Com Port,如果真的忘了就去找到系統中設定Com Port的位置去接對就行了。