Текущий архив: 2003.03.27;
Скачать: CL | DM;
ВнизКак встроить свой шрифт в программу? Найти похожие ветки
← →
i4Me (2003-03-14 10:02) [0]Вопрос в сабже. (Из дополнительной инфы: Тачка полностью на инглише - свой шрифт надо "тащить" за собой).
← →
i4Me (2003-03-15 08:57) [1]Что никто нефига незнает??? :(((
← →
ЮЮ (2003-03-15 09:58) [2]Тебе хорошо, у тебя на инглише, а вот я затрахался на японской винде что-нибудь по-русски изображать, кроме Captin-ов, зашитых в ресурсах. В моём случае даже в коде не напишешь Label1.Caption := "Привет, мир"; :-).
← →
dimdimka (2003-03-15 11:10) [3]Мужики, читайте FAQ и не надо лохматить бабушку :))
Q: Как русифицировать меню, заголовки окон?
A:
Следующий пример "руссифицирует" меню, заголовки окон и т.п. на
время работы программы. Подразумевается, что к Вашей программе
прилагается файл MyFont.ttf с руссифицированным шрифтом MyFont.
(это может быть любой шрифт).
var
OldNonClientMetrics: TNonClientMetrics;
FontChanged: boolean;
Path: string;
//Руссифицируем :)
procedure SetFonts;
var
NonClientMetrics: TNonClientMetrics;
begin
FontChanged:=false;
with NonClientMetrics do
begin
cbSize := sizeof(TNonClientMetrics);
if not SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then
GetObject(GetStockObject(SYSTEM_FONT), SizeOf(lfCaptionFont), @lfCaptionFont);
OldNonClientMetrics:=NonClientMetrics;
if ((lfCaptionFont.lfCharSet<>RUSSIAN_CHARSET)
or (lfMenuFont.lfCharSet<>RUSSIAN_CHARSET)
or (lfStatusFont.lfCharSet<>RUSSIAN_CHARSET)
or (lfMessageFont.lfCharSet<>RUSSIAN_CHARSET)) then
begin
FontChanged:=true;
AddFontResource(PChar(Path+"MyFont.ttf"));
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
if (lfCaptionFont.lfCharSet<>RUSSIAN_CHARSET) then
begin lfCaptionFont.lfFaceName:="MyFont";
lfCaptionFont.lfCharSet:=RUSSIAN_CHARSET end;
if (lfMenuFont.lfCharSet<>RUSSIAN_CHARSET) then
begin lfMenuFont.lfFaceName:="MyFont";
lfMenuFont.lfCharSet:=RUSSIAN_CHARSET end;
if (lfStatusFont.lfCharSet<>RUSSIAN_CHARSET) then
begin lfStatusFont.lfFaceName:="MyFont";
lfStatusFont.lfCharSet:=RUSSIAN_CHARSET end;
if (lfMessageFont.lfCharSet<>RUSSIAN_CHARSET) then
begin lfMessageFont.lfFaceName:="MyFont";
lfMessageFont.lfCharSet:=RUSSIAN_CHARSET end;
if (lfSmCaptionFont.lfCharSet<>RUSSIAN_CHARSET) then
begin lfSmCaptionFont.lfFaceName:="MyFont";
lfSmCaptionFont.lfCharSet:=RUSSIAN_CHARSET; end;
SystemParametersInfo(SPI_SETNONCLIENTMETRICS, 0, @NonClientMetrics, 0);
end;
end;
end;
//Возвращаем все в прежнее состояние
procedure RemoveFonts;
begin
if FontChanged then
begin
SystemParametersInfo(SPI_SETNONCLIENTMETRICS, 0, @OldNonClientMetrics, 0);
RemoveFontResource(PChar(From+"MyFont.ttf"));
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;
end;
← →
i4Me (2003-03-16 15:04) [4]Блин! Видел я это - не пашет! Что такое TNonClientMetrics;
???
← →
Портвейн (2003-03-16 23:12) [5]ЮЮ ©
ты настоящий самурай! :)
действительно, после твоего поста все остальные проблемы с фонтами и кодировками кажутся просто.. ээ.. лёгким шелестом хризантем в тёплый весенний день :)
← →
Slym (2003-03-17 06:50) [6]Попробуй вместо TNonClientMetrics поставить tagNONCLIENTMETRICS
← →
Alexandr B. (2003-03-17 08:27) [7]Я вот например зашил шрифты в ресурсы.
>>>font.rc<<<
def ttffont loadoncall MAGNFONT.TTF
cps ttffont loadoncall WESTM.TTF
Перекрыл конструктор формы.
constructor Create(AOwner: TComponent); override;
И перед созданием окошка регистрю все свои шрифты.
Procedure RegFont;
var rs:TResourceStream;
fs:TFileStream;
fn:string;
begin
{$R font.res}
if not QueryFont("Chess Magnetic") then
begin
fn := VclGetTempFileName("_");
rs := TResourceStream.Create(hinstance,"def","ttffont");
try
fs := TFileStream.Create(fn,fmCreate);
try
fs.CopyFrom(rs,0);
finally
fs.free;
end;
finally
rs.Free;
end;
AddFontResource(pchar(fn));
end;
if not QueryFont("Westminster") then
begin
fn := VclGetTempFileName("_");
rs := TResourceStream.Create(hinstance,"cps","ttffont");
try
fs := TFileStream.Create(fn,fmCreate);
try
fs.CopyFrom(rs,0);
finally
fs.free;
end;
finally
rs.Free;
end;
AddFontResource(pchar(fn));
end;
end;
constructor TForm1.Create(AOwner: TComponent);
begin
RegFont;
inherited;
end;
----------------
> ЮЮ © (15.03.03 09:58)
> Тебе хорошо, у тебя на инглише, а вот я затрахался на японской
> винде что-нибудь по-русски изображать, кроме Captin-ов,
> зашитых в ресурсах. В моём случае даже в коде не напишешь
> Label1.Caption := "Привет, мир"; :-).
Мне кажется что в вашем случае самео простое отключить стандартный кэпшфн, формы а вместо него отрисовать нужный своим шрифтом.
Или вообще не отключать а правильно обрабатывать wm_ncpaint.
Удачи.
← →
Alex44 (2003-03-17 15:47) [8]A glavnoe, nuzhno li caption pisat" po-russki? Po moemu, localizovany dolzhny byt" tol"ko dannye, a vse elementy upravleniya dolzhny byt" ponyatny vsem!
Страницы: 1 вся ветка
Текущий архив: 2003.03.27;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.008 c