获取与MinimizeName一起使用的MaxLen参数



我试图使用Vcl的MinimizeName函数在TLabel上放置一个非常长的文件名。FileCtrl单元,但我不知道如何获得该函数使用的MaxLen参数如果我硬编码一个值,我可以看到一个有效的结果。但是由于表单可以调整大小,我希望它是动态的=在调整大小事件。

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

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

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

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

为了摆脱对窗体大小调整的依赖,如果你使用拆分器,也可能会发生大小调整,你可以覆盖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:ADirectoryASubDirectoryASubSubDirectoryAFileN.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.

相关内容

  • 没有找到相关文章

最新更新