Delphi使用SPComm沒辦法觸發ReceiveData

SPComm 在連線Com機器時,時候沒辦法觸發 ReceiveData,後來才知道StartComm後要留點時間給它喘氣(連線)。所以加上sleep~

[pascal]
var
s:Ansistring;
begin
RepCom.StartComm;
s := Chr(16) + Chr(4) + Chr(1) ;
sleep(50);
RepCom.WriteCommData(PAnsiChar(s),Length(s));
end;
[/pascal]

Delphi XE6(RAD Studio XE6)讓部落格流量增加?

blogstatus

自從XE4之後,發現自己的部落格有個很妙的現象!

只要遇到 Embarcadero有發表新的RAD STUDIO版本,

部落格的流量就會增加!

昨天 RAD STUDIO XE6發表後也是如此,呈現一柱擎天的現象~

不過老實說台灣關注 Delphi 或 RAD STUDIO的人數真的少很多

除了小弟之外,大概就是

縹緲’s blog

賈氏柏的屋簷下

自己也有在FB成立社群

Delphi Developer【Delphi開發者】

歡迎大家多多聯繫囉!

Delphi執行時拖拉、改變元件大小

應要求在程式執行時還要可以拉拖、改變元件大家~
分享一個不錯的函數
[pascal]
procedure DragResizeControl(WinControl: TControl; Shift: TShiftState;X, Y, Precision: integer);
var
SC_MANIPULATE: Word;
begin
if (X<=Precision) and (Y>Precision) and (Y<WinControl.Height-Precision) then begin
SC_MANIPULATE := $F001;
WinControl.Cursor := crSizeWE;
end else if (X>=WinControl.Width-Precision)
and (Y>Precision) and (Y<WinControl.Height-Precision) then begin
SC_MANIPULATE := $F002;
WinControl.Cursor := crSizeWE;
end else if (X>Precision)
and (X<WinControl.Width-Precision) and (Y<=Precision) then begin
SC_MANIPULATE := $F003;
WinControl.Cursor := crSizeNS;
end else if (X>Precision)
and (X<WinControl.Width-Precision) and (Y>=WinControl.Height-Precision) then begin
SC_MANIPULATE := $F006;
WinControl.Cursor := crSizeNS;
end else if (X<=Precision) and (Y<=Precision) then begin
SC_MANIPULATE := $F004;
WinControl.Cursor := crSizeNWSE;
end else if (X>=WinControl.Width-Precision) and (Y<=Precision) then begin
SC_MANIPULATE := $F005;
WinControl.Cursor := crSizeNESW ;
end else if (X<=Precision) and (Y>=WinControl.Height-Precision) then begin
SC_MANIPULATE := $F007;
WinControl.Cursor := crSizeNESW;
end else if (X>=WinControl.Width-Precision) and (Y>=WinControl.Height-Precision) then begin
SC_MANIPULATE := $F008;
WinControl.Cursor := crSizeNWSE;
end else if (X>5) and (Y>5) and (X<WinControl.Width-5)
and (Y<WinControl.Height-5) then begin
SC_MANIPULATE := $F009;
WinControl.Cursor := crSizeAll;
end else begin
SC_MANIPULATE := $F000;
WinControl.Cursor := crDefault;
end;

if Shift=[ssLeft] then begin
ReleaseCapture;
WinControl.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);
end;
end;
[/pascal]
如用方法很簡單,在元件的MouseMove裡加上
[pascal]
DragResizeControl((Sender as TWinControl),Shift,X,Y,10);
[/pascal]

FastReport 直接列印

FastReport 直接列印

[pascal]
frxreport1.LoadFromFile(‘報表檔案’);
frxreport1.Report.PrintOptions.Printer := ‘印表機名稱’;
// frxreport1.ShowReport(); //顯示報表
frxreport1.Report.PrintOptions.ShowDialog := false; // 不顯示對話框
frxreport1.Report.ShowProgress := False; // 不顯示列印進度
frxReport1.PrintOptions.Copies:=3; // 列印份數
frxreport1.Report.PrepareReport(true);
frxreport1.Print;
[/pascal]

Delphi XE5 仿Instagram 濾鏡功能for Android/iOS

http://i0.wp.com/www.fmxexpress.com/wp-content/uploads/2014/01/filtereffects.jpg

隨著智慧型手機的普及,以及手機照相功能日益強大。除了最常用的Facebook、Twitter等社交App外,以照片為主的社交App Instagram 也是許多人所喜愛的服務之一。

那Delphi XE5可不可以做類似的App呢?答案是可以的!在XE5的FireMonkey就支援許多影像的濾鏡了,再加上自己的巧思以及相關的技巧後,還可以透過XE5能同時跨Android/iOS平台的特性,快速的開發出Instagram Like的App了。

範例程式下載 http://www.fmxexpress.com/wp-content/uploads/2014/04/InstagramFilters.7z

延伸閱讀:

RAD Studio XE6 4月16日搶先看

4/16要Rad Studio Xe6要現身了,不知道跟Embarcadero之前的RoadMap是否一致。想到去年在盒子論壇看到對岸網友對XE6的猜想,大家還是對Embarcadero在文件上的完善程度不如MSDN頗有微詞。

 

報名網址: http://forms.embarcadero.com/RADXE6Webinar4-16?cid=701G0000000tP05

 

Delphi XE5讀出Android IMEI ID

首先要uses
[pascal]
uses
FMX.Platform.Android,
Androidapi.JNI.Telephony,
Androidapi.JNI.Provider ,
Androidapi.JNIBridge,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.JavaTypes,
FMX.Helpers.Android;
[/pascal]
接著放上Button,在Click事件打上
[pascal]
var
obj: JObject;
tm: JTelephonyManager;
IMEI: String;
begin
obj := SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
if obj <> nil then
begin
tm := TJTelephonyManager.Wrap( (obj as ILocalObject).GetObjectID );
if tm <> nil then
IMEI := JStringToString(tm.getDeviceId);
end;
if IMEI = ” then
IMEI := JStringToString(TJSettings_Secure.JavaClass.getString( SharedActivity.getContentResolver, TJSettings_Secure.JavaClass.ANDROID_ID));

ShowMessage(‘IMEI :’ + #13 + IMEI);

[/pascal]