2016-09-12 2 views
1

Есть ли способ получить ширину и высоту строки в Pascal Script?Получить ширину и высоту строки в Inno Setup Pascal Script

Например:

var 
    S: String; 

S := 'ThisIsMyStringToBeChecked' 

Здесь мне нужно вернуть его высоту и ширину в зависимости от его текущего размера шрифта и шрифта.

Я читал How to get TextWidth of string (without Canvas)?, но не могу преобразовать его в код программы Inno Setup Pascal.

Я хочу, чтобы это измерение (ширина и высота), чтобы изменить TLabel.Caption как 'Too Long To Display' с clRed когда ширина строки его заголовка превышает TLabel.Width.

Заранее спасибо.

ответ

1

следующие работы для TNewStaticText (а не TLabel):

type 
    TSize = record 
    cx, cy: Integer; 
    end; 

function GetTextExtentPoint32(hdc: THandle; s: string; c: Integer; 
    var Size: TSize): Boolean; 
    external '[email protected] stdcall'; 
function GetDC(hWnd: THandle): THandle; 
    external '[email protected] stdcall'; 
function SelectObject(hdc: THandle; hgdiobj: THandle): THandle; 
    external '[email protected] stdcall'; 

procedure SmartSetCaption(L: TNewStaticText; Caption: string); 
var 
    hdc: THandle; 
    Size: TSize; 
    OldFont: THandle; 
begin 
    hdc := GetDC(L.Handle); 
    OldFont := SelectObject(hdc, L.Font.Handle); 
    GetTextExtentPoint32(hdc, Caption, Length(Caption), Size); 
    SelectObject(hdc, OldFont); 

    if Size.cx > L.Width then 
    begin 
    L.Font.Color := clRed; 
    L.Caption := 'Too long to display'; 
    end 
    else 
    begin 
    L.ParentFont := True; 
    L.Caption := Caption; 
    end; 
end; 
+0

Brilliant ......... работает хорошо. Но мне нравится знать, почему это не будет работать с «TLabel»? – GTAVLover

+0

Потому что 'TLabel' не' TWinControl', поэтому он не имеет '.Handle'. Код для «TLabel» должен быть несколько иным. Возможно, вместо этого можно использовать 'WizardForm.Handle', или, может быть,' nil' можно передать в 'GetDC'. –

+0

Еще раз спасибо ....... ;-) – GTAVLover

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