Delphi 10 Berlin 在tabitem加上數字

tabbarcustom
[pascal]
interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.TabControl, FMX.Controls.Presentation, FMX.Edit,
FMX.EditBox, FMX.SpinBox, FMX.StdCtrls, FMX.Layouts, FMX.ListBox,
FMX.NumberBox;

type
TForm16 = class(TForm)
TabItem1: TTabItem;
TabItem2: TTabItem;
BadgeItem: TTabItem;
SpinBox1: TSpinBox;
ToolBar1: TToolBar;
Switch1: TSwitch;
ListBox1: TListBox;
ListBoxItem1: TListBoxItem;
ToolLabel: TLabel;
TabControl1: TTabControl;
procedure BadgeItemPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
procedure SpinBox1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Switch1Switch(Sender: TObject);
procedure StepperUpClick(Sender: TObject);
private
FBadge: Integer;
FShowBadge: Boolean;
procedure SetBadge(const Value: Integer);
procedure SetShowBadge(const Value: Boolean);
{ Private declarations }
public
{ Public declarations }
property Badge: Integer read FBadge write SetBadge;
property ShowBadge: Boolean read FShowBadge write SetShowBadge;
end;

var
Form16: TForm16;

implementation

{$R *.fmx}
{$R *.iPhone55in.fmx IOS}

procedure DrawBadge(Canvas: TCanvas; const ARect: TRectF; const Text: string;
const Color: TAlphaColor = TAlphaColorRec.Red);
const
Padding = 2;
HorzTextMargin = 6;
VertTextMargin = 4;
var
R: TRectF;
TextSize: TSizeF;
Brush: TBrush;
BadgeRadius: Single;
begin
Canvas.Font.Size := 12;
// Measure text width
TextSize := TSizeF.Create(Canvas.TextWidth(Text), Canvas.TextHeight(Text));
// Calculate badge rect
R := TRectF.Create(0, 0, HorzTextMargin * 2 + TextSize.Width, VertTextMargin * 2 + TextSize.Height);
if R.Width < R.Height then
R.Width := R.Height;
// Position rect
R := TRectF.Create(ARect.Right – R.Width, ARect.Top, ARect.Right, ARect.Top + R.Height);
R.Offset(-Padding, Padding);
// Draw badge
BadgeRadius := R.Height / 2;
Brush := TBrush.Create(TBrushKind.Solid, Color);
try
Canvas.FillRect(R, BadgeRadius, BadgeRadius, AllCorners, 1, Brush);
finally
Brush.Free;
end;
// Draw text
Canvas.Fill.Color := TAlphaColorRec.White;
Canvas.FillText(R, Text, False, 1, [], TTextAlign.Center, TTextAlign.Center);
end;

procedure TForm16.BadgeItemPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
begin
if ShowBadge then
DrawBadge(Canvas, ARect, FBadge.ToString);
end;

procedure TForm16.FormCreate(Sender: TObject);
begin
FBadge := 1;
end;

procedure TForm16.SetBadge(const Value: Integer);
begin
if FBadge Value then
begin
FBadge := Value;
BadgeItem.Repaint;
end;
end;

procedure TForm16.SetShowBadge(const Value: Boolean);
begin
if FShowBadge Value then
begin
FShowBadge := Value;
BadgeItem.Repaint;
end;
end;

procedure TForm16.SpinBox1Change(Sender: TObject);
begin
Badge := Trunc(SpinBox1.Value);
end;

procedure TForm16.StepperUpClick(Sender: TObject);
begin
Badge := Trunc(SpinBox1.Value);
end;

procedure TForm16.Switch1Switch(Sender: TObject);
begin
ShowBadge := Switch1.IsChecked;
end;

end.
[/pascal]
原始資料:https://community.embarcadero.com/blogs?view=entry&id=9074

Delphi Berlin跨平台條件編譯(Conditional compilation)

Delphi Berlin可以在不同平台裝置上執行,那程式可以依不同平台裝置跑嗎?
答案是可行的~只要透過條件編譯就可以了 範例如下

   {$IFDEF MSWINDOWS}
   LABEL1.Text := Label1.Text + '(電腦版)';
   {$ENDIF}
   {$IFDEF ANDROID}
   LABEL1.Text := Label1.Text + '(安卓版)';

   {$ENDIF}
   {$IFDEF OSX}
   LABEL1.Text := Label1.Text + '(MAC版)';

   {$ENDIF}
   {$IFDEF IOS}
   LABEL1.Text := Label1.Text + '(IOS版)';

   {$ENDIF}

Embarcadero免費REST除錯工具REST Debugger

REST Debugger這個工具是Embarcadero公司免費釋放給開發REST相關服務的工程師做為測試、除錯用的工具。例如我們想從Sonsterr這個網站取得吉他譜~
一、從Songsterr的API網址
https://www.songsterr.com/a/wa/api

從裡面知道http://www.songsterr.com/a/ra/ 後面帶songs.json即可

二、開啟REST Debugger

將http://www.songsterr.com/a/ra 填入url

RESTDebugger01

進入Parameters頁籤,在Resource填入songs.json,接著按Add按鈕,填入Name pattern value:伍佰,然後按apply確認

RESTDebugger02

最後按Send request按鈕取得內容即可

RESTDebugger03

下載網址: https://www.embarcadero.com/free-tools/rest-debugger

Delphi 10 在Android、iOS取得內部IP方式

在寫應用程式時,常常需要知道機器的IP是什麼!答案相當簡單~只要拉出IdIPWatch這個元件
然後透過 IdIPWatch裡的LocalIP這個屬性就可以了!
相較於以前要透過Winsock來撰寫!一整個方便多了~更重要的是可以同時在Windows/Mac跟iOS/Android上面跑~

能取代parse服務的台灣MBaas平台-Lightspeed

Facebook收購國外著名的MBaaS(行動雲端平台)服務 Parse後,前幾天無預警的宣布一年後將關閉服務。也讓大家開始尋找新的MBaaS(行動雲端平台)服務,希望能為企業App加入推播、即時通訊、社交功能,來加速開發流程。
尋找解決方案中,看到台灣在2014年就有赫迅這家公司,提供了Lightspeed這個服務。包辦複雜的後端架構,而且提供推播、即時通訊以及社群互動功能加入app。
lightspeed01
目前該服務已經服務的客戶有許多知名的公司及媒體如Sony、遠傳電信、蘋果日報、蘋果動新聞、壹週刊網、窮游、海底撈火鍋、ump聯動優勢、csdn、中國銀聯。
lightspeed02
目前的申請方式需先至服務的申請頁面,然後填寫表單後核准。
lightspeed03
核准後會收到一封裡面有beta code的邀請函,然後註冊後就可以試用。
lightspeed04

lightspeed05

lightspeed06

相關聯結:
Lightspeed官方網站
sdk說明文件
試用申請
Lightspeed Admin Console
主控台

Delphi 10 Seattle隆重登場

很久沒更新近況了!最近Embarcadero出了Delphi 10 Seattle,主要是針對行動裝置/PC以及IOT物聯網。

到時候再來分享一下

1442335478407

另一件事在設計電子發票,當然圖片中少了CODE39的條碼啦XDD

11205488_10152975552941541_8585917734032493888_n