如何在Delphi中获得TEdit的画布?

时间:2015-12-06 15:58:08

标签: delphi delphi-xe8 tcanvas

我想缩短文件名以适应TEdit,比如

Edit1.Text := MinimizeName(FileName, Edit1.Canvas, Edit1.Width);

不幸的是,这并没有编译,因为TEdit直接具有Canvas属性。其字体指标需要画布。 如何访问TEdit的画布?

MinimizeName在Vcl.FileCtrl中声明。)

3 个答案:

答案 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调用中使用表单画布就足够了。这更简单,并且有效,除非有指标不同的原因。