WizardForm的窗口標題屬性由ISSkin.DLL根據您的視覺樣式皮膚內部加載。所以,如果有任何系統韻律的窗口標題用戶在控制面板中的高級外觀設置等配置:
窗口標題 - 字體名稱Segoe UI
和字體大小10
所有這些將被ISSKin.DLL覆蓋當加載指定的視覺樣式時,因爲它們的.INI文件具有不同的字體和字體大小配置,這些配置由功能LoadSkin
加載,如下所示。
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
.ini文件你提供在這裏對皮膚是如何從像存儲在皮膚文件Bitmpas資源加載幾乎所有信息。
但是,您可以使用兩個不同的選項將WizardForm標題居中。
使用資源黑客:
利用資源黑客,可以非常容易地設置皮膚的窗口標題(標題)符合中心。
1.使用Resource Hacker打開您的視覺樣式皮膚(.cjstyles或.msstyles)文件並查找名爲TEXTFILE
的資源組。
2.展開並根據ISSkin.dll默認的顏色方案找到.INI文件。在大多數情況下,如果您的系統字體大小爲100%(默認),則應該是正常配色方案。因此,在具有在其名稱師範大學字的.ini文件,單擊像圖所示:
例如,如果你的皮膚文件名是Elegance.cjstyles
,在.ini與普通色彩方案文件,應該像NORMALELEGANCE_INI
或東西,包括字NORMAL
。
3.Open內部文本編輯器這個.ini文件帶有資源黑客並找到行Window.Caption
如下所示的一樣:
4.And確保其ContentAlignment
設爲Center
。如果它不是默認值,請將其更改爲Center
。
現在,在由ISSkin.DLL加載皮膚後,嚮導的窗口標題應該居中。
注意:此居中不準確,因爲居中之間完成標題左和最小化按鈕之間,所以標題可能仍然靠近左側即使這樣居中後。
使用Pascal腳本[編號]部分:
您可以通過添加空格到它的前排中央WizardForm標題(但不推薦)。
A碼這樣的意願。做你需要的。
[Code]
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';
function AlignStringToCenter(S: String; const FontName: String; const MaxWidth, FontSize: Integer): String;
var
SWidth, SX, NSWidth: Integer;
SFont, SHandle: THandle;
StringModifier: TNewStaticText;
StringDimensions: TSize;
SHandleEx: TForm;
begin
if S = '' then
RaiseException('The specified Caption is an empty String')
else begin
Try
SHandleEx := TForm.Create(nil);
StringModifier := TNewStaticText.Create(SHandleEx);
StringModifier.Font.Name := FontName;
StringModifier.Font.Size := FontSize;
StringModifier.Parent := SHandleEx;
SX := 0;
StringModifier.Caption := S;
SHandle := GetDC(StringModifier.Handle);
SFont := SelectObject(SHandle, StringModifier.Font.Handle);
GetTextExtentPoint32(SHandle, StringModifier.Caption, Length(StringModifier.Caption), StringDimensions);
SelectObject(SHandle, SFont);
SWidth := StringDimensions.cx;
Repeat
Insert(' ', S, SX);
StringModifier.Caption := S;
Result := S;
SHandle := GetDC(StringModifier.Handle);
SFont := SelectObject(SHandle, StringModifier.Font.Handle);
GetTextExtentPoint32(SHandle, StringModifier.Caption, Length(StringModifier.Caption), StringDimensions);
SelectObject(SHandle, SFont);
NSWidth := StringDimensions.cx;
SX := SX + 1;
Until (NSWidth - SWidth) >= (MaxWidth - NSWidth);
Finally
StringModifier.Caption := '';
StringModifier.Free;
SHandleEx.Free;
SHandleEx.Close;
end;
end;
end;
上面的代碼中加入不斷空格前面要居中,直到它在你給出的最大字符串寬度正確居中,並輸出修改後的字符串添加空格的字符串。
注意:MaxWidth
參數在這裏應該是您想要居中字符串的寬度。一個比你在這裏指定的寬度更高的字符串不能居中。使用上述功能,視覺樣式皮膚不需要將嚮導窗口標題居中。
用法:
如果要使用此功能中心向導窗口標題,這樣使用它:
如果不使用視覺樣式皮膚:
[Code]
Const
SM_CYSIZEFRAME = 33;
SM_CXSMICON = 49;
function GetSystemMetrics(nIndex : Integer): Integer;
external '[email protected] stdcall';
procedure InitializeWizard;
begin
{ MaxWidth = WizardForm.Width - 2 * (WizardForm.FrameWidth + WizardForm.SmallIconWidth + WizardForm.CaptionLeft + WizardForm.CaptionRight) }
WizardForm.Caption := AlignStringToCenter(WizardForm.Caption, 'Segoe UI', WizardForm.Width - (2 * (GetSystemMetrics(SM_CYSIZEFRAME) + GetSystemMetrics(SM_CXSMICON) + 10 + 10)), 9);
end;
如果您使用視覺樣式皮膚:
[Code]
Const
SM_CYSIZEFRAME = 33;
SM_CXSMICON = 49;
function GetSystemMetrics(nIndex : Integer): Integer;
external '[email protected] stdcall';
procedure InitializeWizard;
begin
{ MaxWidth = WizardForm.Width - 2 * (WizardForm.FrameWidth + WizardForm.SmallIconWidth + WizardForm.CaptionLeft + WizardForm.CaptionRight) }
WizardForm.Caption := AlignStringToCenter('Setup - {#MyAppName}', 'Window Title Font Name of your Visual Styles Skin', WizardForm.Width - (2 * (GetSystemMetrics(SM_CYSIZEFRAME) + GetSystemMetrics(SM_CXSMICON) + 10 + 10)), Window Title Font Size of your Visual Styles Skin);
end;
中心的嚮導窗口標題:
然而,圍繞嚮導窗口標題使用上述功能(通過添加空格盜號的)導致在Windows任務欄工具提示使用下列不良影響:
注:WizardForm。如果使用視覺樣式皮膚,則CaptionLeft和CaptionRight應隨視覺樣式皮膚的左標題頁邊距的大小而變化。
我不明白你需要什麼。你可以解釋嗎? –
由於Windows不支持居中字幕,我想根據當前的字體名稱和大小來計算WizardForm.Caption中的空格寬度,並在我希望的字幕前自動添加空格以居中。 :-( – Blueeyes789