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

Вниз

Несколько вопросов по шрифтам и еще один.   Найти похожие ветки 

 
Начинающий2   (2005-06-24 21:13) [0]

Привет дельфяне! Давненько я не заглядал сюды, как и не занималси програмированием, да вот появились вопросы.

1. Как получить список установленных шрифтов поддерживающих только нужную национальную кодировку. Как получить в список все шрифты, я знаю, проблема втом как отсеить ненужные.
2. Как узнать какой Charset(набор символов) поддерживает выбранный шрифт.
3. В справке написано, что для получерия доступа к своему шрифту, его надо установить. Для этого используется API функция AddFontResource, вот только как её использовать я не понял, подскажите плиз.
4. По OnMouseMove я могу узнать что курсор попал на компанент, а вот как узнать что курсор уже не на компоненте, OnExit есть не для всех компонентов.


 
begin...end ©   (2005-06-24 22:04) [1]

1. Получать с помощью EnumFontFamilies и внутри callback-функции смотреть на содержимое структуры ENUMLOGFONT, а именно на поле elfLogFont.lfCharSet.
2. EnumFontFamiliesEx -- заполнить lpLogfont: lfFaceName (имя шрифта) и lfCharset (DEFAULT_CHARSET), далее см. п. 1 и справку.
3. Э-э-э... А что же там непонятного? Передаёте в качестве параметра путь к файлу со своим шрифтом, да и всё. Ну, ещё можно оповестить нужные окна об появлении нового шрифта. Подробности -- в справке.
4. OnExit не имеет отношения к уходу курсора мыши с компонента. Используйте сообщения CM_MOUSEENTER и CM_MOUSELEAVE.


 
Начинающий2   (2005-06-24 22:20) [2]

По 1,2 и 4 спасибо, думаю разберусь. А вот по 3 не совсем понятно, я делаю так:

begin
AddFontResource("адрес и имя шрифта");
end;


Да тока шрифт не устанавливается, как в принципе и ошибок не каких.


 
begin...end ©   (2005-06-24 22:22) [3]

> Начинающий2   (24.06.05 22:20) [2]

Что возвращает функция?


 
Начинающий2   (2005-06-24 22:40) [4]

Не проверял, я через процедуру запускал по батонклик. А в справке не одного примера по шрифтам, по вопросам что задал. Может не так искал, мож че подскажите.


 
Начинающий2   (2005-06-24 22:55) [5]

Ладно, отрубаюсь, завтра еще приду, может кто еще что подскажет до завтра.


 
TUser ©   (2005-06-25 05:43) [6]

procedure TForm1.Button1Click(Sender: TObject);
begin
 if OpenDialog1.Execute then
   AddFontResource(PAnsiChar(OpenDialog1.FileName));
end;


 
Ищущий ответа   (2005-06-25 08:23) [7]

По добавлению шрифта:
 uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
reg:TRegistry;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.LazyWrite:=false;
reg.OpenKey("Software\Microsoft\Windows\Currentversion\Fonts",false);
reg.WriteString("BarCode (TrueTupe)","BarCode.TTF");
reg.CloseKey;
reg.Free;
AddFontResource("C:\Windows\fonts\BarCode.TTF");
SendMessage(HWND_BROADCAST, WM_FONTCHANGE,0,0);
RemoveFontResource("C:\Windows\fonts\BarCode.TTF");
SendMessage(HWND_BROADCAST, WM_FONTCHANGE,0,0);
end;


 
begin...end ©   (2005-06-25 10:30) [8]

> Начинающий2   (24.06.05 22:40) [4]

> Не проверял

Извините, а тогда на чём основывается Ваше утверждение из [2]: "в принципе и ошибок не каких"? Результат, возвращаемый функцией AddFontResource, как раз и скажет о том, есть ошибки или нет. И даже можно будет определить, что именно за ошибка возникла.

Читаем справку: If the function succeeds, the return value specifies the number of fonts added. If the function fails, the return value is zero. To get extended error information, call GetLastError. Вывод: если функция возвратила ноль, надо вызвать GetLastError, чтобы получить код ошибки. А если нужно получить текст ошибки, следует передать этот код в функцию SysErrorMessage (или FormatMessage). Но можно и проще -- использовать Delphi-функцию Win32Check, которая всё это сделает сама. И вот только после этого можно будет утверждать, была какая-то ошибка или нет.

Пример: Win32Check(AddFontResource(путь_к_файлу_шрифта) <> 0).


 
Начинающий2   (2005-06-25 21:15) [9]

Спасибо всем, уже разобрался с добавлением и удалением шрифта. По первым двум вопросам еще не совсем, но думаю дойду сам. Если нет еще раз спрашу.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.05 c
1-1120106993
Revers
2005-06-30 08:49
2005.07.18
RichEdit портит текстовый файл


3-1118057488
makle
2005-06-06 15:31
2005.07.18
Сжать и сохранить базу Access


8-1111421913
FlyingHero
2005-03-21 19:18
2005.07.18
Уменьшение размеров JPEG картинки


3-1117865625
SIDO_Delfi
2005-06-04 10:13
2005.07.18
Oracle


1-1119780267
Euro
2005-06-26 14:04
2005.07.18
Canvas





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский