Как я могу получить холст TEdit в Delphi?
Я хочу сократить имя файла до TEdit, что-то вроде
Edit1.Text := MinimizeName(FileName, Edit1.Canvas, Edit1.Width);
К сожалению, это не компилируется, потому что TEdit имеет Canvas
собственность напрямую. Холст необходим для его метрики шрифта. Как я могу получить доступ к холсту TEdit?
(MinimizeName
объявлен в Vcl.FileCtrl.)
3 ответа
Решение
Вы могли бы использовать TControlCanvas
, Вы также должны принять во внимание шрифт элемента управления.
например:
var
Canvas: TControlCanvas;
Canvas := TControlCanvas.Create;
try
Canvas.Control := Edit1;
Canvas.Font.Assign(Edit1.Font);
// Do something with Canvas...
finally
Canvas.Free;
end;
ОК, я нашел это. Для тех, кому интересно:
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;
Поскольку холст используется только для получения метрики, если вы предполагаете, что метрика TEdit совпадает с метрикой формы, достаточно использовать холст формы в вызове MinimizeName. Это проще и допустимо, если только нет причины отличия метрики.