Я рисую (большую) булеву таблицу (двоичные значения 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;