android: initial work on button click

git-svn-id: trunk@31929 -
This commit is contained in:
sekelsenmat 2011-08-10 13:44:36 +00:00
parent d9dfbdb699
commit 633c24d840
3 changed files with 65 additions and 26 deletions

View File

@ -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;

View File

@ -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

View File

@ -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;