diff --git a/lcl/interfaces/android/android_all.pas b/lcl/interfaces/android/android_all.pas index f0456a6e06..74834de181 100644 --- a/lcl/interfaces/android/android_all.pas +++ b/lcl/interfaces/android/android_all.pas @@ -159,18 +159,15 @@ type constructor Create(); end; -function HandleMessage(AFirstInt: Integer): Boolean; - -implementation - const { Constants } - { TDisplayMetrics } { TDisplay } { TWindowManager } { TViewGroup_LayoutParams } FILL_PARENT = $FFFFFFFF; + MATCH_PARENT = $FFFFFFFF; + WRAP_CONTENT = $FFFFFFFE; { TView } VISIBLE = 0; INVISIBLE = 4; @@ -193,6 +190,11 @@ const { TAbsSpinner } { TSpinner } +function HandleMessage(AFirstInt: Integer): Boolean; + +implementation + +const { IDs } // TDisplayMetrics @@ -226,9 +228,9 @@ const amkUI_TTextView_Create = $0010A000; amkUI_TTextView_setText = $0010A001; amkUI_TTextView_setOnClickListener = $0010A002; - amkUI_TTextView_OnClickListener_Start = $0010A002; - amkUI_TTextView_OnClickListener_Finished = $0010A002; - amkUI_TTextView_setTextSize = $0010A002; + amkUI_TTextView_OnClickListener_Start = $0010A003; + amkUI_TTextView_OnClickListener_Finished = $0010A004; + amkUI_TTextView_setTextSize = $0010A005; // TEditText amkUI_TEditText_Create = $0010B000; amkUI_TEditText_setText = $0010B001; diff --git a/lcl/interfaces/android/androidpipescomm.pas b/lcl/interfaces/android/androidpipescomm.pas index 207af109e0..6970e1b413 100644 --- a/lcl/interfaces/android/androidpipescomm.pas +++ b/lcl/interfaces/android/androidpipescomm.pas @@ -141,14 +141,8 @@ begin begin lInt := ReadInt(); // Android Message subtype android_all.HandleMessage(lInt); -{ case lInt of - amkUI_TextView_OnClickCallback_Start: - begin - lPascalPointer := ReadInt(); - TTextView(lPascalPointer).callOnClickListener(); - vAndroidPipesComm.SendMessage(amkUICommand, amkUI_TextView_OnClickCallback_Finished); - end; - amkUI_MenuItem_setOnMenuItemClickListener_Start: + case lInt of +{ amkUI_MenuItem_setOnMenuItemClickListener_Start: begin lInt := ReadInt(); lMenuItem := TMenuItem(FindItemIdInList(MenuItems, lInt)); @@ -156,8 +150,8 @@ begin lInt := lMenuItem.callOnMenuItemClickListener(); vAndroidPipesComm.SendMessage(amkUICommand, amkUI_MenuItem_setOnMenuItemClickListener_Finished); vAndroidPipesComm.SendInt(lInt); - end; - end; } + end;} + end; end; amkTimer: // A Timer Callback begin diff --git a/lcl/interfaces/android/androidprivate.pas b/lcl/interfaces/android/androidprivate.pas index e6801c2663..365da9b846 100644 --- a/lcl/interfaces/android/androidprivate.pas +++ b/lcl/interfaces/android/androidprivate.pas @@ -37,11 +37,14 @@ uses type TAndroidComboBoxStrings = class; + { TAndroidView } + TAndroidView = class public LCLObject: TWinControl; ParentGroupView: TViewGroup; MainView: TView; + function DeliverMessage(var Msg; const AIsInputEvent: Boolean = False): LRESULT; end; TAndroidViewGroup = class(TAndroidView) @@ -67,6 +70,7 @@ type params: TAbsoluteLayout_LayoutParams; constructor Create(const AObject: TCustomButton; const AParams: TCreateParams); destructor Destroy; override; + procedure buttonClickCallback(v: TView); end; { TAndroidCheckBox } @@ -141,6 +145,31 @@ type implementation +{ TAndroidView } + +function TAndroidView.DeliverMessage(var Msg; const AIsInputEvent: Boolean + ): LRESULT; +begin + Result := LRESULT(AIsInputEvent); + if LCLObject = nil then Exit; + + try + if LCLObject.HandleAllocated then + begin + LCLObject.WindowProc(TLMessage(Msg)); + Result := TLMessage(Msg).Result; + end; + except + {if AIsInputEvent and (LCLObject = nil) and (PtrUInt(Widget) = 0) and + QtWidgetSet.IsValidHandle(HWND(Self)) then + begin + raise Exception.CreateFmt('%s.DeliverMessage(): error in input event %d ', + [ClassName, TLMessage(Msg).Msg]); + end else} + Application.HandleException(nil); + end; +end; + { TAndroidComboBoxStrings } procedure TAndroidComboBoxStrings.Put(Index: Integer; const S: string); @@ -204,7 +233,7 @@ begin spinner := android_all.TSpinner.Create; MainView := spinner; - params := TAbsoluteLayout_LayoutParams.Create(AObject.Width, AObject.Height, AObject.Left, AObject.Top); + params := TAbsoluteLayout_LayoutParams.Create(AObject.Width, WRAP_CONTENT, AObject.Left, AObject.Top); ParentGroupView.addView(MainView, TViewGroup_LayoutParams(params)); params.Free; end; @@ -228,7 +257,7 @@ begin MainView := textview; Str := AObject.Caption; textview.setText(Str); - params := TAbsoluteLayout_LayoutParams.Create(AObject.Width, AObject.Height, AObject.Left, AObject.Top); + params := TAbsoluteLayout_LayoutParams.Create(AObject.Width, WRAP_CONTENT, AObject.Left, AObject.Top); ParentGroupView.addView(MainView, TViewGroup_LayoutParams(params)); params.Free; end; @@ -252,7 +281,7 @@ begin MainView := checkbox; Str := AObject.Caption; checkbox.setText(Str); - params := TAbsoluteLayout_LayoutParams.Create(AObject.Width, AObject.Height, AObject.Left, AObject.Top); + params := TAbsoluteLayout_LayoutParams.Create(AObject.Width, WRAP_CONTENT, AObject.Left, AObject.Top); ParentGroupView.addView(MainView, TViewGroup_LayoutParams(params)); params.Free; end; @@ -264,12 +293,17 @@ end; function TAndroidCheckBox.GetState: TCheckBoxState; begin - + if checkbox.isChecked() then Result := cbChecked + else Result := cbUnchecked; end; procedure TAndroidCheckBox.SetState(const AState: TCheckBoxState); begin - + case AState of + cbUnchecked: checkbox.setChecked(False); + cbChecked: checkbox.setChecked(True); + cbGrayed: checkbox.setChecked(True);// Android does not support cbGrayed + end; end; { TAndroidEdit } @@ -286,7 +320,7 @@ begin MainView := edittext; Str := AObject.Caption; edittext.setText(Str); - params := TAbsoluteLayout_LayoutParams.Create(AObject.Width, AObject.Height, AObject.Left, AObject.Top); + params := TAbsoluteLayout_LayoutParams.Create(AObject.Width, WRAP_CONTENT, AObject.Left, AObject.Top); ParentGroupView.addView(MainView, TViewGroup_LayoutParams(params)); params.Free; end; @@ -310,8 +344,8 @@ begin MainView := btn; Str := AObject.Caption; btn.setText(Str); -// btn.setOnClickListener(buttonClickCallback); - params := TAbsoluteLayout_LayoutParams.Create(AObject.Width, AObject.Height, AObject.Left, AObject.Top); + btn.setOnClickListener(@buttonClickCallback); + params := TAbsoluteLayout_LayoutParams.Create(AObject.Width, WRAP_CONTENT{AObject.Height}, AObject.Left, AObject.Top); ParentGroupView.addView(MainView, TViewGroup_LayoutParams(params)); params.Free; end; @@ -321,6 +355,15 @@ begin inherited Destroy; end; +procedure TAndroidButton.buttonClickCallback(v: TView); +var + Msg: TLMessage; +begin + FillChar(Msg, SizeOf(Msg), #0); + Msg.Msg := LM_CLICKED; + DeliverMessage(Msg); +end; + { TCarbonWidget } constructor TAndroidWindow.Create(const AObject: TCustomForm;