{$IF (CompilerVersion <= 25)} type //other name of constants in XE4 TStyledSettingHelper = record helper for TStyledSetting const Family = TStyledSetting.ssFamily; const Size = TStyledSetting.ssSize; const Style = TStyledSetting.ssStyle; const FontColor = TStyledSetting.ssFontColor; const Other = TStyledSetting.ssOther; end; TTextAlignHelper = record helper for TTextAlign const Center = TTextAlign.taCenter; const Leading = TTextAlign.taLeading; const Trailing = TTextAlign.taTrailing; end; TFmxFormBorderStyleHelper = record helper for TFmxFormBorderStyle const None = TFmxFormBorderStyle.bsNone; const Single = TFmxFormBorderStyle.bsSingle; const Sizeable = TFmxFormBorderStyle.bsSizeable; const ToolWindow = TFmxFormBorderStyle.bsToolWindow; const SizeToolWin = TFmxFormBorderStyle.bsSizeToolWin; end; TFormPositionHelper = record helper for TFormPosition //(poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly, //poScreenCenter, poDesktopCenter, poMainFormCenter, poOwnerFormCenter); const OwnerFormCenter = TFormPosition.poOwnerFormCenter; const ScreenCenter = TFormPosition.poScreenCenter; end; TBrushKindHelper = record helper for TBrushKind //(bkNone, bkSolid, bkGradient, bkBitmap, bkResource); const None = TBrushKind.bkNone; end; TAlignLayoutHelper = record helper for TAlignLayout //(alNone, alTop, alLeft, alRight, alBottom, alMostTop, alMostBottom, alMostLeft, alMostRight, alClient, //alContents, alCenter, alVertCenter, alHorzCenter, alHorizontal, alVertical, alScale, alFit, alFitLeft, alFitRight); const Top = TAlignLayout.alTop; end; {$IFEND} var _ScreenDPI_X : Single = 0; function ScalingByScreenDPI_N( F:TForm = NIL ):Single; var p : TPointF; {$IF (CompilerVersion >= 28)} M : TDeviceDisplayMetrics; {$IFEND} i : integer; h : THandle; begin if _ScreenDPI_X > 0 then begin Result := _ScreenDPI_X; Exit; end else Result := 1; {$IFDEF MSWINDOWS} if F <> NIL then begin h := GetWindowDC( WindowHandleToPlatform( F.Handle ).Wnd ); i := GetDeviceCaps( h, LOGPIXELSX ); if i >= 72 then begin Result := i / 96; _ScreenDPI_X := Result; Exit; end; end; {$ENDIF} {$IF (CompilerVersion >= 28)} //TDeviceDisplayMetrics is available since XE8 if TPlatformServices.Current.SupportsPlatformService( IFMXDeviceMetricsService ) then begin M := (TPlatformServices.Current.GetPlatformService( IFMXDeviceMetricsService) as IFMXDeviceMetricsService).GetDisplayMetrics; if M.PixelsPerInch >= 72 then Result := M.PixelsPerInch / {$IFDEF MACOS}110{$ENDIF} {$IFDEF MSWINDOWS}96{$ENDIF} ; end; {$IFEND} end; function ScalingByScreenDPI( F:TForm = NIL ):TPointF; begin Result.X := ScalingByScreenDPI_N(F); Result.Y := Result.X; end; procedure inc( var F:Single; D:Single ); overload; begin F := F+D; end; procedure dec( var F:Single; D:Single ); overload; begin F := F-D; end; function FMXMeasureText( s:string; C : TTextControl; MaxWidth : Single; WordWrap : boolean ):TRectF; var R : TRectF; begin if MaxWidth = 0 then MaxWidth := 2000; R := RectF( 0,0,MaxWidth,2000 ); C.StyledSettings := C.StyledSettings - [ TStyledSetting.Size ]; C.Canvas.Font.Assign( C.Font ); C.Canvas.MeasureText( R, s, WordWrap, [], TTextAlign.Leading, TTextAlign.Leading ); Result := R; end;