1

私は多くのフォームを持つプロジェクトを持っています。私はすべてのフォームでレイアウトを使用しています。

各フォームには、それらの間を移動するときの基本的に同じコード (以下を参照) があります。

Application.GotoForm('frmInventory', feFromRight);

向きを変更するまでは、すべてが素晴らしいです (たとえば、プロファイルからランドスケープに)。次に、レイアウトが台無しになります。

スクリーンショット 1スクリーンショット 2を参照してください。

コード例:

procedure TfrmMenu.frmMenuDeactivate(Sender: TObject);
begin
 fLayout:= nil;
end;


procedure TfrmMenu.frmMenuActivate(Sender: TObject);
begin
 fLayout:= Layout.Client([Layout.Top(fHeader),
                           Layout.Bottom(fFooter),
                           Layout.Client(fList)]);
end;


procedure TfrmMenu.Resize;
begin
  inherited;
   if assigned(FLayout) then
   begin
    fLayout.Resize(self)
   end;
end;

それは正しいです!なぜだろう。私は何が欠けていますか?向きの変化をどのように捉えますか?

- - - アップデート - - -

このサイトで検索すると、次の記事に出くわしました。

http://www.thedelphigeek.com/2012/02/detecting-device-movement.html

次に、このstackoverflowの回答につながりました:

AndroidでJavascriptを介して加速度計にアクセスしますか?

 if (window.DeviceMotionEvent == undefined) {
        //No accelerometer is present. Use buttons. 
        alert("no accelerometer");
    }
    else {
        alert("accelerometer found");
        window.addEventListener("devicemotion", accelerometerUpdate, true);
    }

SMSでは、これはそれを行うようです:

function window: variant; external 'window' property;

procedure TfrmItem.InitializeObject;
begin
  inherited;
  {$I 'Item:impl'}
  window.addEventListener('devicemotion', @Resize, false);
  .
  .
  .
end;

procedure TfrmItem.Resize;
begin
  inherited;
  if assigned(fLayout) then
  begin
    fLayout.Resize(self);
    ResizeControls;
  end;
end;
4

1 に答える 1

1

このサイトで検索すると、次の記事に出くわしました。

http://www.thedelphigeek.com/2012/02/detecting-device-movement.html

次に、このstackoverflowの回答につながりました:

AndroidでJavascriptを介して加速度計にアクセスしますか?

 if (window.DeviceMotionEvent == undefined) {
        //No accelerometer is present. Use buttons. 
        alert("no accelerometer");
    }
    else {
        alert("accelerometer found");
        window.addEventListener("devicemotion", accelerometerUpdate, true);
    }

SMSでは、これはそれを行うようです:

function window: variant; external 'window' property;

procedure TfrmItem.InitializeObject;
begin
  inherited;
  {$I 'Item:impl'}
  window.addEventListener('devicemotion', @Resize, false);
  .
  .
  .
end;

procedure TfrmItem.Resize;
begin
  inherited;
  if assigned(fLayout) then
  begin
    fLayout.Resize(self);
    ResizeControls;
  end;
end;
于 2016-12-29T00:31:58.507 に答える