Me gustaría obtener el ancho del texto de una cadena antes de que comience la aplicación. Todo funciona bien hasta que aparezca el lienzo Application.MainForm. El problema es que cuando intento crear dinámicamente TOrdinarium en el evento OnCreate de la aplicación. forma principal, se produce el error "El lienzo no permite dibujar". (Application.MainForm es nulo ...). Intenté varias formas de crear Canvas de forma dinámica (una de ellas está escrita debajo), pero no puede medir el tamaño del texto sin estar conectado al control parentelado.¿Cómo obtener TextWidth de cadena (sin Canvas)?
¿Hay alguna manera de hacerlo funcionar de alguna manera?
Gracias
yo probamos este:
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;
Aunque no estoy seguro de si cumple su problema, debo admitirlo. En general, sin embargo, crear bitmaps fuera de la pantalla puede ayudarte. –
Mapa de bits ... qué diablos solución simple ... lástima de mí ... Gracias – lyborko
Lo único que debe recordar con esto es inicializar correctamente la propiedad de la fuente del lienzo de mapa de bits (en ausencia de una fuente inicializada en algunos visual componente para "tomar prestado"), de lo contrario, la extensión del texto informada carecerá de sentido. – Deltics