Как я могу получить холст 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. Это проще и допустимо, если только нет причины отличия метрики.

Другие вопросы по тегам