Mac은 우선 순위가 정수가 될 것으로 예상하지만 대신 열거 형 (Windows에서 작동) 유형이 지정되며 '잘못된 속성 값'오류가 발생합니다. 유일한 해결책은 런타임 중에 구성 요소를 만드는 것입니다.
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
FMX.StdCtrls, IdBaseComponent, IdThreadComponent;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
MyIdThreadComponent: TIdThreadComponent;
Procedure CreateThread;
procedure MyIdThreadComponentOnRunHandler(Sender: TIdThreadComponent);
procedure MyIdThreadComponentOnTerminateHandler(Sender: TIdThreadComponent);
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.MyIdThreadComponentOnRunHandler(Sender: TIdThreadComponent);
begin
ShowMessage('Hello');
MyIdThreadComponent.Terminate;
end;
procedure TForm1.MyIdThreadComponentOnTerminateHandler(Sender: TIdThreadComponent);
begin
Caption := 'Thread terminated';
end;
Procedure TForm1.CreateThread;
begin
MyIdThreadComponent := Form1.FindComponent('MyIdThreadComponent')
as TIdThreadComponent;
if not Assigned(MyIdThreadComponent) then
begin
MyIdThreadComponent := TIdThreadComponent.Create(Self);
MyIdThreadComponent.OnRun := MyIdThreadComponentOnRunHandler;
MyIdThreadComponent.OnTerminate := MyIdThreadComponentOnTerminateHandler;
{$IFDEF MSWINDOWS}
MyIdThreadComponent.Priority := tpNormal;
{$ENDIF}
{$IFDEF MACOS}
MyIdThreadComponent.Priority := 1;
{$ENDIF}
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyIdThreadComponent.Start;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateThread;
end;
end.