105 lines
2.5 KiB
ObjectPascal
105 lines
2.5 KiB
ObjectPascal
|
{**********************************************}
|
||
|
{ }
|
||
|
{ FastScript v1.9 }
|
||
|
{ Menus }
|
||
|
{ }
|
||
|
{ Copyright (c) 1998-2011 }
|
||
|
{ by Fast Reports Inc. }
|
||
|
{ }
|
||
|
{**********************************************}
|
||
|
|
||
|
unit FMX.fs_imenusrtti;
|
||
|
|
||
|
interface
|
||
|
|
||
|
{$I fs.inc}
|
||
|
|
||
|
uses
|
||
|
System.SysUtils, System.Classes, FMX.Menus, FMX.fs_iinterpreter, FMX.fs_ievents, System.Types, System.Variants, FMX.Types;
|
||
|
|
||
|
type
|
||
|
{$i frxPlatformsAttribute.inc}
|
||
|
|
||
|
TfsMenusRTTI = class(TComponent); // fake component
|
||
|
|
||
|
implementation
|
||
|
|
||
|
type
|
||
|
TFunctions = class(TfsRTTIModule)
|
||
|
private
|
||
|
function CallMethod(Instance: TObject; ClassType: TClass; const MethodName:
|
||
|
string; Caller: TfsMethodHelper): Variant;
|
||
|
public
|
||
|
constructor Create(AScript: TfsScript); override;
|
||
|
end;
|
||
|
|
||
|
constructor TFunctions.Create(AScript: TfsScript);
|
||
|
begin
|
||
|
inherited Create(AScript);
|
||
|
|
||
|
with AScript do
|
||
|
begin
|
||
|
|
||
|
AddType('TPopupAlignment', fvtInt);
|
||
|
|
||
|
|
||
|
with AddClass(TMenuItem, 'TTextControl') do
|
||
|
begin
|
||
|
AddMethod('procedure Popup', CallMethod);
|
||
|
AddMethod('procedure NeedPopup', CallMethod);
|
||
|
AddMethod('function HavePopup: Boolean', CallMethod);
|
||
|
end; { with }
|
||
|
|
||
|
with AddClass(TMainMenu, 'TFmxObject') do
|
||
|
with AddClass(TMenuBar, 'TStyledControl') do
|
||
|
AddMethod('procedure StartMenuLoop', CallMethod);
|
||
|
|
||
|
with AddClass(TPopupMenu, 'TFmxObject') do
|
||
|
AddMethod('procedure Popup(X, Y: Single)', CallMethod);
|
||
|
|
||
|
end; { with }
|
||
|
|
||
|
end; { Create }
|
||
|
|
||
|
function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const
|
||
|
MethodName: string; Caller: TfsMethodHelper): Variant;
|
||
|
var
|
||
|
oMenuItem: TMenuItem;
|
||
|
begin
|
||
|
Result := 0;
|
||
|
|
||
|
if ClassType = TMenuItem then
|
||
|
begin
|
||
|
|
||
|
oMenuItem := TMenuItem(Instance);
|
||
|
|
||
|
if MethodName = 'POPUP' then
|
||
|
oMenuItem.Popup
|
||
|
else if MethodName = 'NEEDPOPUP' then
|
||
|
oMenuItem.NeedPopup
|
||
|
else if MethodName = 'HAVEPOPUP' then
|
||
|
Result := oMenuItem.HavePopup;
|
||
|
|
||
|
end
|
||
|
else if ClassType = TPopupMenu then
|
||
|
begin
|
||
|
|
||
|
if MethodName = 'POPUP' then
|
||
|
TPopupMenu(Instance).Popup(Caller.Params[0], Caller.Params[1]);
|
||
|
|
||
|
end;
|
||
|
end; { CallMethod }
|
||
|
|
||
|
initialization
|
||
|
StartClassGroup(TFmxObject);
|
||
|
ActivateClassGroup(TFmxObject);
|
||
|
GroupDescendentsWith(TfsMenusRTTI, TFmxObject);
|
||
|
fsRTTIModules.Add(TFunctions);
|
||
|
|
||
|
|
||
|
finalization
|
||
|
fsRTTIModules.Remove(TFunctions);
|
||
|
|
||
|
end.
|
||
|
|