Bir uygulama başlamadan önce bir dizenin metin genişliğini almak istiyorum. Her şey, Application.MainForm'un tuvalini sunana kadar iyi çalışıyor. Sorun, uygulamanın OnCreate olayında dinamik olarak TOrdinarium'u oluşturduğumda. ana formu, "Tuval çizim izin vermiyor" hatası oluşur. (Application.MainForm sıfırdır ....). Tuvali dinamik olarak oluşturmanın birkaç yolunu denedim (bunlardan biri aşağıda yazılmıştır), ancak metin boyutlarını ebeveyn kontrolüne eklenmeden ölçemez.Dize TextWidth (Tuvalsiz) nasıl alınır?
Bir şekilde nasıl çalışacağın yolu var mı? Bu yapılabilir eğer
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;
Sorununuzu ekleyip eklemediğinden emin değilim, itiraf etmeliyim. Ancak, genellikle ekran dışı bitmapler oluşturmak size yardımcı olabilir. –
Bitmap ... Ne cehennem çözümü ... bana utanç ver ... Teşekkürler – lyborko
Bunu hatırlamak için tek şey, bitmap tuvalinin font özelliğini doğru bir şekilde başlatmaktır (bazı görsellerde ilklendirilmiş yazı tipinin yokluğunda) "ödünç almak" bileşeni, aksi halde rapor edilen metin kapsamı oldukça anlamsız olacaktır. – Deltics