Vorrei ottenere la larghezza del testo di una stringa prima dell'avvio di un'applicazione. Tutto funziona bene fino alla presenza di canvas Application.MainForm. Il problema è che quando provo a creare dinamicamente TOrdinarium nell'evento OnCreate dell'applicazione. forma principale, si verifica un errore "Canvas non consente di disegnare". (Application.MainForm è nullo ....). Ho provato diversi modi per creare Canvas in modo dinamico (uno di questi è scritto sotto), ma non può misurare le dimensioni del testo senza essere collegato al controllo genitore.Come ottenere TextWidth della stringa (senza Canvas)?
C'è modo di farlo funzionare in qualche modo?
Thanx
ho provato questo:
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;
Anche se non sono sicuro che questo aggiunga il tuo problema, devo ammettere. In generale, tuttavia, la creazione di bitmap fuori schermo può essere di aiuto. –
Bitmap ... che diavolo semplice soluzione ... vergogna per me ... Grazie – lyborko
L'unica cosa da ricordare con questo è inizializzare correttamente la proprietà font della tela bitmap (in assenza di un font inizializzato su alcuni visual componente da "prendere in prestito" da), altrimenti l'estensione del testo riportata sarà piuttosto priva di significato. – Deltics