![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Несколько вопросов по шрифтам и еще один. [D7, WinXP]
Начинающий2 © (2005-06-24 21:13:00)Привет дельфяне! Давненько я не заглядал сюды, как и не занималси програмированием, да вот появились вопросы.
1. Как получить список установленных шрифтов поддерживающих только нужную национальную кодировку. Как получить в список все шрифты, я знаю, проблема втом как отсеить ненужные.
2. Как узнать какой Charset(набор символов) поддерживает выбранный шрифт.
3. В справке написано, что для получерия доступа к своему шрифту, его надо установить. Для этого используется API функция AddFontResource, вот только как её использовать я не понял, подскажите плиз.
4. По OnMouseMove я могу узнать что курсор попал на компанент, а вот как узнать что курсор уже не на компоненте, OnExit есть не для всех компонентов.
Начинающий2 (2005-06-25 21:15:00) [1]Спасибо всем, уже разобрался с добавлением и удалением шрифта. По первым двум вопросам еще не совсем, но думаю дойду сам. Если нет еще раз спрашу.
begin...end (2005-06-25 10:30:00) [2]> Начинающий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).
Ищущий ответа (2005-06-25 08:23:00) [3]По добавлению шрифта:
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;
TUser (2005-06-25 05:43:00) [4]procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
AddFontResource(PAnsiChar(OpenDialog1.FileName));
end;
Начинающий2 (2005-06-24 22:55:00) [5]Ладно, отрубаюсь, завтра еще приду, может кто еще что подскажет до завтра.
Начинающий2 (2005-06-24 22:40:00) [6]Не проверял, я через процедуру запускал по батонклик. А в справке не одного примера по шрифтам, по вопросам что задал. Может не так искал, мож че подскажите.
begin...end (2005-06-24 22:22:00) [7]> Начинающий2 (24.06.05 22:20) [2]
Что возвращает функция?
Начинающий2 (2005-06-24 22:20:00) [8]По 1,2 и 4 спасибо, думаю разберусь. А вот по 3 не совсем понятно, я делаю так:
begin
AddFontResource('адрес и имя шрифта');
end;
Да тока шрифт не устанавливается, как в принципе и ошибок не каких.
begin...end (2005-06-24 22:04:00) [9]1. Получать с помощью EnumFontFamilies и внутри callback-функции смотреть на содержимое структуры ENUMLOGFONT, а именно на поле elfLogFont.lfCharSet.
2. EnumFontFamiliesEx -- заполнить lpLogfont: lfFaceName (имя шрифта) и lfCharset (DEFAULT_CHARSET), далее см. п. 1 и справку.
3. Э-э-э... А что же там непонятного? Передаёте в качестве параметра путь к файлу со своим шрифтом, да и всё. Ну, ещё можно оповестить нужные окна об появлении нового шрифта. Подробности -- в справке.
4. OnExit не имеет отношения к уходу курсора мыши с компонента. Используйте сообщения CM_MOUSEENTER и CM_MOUSELEAVE.