我试图使用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.