如何在 Delphi 中获得 TEdit 的 canvas?
How can I get a TEdit's canvas in Delphi?
我想缩短文件名以适应 TEdit,例如
Edit1.Text := MinimizeName(FileName, Edit1.Canvas, Edit1.Width);
不幸的是,这不会编译,因为 TEdit 确实有 Canvas
属性 直接。 canvas 是其字体规格所必需的。
如何访问 TEdit 的 canvas?
(MinimizeName
在 Vcl.FileCtrl 中声明。)
好的,我找到了。有兴趣者:
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;
您可以使用 TControlCanvas
。您还应该考虑控件的字体。
例如:
var
Canvas: TControlCanvas;
Canvas := TControlCanvas.Create;
try
Canvas.Control := Edit1;
Canvas.Font.Assign(Edit1.Font);
// Do something with Canvas...
finally
Canvas.Free;
end;
由于canvas只是用来获取metric,如果你假设TEdit metric和form metric是一样的,那么在MinimizeName中使用form canvas就足够了称呼。这更简单,并且有效,除非有原因导致指标会有所不同。
我想缩短文件名以适应 TEdit,例如
Edit1.Text := MinimizeName(FileName, Edit1.Canvas, Edit1.Width);
不幸的是,这不会编译,因为 TEdit 确实有 Canvas
属性 直接。 canvas 是其字体规格所必需的。
如何访问 TEdit 的 canvas?
(MinimizeName
在 Vcl.FileCtrl 中声明。)
好的,我找到了。有兴趣者:
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;
您可以使用 TControlCanvas
。您还应该考虑控件的字体。
例如:
var
Canvas: TControlCanvas;
Canvas := TControlCanvas.Create;
try
Canvas.Control := Edit1;
Canvas.Font.Assign(Edit1.Font);
// Do something with Canvas...
finally
Canvas.Free;
end;
由于canvas只是用来获取metric,如果你假设TEdit metric和form metric是一样的,那么在MinimizeName中使用form canvas就足够了称呼。这更简单,并且有效,除非有原因导致指标会有所不同。