Как получить TextWidth строки (без Холста)?

Я хотел бы получить текстовую ширину строки, прежде чем приложение запустится. Все хорошо работает до Приложения. Существующий холст MainForm. Проблема, когда я пробую, динамично создают TOrdinarium в событии OnCreate приложения. основная форма, "Холст не позволяет тянуть" ошибку, происходит. (Приложение. MainForm является нолем....). Я попробовал несколько способов создать Холст динамично (один из них записан ниже), но он не может измерить размеры текста, не будучи присоединенным к порожденному управлению.

Есть ли путь, как заставить его работать так или иначе?

Спасибо

Я попробовал это:

  TOrdinarium = class (TCustomControl)
    private 
       function GetVirtualWidth:integer;
    end;

constructor TOrdinarium.Create(AOwner:TComponent);
begin
 inherited;
 Width:=GetVirtualWidth;
end; 

function TOrdinarium.GetVirtualWidth:integer;
var  ACanvas : TControlCanvas;
  begin
  ACanvas := TControlCanvas.Create;
  TControlCanvas(ACanvas).Control := Application.MainForm; 
  ACanvas.Font.Assign(Font);

  result:=ACanvas.TextWidth('0');

  ACanvas.Free;
  end;
16
задан Bruce McGee 30 March 2010 в 21:27
поделиться

2 ответа

Это работает:

procedure TForm1.FormCreate(Sender: TObject);
var
  c: TBitmap;
begin
  c := TBitmap.Create;
  try
    c.Canvas.Font.Assign(self.Font);
    Caption := IntToStr(c.Canvas.TextWidth('My String'));
  finally
    c.Free;
  end;
end;
35
ответ дан 30 November 2019 в 16:57
поделиться

Я не уверен, что это можно сделать, но если под "до запуска приложения" вы подразумеваете "до отображения главной формы", вы всегда можете поместить код, связанный с холстом, в событие OnCreate главной формы. К этому моменту у вас уже будет действующий холст.

0
ответ дан 30 November 2019 в 16:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: