Получение параметра 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.
Другие вопросы по тегам