Here's my new attempt:
FMX:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 305
ClientWidth = 333
FormFactor.Width = 1920
FormFactor.Height = 1080
FormFactor.Devices = [dkDesktop]
DesignerMobile = False
DesignerWidth = 0
DesignerHeight = 0
DesignerDeviceName = ''
DesignerOrientation = 0
DesignerOSVersion = ''
object Memo1: TMemo
Touch.InteractiveGestures = [igPan, igLongTap, igDoubleTap]
Anchors = [akLeft, akTop, akRight]
Height = 257.000000000000000000
Position.X = 8.000000000000000000
Position.Y = 8.000000000000000000
TabOrder = 0
Width = 312.000000000000000000
Lines.Strings = (
'Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 L' +
'ine 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 Line 1 '
'Line 2 Line 2 Line 2 Line 2 Line 2 '
''
'Line 4'
'Line 5 Line 5 Line 5 Line 5 Line 5 Line 5 Line 5 Line 5 Line 5 L' +
'ine 5 Line 5 Line 5 Line 5 Line 5 Line 5 Line 5 Line 5 Line 5 Li' +
'ne 5 Line 5 Line 5 Line 5 Line 5 Line 5 Line 5 Line 5 Line 5 Lin' +
'e 5 Line 5 Line 5 Line 5 Line 5 ')
Font.Family = 'Arial'
WordWrap = True
end
object Button1: TButton
Anchors = [akLeft, akTop, akRight]
Height = 22.000000000000000000
Position.X = 8.000000000000000000
Position.Y = 272.000000000000000000
TabOrder = 1
Text = 'Show Line Count'
Width = 312.000000000000000000
OnClick = Button1Click
end
object Memo3: TMemo
Touch.InteractiveGestures = [igPan, igLongTap, igDoubleTap]
Height = 50.000000000000000000
Position.X = 176.000000000000000000
Position.Y = 184.000000000000000000
TabOrder = 2
Visible = False
Width = 100.000000000000000000
Lines.Strings = (
'1')
end
end
PAS:
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.Layouts,
FMX.Memo, FMX.Text, FMX.StdCtrls, FMX.TextLayout;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Memo3: TMemo;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
layout: TTextLayout;
cont, LineHeight : real;
begin
cont := 0;
layout:= TTextLayout(memo3.Lines.Objects[0]);
LineHeight := layout.TextHeight;
for i:= 0 to memo1.Lines.Count-1 do
begin
layout:= TTextLayout(memo1.Lines.Objects[i]);
if Assigned(layout) then
begin
cont := cont + (layout.TextHeight / LineHeight);
end;
end;
showmessage('Line count according to firemonkey: ' + inttostr(memo1.Lines.Count));
showmessage('Real line count: ' + VarToStr(cont));
end;
end.
Hope it Helps.
DrawTextEx
with theDT_CALC_RECT
flag? – Jerry Dodge