FireMonkey小ネタ その2
昨日の記事、一つ問題が解決したので更新しました
昨日書こうと思ってたのに忘れてた小ネタを2つ追加。
調べればすぐにわかる情報ですが、FireMonkey向けの情報として一か所にまとまっていることにも意味があると思うので掲載。
6.TControl.ClientToScreen(), TControl.ScreenToClient()の代わり
FireMonkeyの場合、LocalToScreen()とScreenToLocal()が該当の機能です。・・・が、なぜかprotectedメンバーなので外部からアクセスできません。
・・・ですが、IControlのメソッドなのでコントロールをIControlでキャストすればアクセスできます。
何か意図するところがあるんでしょうけど。
7.マウスカーソル位置の取得・変更
マウス位置はPlatform.GetMousePos()で取得可能ですが、マウス位置を変更する方法が用意されていません。
マウス位置を変更するアプリは行儀が悪いってのは置いておいて、たまにやりたくなるのでこんなクラスを作りました。
マウス座標なのでTPointでも良いのですが、FireMonkey内ではTPointFが使われることが多いのでTPointFで座標を返すようにしました
昨日書こうと思ってたのに忘れてた小ネタを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でのショートカット(Windows)(2011.10.21)
- FireMonkey小ネタ その2(2011.10.15)
- FireMonkey小ネタ5つ(未解決ネタも含む)(2011.10.14)
- FireMonkey TPopupを使いやすくする(2011.10.11)
- FireMonkey/OSX メニューアイテムのショートカット(2011.10.02)
「Delphi」カテゴリの記事
- FireMonkeyでのショートカット(Windows)(2011.10.21)
- FireMonkey小ネタ その2(2011.10.15)
- FireMonkey小ネタ5つ(未解決ネタも含む)(2011.10.14)
- FireMonkey TPopupを使いやすくする(2011.10.11)
- FireMonkey/OSX メニューアイテムのショートカット(2011.10.02)
「FireMonkey/Delphi XE2」カテゴリの記事
- FireMonkeyでのショートカット(Windows)(2011.10.21)
- FireMonkey小ネタ その2(2011.10.15)
- FireMonkey小ネタ5つ(未解決ネタも含む)(2011.10.14)
- FireMonkey TPopupを使いやすくする(2011.10.11)
- FireMonkey/OSX メニューアイテムのショートカット(2011.10.02)
この記事へのコメントは終了しました。
コメント