Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];

Вниз

Как встроить свой шрифт в программу?   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
14-88134
DenKop
2003-03-06 00:08
2003.03.27
Free GSM


14-88219
Дмитрий К.К.
2003-03-10 08:44
2003.03.27
Именинники 10 марта


14-88199
Феликс
2003-03-11 01:14
2003.03.27
Кто знаком с НЛП?


7-88282
zyurik
2003-02-02 00:55
2003.03.27
Реестр


14-88147
kostya2000
2003-03-11 20:14
2003.03.27
3.14





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский