Свойства заголовка окна WizardForm внутренне загружаются ISSkin.DLL в соответствии с вашим стилем визуальных стилей. Таким образом, если бы какой-либо системы Метрики для пользователя заголовков окон настраивается в дополнительных настройках в панели управления, как:
Window Title - название шрифта Segoe UI
и размер шрифта 10
всех тех, кто будет переопределен ISSKin.DLL при загрузке указанного стиля Visual Style, поскольку он имеет разные шрифты и настройки размера шрифта в своих .INI-файлах, которые загружаются функцией LoadSkin
, как показано ниже.
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
файл .ini вы предоставляете здесь есть практически вся информация о том, как кожа является загружен из ресурсов, таких как Bitmpas, хранящихся в файле скина.
Однако вы можете центрировать WizardForm Caption, используя два разных варианта.
Использование Хакер ресурсов:
Использование Хакер ресурсов, можно установить заголовок окна (Подпись) Выравнивание кожи Центру очень легко.
1.Откройте свою визуальную стильную шкуру (.cjstyles или .msstyles) с помощью Resource Hacker и найдите группу ресурсов с именем TEXTFILE
.
2.Откройте его и найдите файл .INI в соответствии с тем, какая цветовая схема загружена по умолчанию ISSkin.dll. В большинстве ситуаций, и если размер вашего системного шрифта 100% (по умолчанию), это должна быть нормальная цветовая схема. Таким образом, нажмите на файле INI-который имеет слово NORMAL в его названии, как показано ниже:
Например, если ваша кожа Имя файла Elegance.cjstyles
, файл .ini с нормальной цветовой гаммой должен быть как NORMALELEGANCE_INI
или что-то в том числе слово NORMAL
.
3.Open этот INI-файл во внутреннем текстовом редакторе поставляется с Hacker Resource и найдите строку Window.Caption
, как показано ниже:
![enter image description here](https://i.stack.imgur.com/hWofV.png)
4.And убедитесь, что его ContentAlignment
установлен в Center
. Если это не по умолчанию, измените его на Center
.
Теперь заголовок окна мастера должен быть центрирован после загрузки скина ISSkin.DLL.
ПРИМЕЧАНИЕ. Это центрирование неточно потому, что центрирование выполняется между клавишей слева и кнопкой уменьшения, поэтому заголовок может все еще находиться рядом с левой стороной даже после центрирования его таким образом.
Использование Pascal Script [код] Раздел:
Вы можете центрировать WizardForm Caption, добавляя пробелы в его передней (но не рекомендуется.)
Кодекс, как это будет. делай то, что тебе нужно.
[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;
выше код продолжает добавлять пробела перед Струнными вы хотите быть в центре до тех пор, пока не будет должным образом сосредоточен в Max Струнного Ширине вы заданный, и выводит измененную строку с добавленными пробелами.
ПРИМЕЧАНИЕ: MaxWidth
Параметр здесь должен быть шириной, по которой вы хотите центрировать строку. Строка, которая имеет более высокую ширину, чем вы здесь указываете, не может быть правильно центрирована. И визуальная стильная кожа не нужна, чтобы центрировать заголовок окна мастера, используя вышеуказанную функцию.
Использование:
Если вы хотите использовать эту функцию, чтобы центрировать Wizard Window Title, использовать его как:
Если вы не используете Visual Styles кожи:
[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;
Centered Wizard Window Title:
![enter image description here](https://i.stack.imgur.com/YaY1S.png)
Однако центрирование Мастер заголовок окна с помощью описанной выше функции (Взлом его путем добавления пробелов) вызывает следующий плохой эффект в панели задач Windows Подсказки:
![enter image description here](https://i.stack.imgur.com/ISvPY.jpg)
ПРИМЕЧАНИЕ: WizardForm.CaptionLeft и CaptionRight должны варьироваться в зависимости от размера левой границы надписи для вашей визуальной стили, если вы используете визуальную стильную шкуру.
Я не понимаю, для чего вам это нужно. Вы можете объяснить? –
Поскольку Windows не поддерживает центрирование Подписи, я хотел бы подсчитать ширину пробела в WizardForm.Caption в соответствии с текущим именем и размером шрифта и автоматически добавить пробелы перед моей желаемой надписью, чтобы центрировать ее. :-( – Blueeyes789