2016-09-12 15 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.Widthを超えた場合、この測定(幅と高さ)clRed'Too Long To Display'ようTLabel.Captionを変更したいです。

ありがとうございます。

答えて

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

ブリリアントは.........うまく動作します。しかし、私はそれがなぜTLabelではうまくいかないのか知りたいのですが? – GTAVLover

+0

'TLabel'は' TWinControl'ではないので、 '.Handle'はありません。 TLabelのコードは若干異なる必要があります。たぶん、代わりに 'WizardForm.Handle'を使うこともできますし、' nil'を 'GetDC'に渡すこともできます。 –

+0

ありがとうございました....... ;-) – GTAVLover

関連する問題