Получение параметра MaxLen для использования с MinimizeName
Я пытаюсь поместить очень длинное имя файла в TLabel, используя функцию MinimizeName из модуля Vcl.FileCtrl, но я не могу понять, как получить параметр MaxLen, используемый функцией. Если я жестко кодирую значение, я вижу действительный результат. Но так как форма может быть изменена, я бы хотел, чтобы она была динамической = изменялась при изменении размера.
Вот некоторые вещи, которые я пробовал: lblLicenseFile.Width // строка слишком длинная lblLicenseFile.Width - 10 // строка слишком длинная Trunc(lblLicenseFile.Width / lblLicenseFile.Font.Size) // строка очень короткая
Должен быть какой-то метод вычисления этого количества пикселей
MinimizeName(const Имя файла: TFileName; Canvas: TCanvas; MaxLen: Integer): TFileName; MaxLen - это длина в пикселях, доступная для рисования имени файла на холсте.
2 ответа
Чтобы элемент управления меткой автоматически сокращал путь, вы можете установить AutoSize
собственность на Ложь и EllipsisPosition
собственность на epPathEllipsis
если вы используете последнюю версию Delphi.
Чтобы избавиться от зависимостей изменения размера формы, изменение размера может также произойти, если вы используете, например, разделители, вы можете переопределить событие CanResize, чтобы адаптировать заголовок.
как пример:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TLabel = Class(StdCtrls.TLabel)
private
FFullCaption: String;
procedure SetFullname(const Value: String);
published
function CanResize(var NewWidth, NewHeight: Integer): Boolean; override;
property FullCaption: String read FFullCaption Write SetFullname;
End;
TForm3 = class(TForm)
FileNameLabel: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form3: TForm3;
implementation
uses FileCtrl;
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
FileNameLabel.FullCaption := 'C:\ADirectory\ASubDirectory\ASubSubDirectory\AFileN.ame'
end;
{ TLabel }
function TLabel.CanResize(var NewWidth, NewHeight: Integer): Boolean;
begin
inherited;
if Assigned(Parent) then
Caption := MinimizeName(FFullCaption, Canvas, NewWidth)
end;
procedure TLabel.SetFullname(const Value: String);
begin
FFullCaption := Value;
Caption := MinimizeName(FFullCaption, Canvas, Width)
end;
end.