7

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

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

不幸的是,这不会编译,因为 TEdit 确实Canvas直接具有属性。画布的字体度量是必需的。如何访问 TEdit 的画布?

MinimizeName在 Vcl.FileCtrl 中声明。)

4

3 回答 3

7

你可以使用TControlCanvas. 您还应该考虑控件的字体。

例如:

var
  Canvas: TControlCanvas;

Canvas := TControlCanvas.Create;
try
  Canvas.Control := Edit1;
  Canvas.Font.Assign(Edit1.Font); 

  // Do something with Canvas... 
finally
  Canvas.Free;
end;
于 2015-12-07T08:51:21.653 回答
5

好的,我找到了。对于那些有兴趣的人:

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;


于 2015-12-06T16:17:54.423 回答
1

由于画布仅用于获取指标,因此如果假设 TEdit 指标与表单指标相同,则在 MinimizeName 调用中使用表单画布就足够了。这更简单,也更有效,除非有理由导致指标不同。

于 2015-12-07T19:59:21.463 回答