我想缩短文件名以适应TEdit,比如
Edit1.Text := MinimizeName(FileName, Edit1.Canvas, Edit1.Width);
不幸的是,这并没有编译,因为TEdit直接具有Canvas
属性。其字体指标需要画布。
如何访问TEdit的画布?
(MinimizeName
在Vcl.FileCtrl中声明。)
答案 0 :(得分:7)
您可以使用TControlCanvas
。您还应该考虑控件的字体。
e.g:
var
Canvas: TControlCanvas;
Canvas := TControlCanvas.Create;
try
Canvas.Control := Edit1;
Canvas.Font.Assign(Edit1.Font);
// Do something with Canvas...
finally
Canvas.Free;
end;
答案 1 :(得分:3)
好的,我找到了。对于那些感兴趣的人:
procedure TForm1.Button1Click(Sender: TObject);
var
aCanvas: TCanvas;
begin
if FileOpenDialog1.Execute then begin
aCanvas := TCanvas.Create;
try
aCanvas.Handle := GetDC(Edit1.Handle);
Edit1.Text := MinimizeName(FileOpenDialog1.FileName, aCanvas, Edit1.Width - 8);
finally
ReleaseDC(Edit1.Handle, aCanvas.Handle);
aCanvas.Free;
end;
end;
end;
答案 2 :(得分:0)
由于画布仅用于获取度量标准,因此如果您假设TEdit度量标准与表单度量标准相同,则在MinimizeName调用中使用表单画布就足够了。这更简单,并且有效,除非有指标不同的原因。