Я рисую (большую) логическую таблицу (двоичные значения 0,1 в большой сетке) с помощью PaintBox. Как в коде ниже. Примечание. Код упрощен, для представления проблемы рисуются только случайные 0 и 1. Также я обновил вопрос полным кодом, поскольку комментатор заявил, что первоначальный вопрос был расплывчатым.
Использование FillText для рисования (сотни) отдельных двоичных значений (0 или 1) оказалось МЕДЛЕННЫМ! Кроме того, при частом панорамировании PaintBox приложение зависало и принудительно закрывалось на устройстве Android.
Итак, очевидно, что FillText недостаточно для этого случая, и вам интересно, знает ли кто-нибудь о лучшей технике?
procedure TMainWin.PaintBoxPaint(Sender: TObject; Canvas: TCanvas);
VAR Fcstroke:TStrokeBrush;
xp,yp,Tsze:INTEGER;
tw,th:SINGLE;
p1,p2:TPointF;
MyRect:TRectF;
begin
Canvas.BeginScene;
// Clear
Canvas.Clear(TAlphaColorRec.Beige);
Canvas.Fill.Color:= TAlphaColorRec.Black;
Canvas.Fill.Kind:= TBrushKind.Solid;
// Text Prop
Canvas.Font.Family:= 'Roboto';
Canvas.Font.Style:= [];
Canvas.Font.Size:= 40;
Canvas.Stroke.Thickness:= 2;
Canvas.Stroke.Kind:= TBrushKind.Solid;
Canvas.Stroke.DefaultColor:= TAlphaColorRec.Black;
tw:= Canvas.TextWidth('0')*1.2;
th:= Canvas.TextHeight('0');
Fcstroke:= TStrokeBrush.Create(TBrushKind.Solid,TAlphaColorRec.Green);
Fcstroke.DefaultColor:= TAlphaColorRec.Green;
Fcstroke.Thickness:= 2;
// Table
Tsze:= 50;
FOR yp:= 1 TO Tsze DO
BEGIN
// Horz table Line
p1:= TPointF.Create( tw,yp*th);
p2:= TPointF.Create((Tsze+1)*tw,yp*th);
Canvas.DrawLine(p1,p2,1,Fcstroke);
// Vert table Line
p1:= TPointF.Create(yp*tw, th);
p2:= TPointF.Create(yp*tw,(Tsze+1)*th);
Canvas.DrawLine(p1,p2,1,Fcstroke);
// Text
FOR xp:= 1 TO Tsze DO
BEGIN
MyRect:= TRectF.Create(xp*tw,yp*th,xp*tw+tw,yp*th+th);
IF (Random(10)>5) THEN
Canvas.FillText(MyRect,'0',False,100,[],TTextAlign.Center,TTextAlign.Center)
ELSE
Canvas.FillText(MyRect,'1',False,100,[],TTextAlign.Center,TTextAlign.Center);
END;
END;
// End
Canvas.EndScene;
end;