« FireMonkey小ネタ5つ(未解決ネタも含む) | トップページ | FireMonkeyでのショートカット(Windows) »

2011年10月15日 (土)

FireMonkey小ネタ その2

昨日の記事、一つ問題が解決したので更新しました

昨日書こうと思ってたのに忘れてた小ネタを2つ追加。
調べればすぐにわかる情報ですが、FireMonkey向けの情報として一か所にまとまっていることにも意味があると思うので掲載。

6.TControl.ClientToScreen(), TControl.ScreenToClient()の代わり
FireMonkeyの場合、LocalToScreen()とScreenToLocal()が該当の機能です。・・・が、なぜかprotectedメンバーなので外部からアクセスできません。
・・・ですが、IControlのメソッドなのでコントロールをIControlでキャストすればアクセスできます。
screen := (ctrl as IControl).localToScreen(local);
や
local := (ctrl as IControl).ScreenToLocal(screen);
みたいな感じ
こういうVCLと同じ機能は名前もアクセス指定子もVCL準拠にして欲しかった。
何か意図するところがあるんでしょうけど。


7.マウスカーソル位置の取得・変更
マウス位置はPlatform.GetMousePos()で取得可能ですが、マウス位置を変更する方法が用意されていません。
マウス位置を変更するアプリは行儀が悪いってのは置いておいて、たまにやりたくなるのでこんなクラスを作りました。
unit FMXMouse;

interface
uses
  System.Types, FMX.Platform
{$ifdef MSWINDOWS}
  ,Winapi.Windows
{$endif}
{$ifdef MACOS}
  ,Macapi.CoreGraphics, Macapi.CocoaTypes
{$endif}
  ;

type
  TMouse = class
  public
    procedure SetCursorPos(const point : TPointF);
    function  GetCursorPos: TPointF;

    property CursorPos : TPointF read GetCursorPos write SetCursorPos;
  end;

var
  Mouse : TMouse = nil;

implementation


{ TMouse }

{$ifdef MACOS}
procedure TMouse.SetCursorPos(const point: TPointF);
var
  cgpoint : NSPoint;
begin
  cgpoint.x := point.X;
  cgpoint.y := point.Y;
  CGWarpMouseCursorPosition(cgpoint);
end;
{$endif}

{$ifdef MSWINDOWS}
procedure TMouse.SetCursorPos(const point: TPointF);
begin
  Winapi.Windows.SetCursorPos(round(point.X), round(point.Y));
end;
{$endif}

function TMouse.GetCursorPos: TPointF;
begin
  result := Platform.GetMousePos;
end;

initialization

  Mouse := TMouse.Create;

finalization

  Mouse.Free;

end.
ユニット名、クラス名などはお好きにどうぞ。
マウス座標なのでTPointでも良いのですが、FireMonkey内ではTPointFが使われることが多いのでTPointFで座標を返すようにしました

|

« FireMonkey小ネタ5つ(未解決ネタも含む) | トップページ | FireMonkeyでのショートカット(Windows) »

プログラミング」カテゴリの記事

Delphi」カテゴリの記事

FireMonkey/Delphi XE2」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: FireMonkey小ネタ その2:

« FireMonkey小ネタ5つ(未解決ネタも含む) | トップページ | FireMonkeyでのショートカット(Windows) »