顯示具有 Delphi Multi-device App 標籤的文章。 顯示所有文章
顯示具有 Delphi Multi-device App 標籤的文章。 顯示所有文章

2021年12月8日 星期三

【Delphi Multi-Device Application】 拍照與分享

 畫面貼上
  TSpeedButton (拍照)
  TSpeedButton (分享)
  TActionList
  TImage (圖像)


【拍照】

ActionList -> New Standard Action ... -> TTablePhotoFromCameraAction

TablePhotoFromCameraAction -> OnDidFinishTaking 事件,將圖像填入Image1
Code: Image1.Assign(Image);

SpeedButton1.Action 指向 ActionList1.TaskPhotoFromCameraAction1做連動


分享

ActionList -> New Standard Action ... -> TShowShareSheetAction

ShareSheetAction1 -> OnDidFinishTaking 事件
Code: ShowShareSheetAction1.Bitmap.Assign(Image1.Bitmap);


SpeedButton2.Action 指向 ActionList1.ShowShareSheetAction1做連動


參考:https://www.shuzhiduo.com/A/ZOJPkygPzv/



2021年12月5日 星期日

【Delphi Multi-Device Application】 MultiView 側邊功能選單

 




MultiView.MasterButton 指定主功能鈕
MultiView.Mode 設定模式

參考:
Delphi LiveCode #08 - Criando um menu Estilo Window 10 com Delphi/Firemonkey

影片中 SpeedButton 在 MultiView 裡一併顯示圖示與文字,是StyleBook套用後呈現的效果。







2021年1月12日 星期二

【Delphi Multi-Device Application】 ScrollBox滑動效果設定

  with VertScrollBox do
  begin
    ShowScrollBars := False;
    //
    AniCalculations.BeginUpdate;
    AniCalculations.TouchTracking:=[ttVertical];
    AniCalculations.AutoShowing := True;
    AniCalculations.Animation := True;
    AniCalculations.BoundsAnimation := True;
    AniCalculations.Averaging := True;
    AniCalculations.EndUpdate;
  end;

2021年1月6日 星期三

【Delphi Multi-Device Application】 動態呼叫 日期選擇器

uses FMX.Platform, FMX.Pickers,  FMX.DateTimeCtrls;

procedure TForm1.Button2Click(Sender: TObject);
var
  PickerService: IFMXPickerService;
  FDateTimePicker: TCustomDateTimePicker;
begin
  TPlatformServices.Current.SupportsPlatformService(IFMXPickerService, PickerService);
  FDateTimePicker := PickerService.CreateDateTimePicker;
  FDateTimePicker.Parent := Button2;
  FDateTimePicker.ShowMode := TDatePickerShowMode.psmDate;
  FDateTimePicker.Date := Date;
  FDateTimePicker.TodayDefault := True;
  FDateTimePicker.PreferedDisplayIndex := Screen.DisplayFromPoint(Screen.MousePos).Index;
  FDateTimePicker.OnDateChanged := WhenDateChanged;
  FDateTimePicker.Show;
end;

procedure TForm1.WhenDateChanged(Sender: TObject; const ADate: TDateTime);
begin
  ShowMessage(DateTimeToStr(ADate));
end;

【Delphi Multi-Device Application】 顯示/隱藏 虛擬鍵盤

 uses FMX.VirtualKeyboard, FMX.Platform;

In the .dpr set VKAutoShowMode to Never

begin
  Application.Initialize;
  VKAutoShowMode := TVKAutoShowMode.Never;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end. 

Show soft keyboard on the form (for example on TEdit.OnEnter event):

var
  FService: IFMXVirtualKeyboardService;
begin
  TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
  if (FService <> nil) then
  begin
    FService.ShowVirtualKeyboard(Edit1);
    Edit1.SetFocus;
  end;
end;

Hide soft keyboard on the form (Edit1 will be still focused with hidden soft keyboard):

var
  FService: IFMXVirtualKeyboardService;
begin
  TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
  if (FService <> nil) then
  begin
    FService.HideVirtualKeyboard;
    Edit1.SetFocus;
  end;
end;

轉貼至 https://stackoverflow.com/questions/27402101/how-to-hide-and-again-show-soft-keyboard-while-tedit-is-in-focus-delphi-xe7

2020年12月15日 星期二

【Delphi Multi-Device Application】 SQLite掛載行動裝置的設定

我使用的是FDConnection 連接 SQLite,
首先FDConnection.DriverName選擇 SQLite,Params >  Database 選擇已建置好的SQLLite 資料庫

再配合 FDQuery 將資料取出反應在畫面的物件上,基本Application的架構這樣的設定就可以使用,要掛載到行動裝置需要再做以下的設定
Project > Deployment 設定發佈後SQLite的放置目錄,[Remote Path] 填入 assets\internal\ 
  • Remote Path on iOS Device platform: StartUp\Documents\
  • Remote Path on Android platform: assets\internal\

FDConnection BeforeConnection事件,在連線前變更讀取路徑

uses System.IOUtils;

procedure TForm1.FDConnection1BeforeConnect(Sender: TObject);
begin
{$IF DEFINED(iOS) or DEFINED(ANDROID)}
  FDConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'WorkShifts.db');
{$ENDIF}
end;

資料庫有使用到中文的部份,記得將 FDConnection.Params.StringFormat設定為 stUnicode,才會在行動裝置上正確的顯示。



2020年11月17日 星期二

【Delphi Rx Multi-Device】 Andriod 環境建置

Delphi RX安裝時出現的提示畫面

需要下載 Java Se Development Kit 7

選擇[Y]會開啟Java Download的網頁,網頁自然會優先將最新版本顯示在網頁上,下載最新版本的JDK不會被Delphi套用,必須下載訊息畫面中Java SE Development Kit7的版本,在Java Download網頁我選擇下載的是 Java SE Development Kit 7u80 的版本。

安裝完 Java JDK、Delphi RX後,在Delphi Rx 選單 Tools 點選 Options來設定SDK Manager

Options

SDK Manager會有一組已存在的SDK Version的選項,建議刪除預設的SDK Version。
新增SDK Version設定適應的執行環境




圖中(1)(2)參考範例找到對應的SDK及NDK路徑,圖中(3)會自動帶出 (如果安裝的SDK版本沒有被Delphi接受,不會被自動帶出,即使手動填入也無法完成設定)。

完成SDK Manager設定,即可順利編譯Multi-Device的專案。

編譯後出現 [Exec Error] the command "PATH C:\Program files......的錯誤訊息

複製訊息,剔除訊息左邊第一個雙引號左邊的字串,及訊息最後一個雙引號右邊的字串,貼到 命令提示字元 中執行,結果出現 Could not create the Java Virtual Machine的錯誤

系統內容環境變數 裡新增系統變數



變數名稱 _JAVA_OPTIONS
變數值 -Xmx512m



2020年11月11日 星期三

【Delphi Multi-Device Application】 觸控頁面滑動切換

 放置 [TabControl],並建立二個 [TabItem]TabControl.TabPosition屬性設置為None,如下圖

TabControl設定

放置 [ActionList],產生二個 ChangeTabAction,將Tab屬性分別對應到TabItem1、TabItem2
ActionList設定


放置 [GestureManager]
   TabControl.Touch選項
     GestureManager 指向 GestureManager1,
     Gestures → Standard觸控方向的動作,Left指向ChangeTabAction2,Right指向ChangeTabAction1。




2020年10月31日 星期六

【Delphi Multi-Device Application】 Button.Click 觸發頁面滑動切換

 放置 [TabControl],並建立二個 [TabItem]TabControl.TabPosition屬性設置為None,如下圖

TabControl設定

TabItem1裡放置 [Button1]TabItem2裡放置 [Button2] 做切換頁籤的觸發事件。

---------------------
Button1.OnClick
---------------------
  //滑動切換到第二個頁籤
  TabControl1.SetActiveTabWithTransition(Self.TabItem2, TTabTransition.Slide);

---------------------
Button2.OnClick
---------------------
  //滑動切換回第一個頁籤
  TabControl1.SetActiveTabWithTransition(Self.TabItem1, TTabTransition.Slide, TTabTransitionDirection.Reversed);