4

我正在尝试使用 Vcl.FileCtrl 单元中的 MinimizeName 函数在 TLabel 上放置一个很长的文件名,但我无法弄清楚如何获取该函数使用的 MaxLen 参数如果我硬编码一个值,我可以看到一个有效的结果。但由于表单可以调整大小,我希望它是动态的 = 在调整大小事件时发生变化。

我尝试过的一些事情是 lblLicenseFile.Width // 字符串太长 lblLicenseFile.Width - 10 // 字符串太长 Trunc(lblLicenseFile.Width / lblLicenseFile.Font.Size) // 字符串很短

必须有某种方法来计算这个像素数

MinimizeName(const Filename: TFileName; Canvas: TCanvas; MaxLen: Integer): TFileName; MaxLen 是可用于在画布上绘制文件名的长度(以像素为单位)。

4

2 回答 2

3

为了摆脱对表单大小调整的依赖,如果您使用拆分器,也可能会发生调整大小,您可以覆盖 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.
于 2013-05-06T11:13:58.213 回答
3

要让标签控件自动缩短路径,您可以将属性设置AutoSize为 False,如果您使用的是最新版本的 Delphi,则可以将属性设置为。EllipsisPositionepPathEllipsis

于 2013-05-06T11:16:28.740 回答