2013-05-06 2 views
4

Я пытаюсь поместить очень длинное имя файла в TLabel, используя функцию MinimizeName из модуля Vcl.FileCtrl, но я не могу понять, как получить параметр MaxLen, используемый функцией Если я жестко задаю значение, я могу увидеть действительный результат. Но так как форма может быть изменена, я бы хотел, чтобы она была динамической = изменение события изменения размера.Получение параметра MaxLen для использования с MinimizeName

Некоторые из вещей, которые я попробовал это lblLicenseFile.Width // строка слишком длинная lblLicenseFile.Width - 10 // строка слишком длинная Trunc (lblLicenseFile.Width/lblLicenseFile.Font.Size) // строка очень короткий

Там должен быть какой-то способ вычисления этого количества пикселей

MinimizeName (Const Имя файла: TFileName; Canvas: TCanvas; MaxLen: целое число): TFileName; MaxLen - это длина, в пикселях, доступная для рисования имени файла на холсте.

+0

У меня этот вопрос не возникает. Почему бы вам просто не вызвать «MinimizeName» из события OnResize вашей формы? – TLama

+0

Если я не добавляю правильное значение для MaxLen, текст не выглядит ОК - либо длинный для ярлыка, либо короткий. – OZ8HP

+0

Наклейки autosize установлены на false, а мой текущий код выглядит следующим образом - не работает. Строка слишком длинная для метки Имя файла: = MinimizeName (Settings.License.LicenseFile, lblLicenseFile.Canvas, lblLicenseFile.Width); lblLicenseFile.Caption: = Имя файла; – OZ8HP

ответ

3

Для того, чтобы управление этикетки автоматически сократить путь, вы можете установить AutoSize свойство Ложные и EllipsisPosition свойство epPathEllipsis, если вы используете последнюю версию Delphi.

+2

jep, может быть самым изящным решением. – bummi

+0

То, о чем я не думал, - но это делает трюк, и я избавляюсь от блока Vcl.FileCtrl - спасибо – OZ8HP

+0

Добро пожаловать! – TLama

3

Чтобы избавиться от зависимостей изменения размера формы, изменение размера может также произойти, если вы используете, например, splitters, вы можете переопределить событие 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. 

 Смежные вопросы

  • Нет связанных вопросов^_^