![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Гадость со шрифтами... (жирнооее все) [Delphi, Windows]
D[u]fa © (2006-09-25 18:54:00)Привет всем... давно хотел сказать почему все время приходся менять размер шрифта на -11 чтобы он нормально выглядел... но сейчас дело не в этом.. обновился до 2.39.1 совсем недавно, взялся за старую либу, перекомпилил.... и удивился, контролы которые создаются в ней имеют мерзкий жирный шрифт... и самое интересное он не меняется =\
D[u]fa (2006-10-22 10:20:00) [1]Хмм, так вот мне интересно почему даже не сам шрифт MS Sans Serif по умолчанию... а просто почему у него такой размер странный
Vladimir Kladov (2006-10-22 00:24:00) [2]А вот откуда. Там же, в MSDN:
Using a Stock Font to Draw Text
The system provides six stock fonts. A stock font is a logical font that an application can obtain by calling the GetStockObject function and specifying the requested font. The following list contains the values that you can specify to obtain a stock font.
Value Meaning
ANSI_FIXED_FONT Specifies a monospace font based on the Windows character set. A Courier font is typically used.
ANSI_VAR_FONT Specifies a proportional font based on the Microsoft® Windows® character set. MS Sans Serif is typically used.
DEVICE_DEFAULT_FONT Specifies the preferred font for the specified device. This is typically ...
Vladimir Kladov (2006-10-22 00:22:00) [3]Вот, в MSDN что нашел:
During its initialization, GDI calls an internal function, InitFonts(), which is responsible for physically loading three basic fonts. Under a typical Windows 3.0 installation, the names of the font files for these fonts are listed in the [boot] section of the SYSTEM.ini file. For example, this section (in part) resembles the following:
fixedfon.fon=vgafix.fon
oemfonts.fon=vgaoem.fon
fonts.fon=vgasys.fon
The system font is loaded first. GDI first checks the WIN.ini file in the [windows] section for the key name SystemFont=<file>, where <file> is a name of a bitmap font (such as HELV.FON). If GDI finds this keyname, it will attempt to load the specified file as thesystem font. Changing this value is one method the user can use to customize the system font. NOTE: If you change SystemFont=<font> you *must* also have the line fonts.fon=<font> in the [windows] section of the SYSTEM.INI file. Otherwise, Windows will not load properly.
If GDI does not find this key name, it attempts to load the system font from a file called FONTS.fon using the GDI function AddFontResource. Notice that on typical installations of Windows 3.0, there is no file called FONTS.fon. AddFontResource calls LoadLibrary to load the specified file. If the file is not found, LoadLibrary will search the SYSTEM.ini file (in the [boot] section) for a redirection of the file. As shown above, the [boot] section of SYSTEM.ini for a VGA system contains the following:
fonts.fon=vgasys.fon
This line indicates that the system font should be loaded from the file VGASYS.fon, which resides in the system directory.
Once the system font is physically loaded, GDI attempts to load a fixed-pitch font. GDI examines the [boot] section of the SYSTEM.ini file and extracts the filename from the fixedfon.fon= field. If no file is specified, the system font (loaded in step 1) is substituted for the system fixed-pitch font.
Вывод: настраивается все-таки. Или в реестре, или в той части реестра, что теперь берет на себя функции system.ini. Наверное, из настроек дисплея (которые пользователь может рулить визуально) убрали по каким-то соображениям. Если это просто не недосмотр.
ANTPro (2006-10-22 00:19:00) [4]Vladimir Kladov (22.10.06 0:10) [25]
ничего не ставит, никакого фонта
Тогда откуда у Form.Font.FontName по дефолту MS Sans Serif?
{$IFDEF USE_NAMES}
Result.Form.Name := 'Form1';
{$ENDIF}
Result.Form.Font.FontName := 'Veardana';//Если закоментить то будет MS Sans Serif
// Result.Button1.TabOrder = 0
Result.Button1 := NewButton( Result.Form, 'Button1' ).SetPosition( 48, 88 );
{$IFDEF USE_NAMES}
Vladimir Kladov (2006-10-22 00:10:00) [5]Нет, давайте разберемся. MCK точно ничего не ставит, никакого фонта. Вот я создал приложение, бросил кнопку и метку, нигде Font не трогал. В inc-файле Font тоже нигде не упоминается и не присваивается.
procedure NewForm1( var Result: PForm1; AParent: PControl );
begin
{$IFDEF KOLCLASSES}
Result := PForm1.Create;
{$ELSE OBJECTS}
New( Result, Create );
{$ENDIF KOL CLASSES/OBJECTS}
Result.Form := NewForm( AParent, 'Form1' ).SetPosition( 192, 109 ){No MainMenu!}.SetClientSize( 534, 346 );
Applet := Result.Form;
Result.Form.Add2AutoFree( Result );
{$IFDEF UNICODE_CTRLS}
Result.Form.SetUnicode(TRUE);
{$ENDIF UNICODE_CTRLS}
{$IFDEF USE_NAMES}
Result.Form.Name := 'Form1';
{$ENDIF}
// Result.Label1.TabOrder = -1
Result.Label1 := NewLabel( Result.Form, 'Label1' ).SetPosition( 24, 16 ).AutoSize( TRUE );
{$IFDEF USE_NAMES}
Result.Label1.Name := 'Label1';
{$ENDIF}
{$IFDEF UNICODE_CTRLS}
Result.Label1.SetUnicode(TRUE);
{$ENDIF UNICODE_CTRLS}
// Result.Button1.TabOrder = 0
Result.Button1 := NewButton( Result.Form, 'Button1' ).SetPosition( 88, 16 );
{$IFDEF USE_NAMES}
Result.Button1.Name := 'Button1';
{$ENDIF}
{$IFDEF UNICODE_CTRLS}
Result.Button1.SetUnicode(TRUE);
{$ENDIF UNICODE_CTRLS}
end;
Где тут что выставляется, скажите мне?
ANTPro (2006-10-22 00:04:00) [6]Vladimir Kladov (21.10.06 23:51) [21]
По умолчанию шрифт не устанавливается в KOL вообще.При этом система сама использует тот шрифт, который настроен в начтройках рабочего стола.
У меня там Veardana 7px стоит, а на форме MS Sans Serif. MCK его по дефолту ставит.
Vladimir Kladov (2006-10-21 23:57:00) [7]А бывает, кстати, и наоборот. Плохо видящий программер, который все свое зрение просадил, играя в квейк и программируя по 18 часов в сутки, ставит в своем приложении шрифт 20, потому что он ни черты не видит на своем дисплее 2048х1600, если текст мельче. А потом его приложение попадает к пользователю, у которого рабочий стол 800х600 и монитор 14 дюймов. И из надписи на каждой кнопке помещается по полторы буквы...
ANTPro (2006-10-21 23:55:00) [8]Vladimir Kladov (21.10.06 23:42) [20]
Delphi пользую 2 года и 10 дней, KOL - 2 года. До Delphi юзал VB (Незнал что такое паскаль)...
Вроде 1 курсовик писал на VCL когда-то ...
Vladimir Kladov (2006-10-21 23:51:00) [9]видите ли. По умолчанию шрифт не устанавливается в KOL вообще. При этом система сама использует тот шрифт, который настроен в начтройках рабочего стола. Это во-первых правильно. Пользователь должен иметь возможность настроить шрифты сразу для всех приложений используя одно средство конфигурирования, предоставляемое системой. А теперь вы берете и ставите свои шрифты. И вот плохо видящий пользователь, который поставил себе шрифт 18-го размера, чтобы все видеть, в нормальных приложениях все и видит, как настроил. Но стоит ему запустить дельфовое приложение, и хоть лупу бери. Потому что дельфи ставит 8, по умолчанию. А во-вторых, это экономно. Если вы в своем приложении не меняете шрифт, то вовсе не создается и не используется объект шрифта. Приложение будет худее на пару килобайтов.
Vladimir Kladov (2006-10-21 23:42:00) [10]Т.е. как VCL не юзал. Вообще, то есть?
ANTPro (2006-10-21 22:04:00) [11]Незнаю как там в VCL не юзал, но в KOL дефолтовый шрифт меня раздражает ...
D[u]fa (2006-10-21 21:56:00) [12]хм... ну так я про то, что в VCL создал форму и там сразу размер шрифта 8, и его мона юзать сразу... а в КОЛ создал форму и сразу шрифт жирный и уродский... сразу лезешь его менять... а так был бы как в VCL и не надо было бы этого делать...
Вопчем я за то что б у новой формы шрифт по умолчанию был такой же как и в VCL
Vladimir Kladov (2006-10-21 21:51:00) [13]здрасьте приехали, а в VCL разве не так? Или что вы предлагаете, я не понял. Сделать в TKOLProject шрифт по умолчанию для новых форм? Народ и так путается со свойствами, которые не имеют отношения к ран-тайм, а это свойство не будет еще иметь отношения и design-time, кроме создания новой формы. (Кроме того, в момент создания формы, точнее, бросания на нее TKOLForm, еще надо будет убедиться, что нашелся TKOLProject).
Нет, ну по-моему, это как-то чересчур. Вы что, каждые 5 секунд новую форму создаете что ли. Это же работа редкая. И в VCL приходится помнить, что создал форму - измени у нее размер шрифта на "любимый" (я всегда 10 ставлю для VCL). И еще кучу действий (выключить Scale, изменить Position, и отключить линейки прокрутки на форме - чтобы в непривычных условиях настройки рабочего стола и гигантского шрифта форма не выглядела по-идиотски).
ANTPro (2006-10-21 21:36:00) [14]Vladimir Kladov (21.10.06 21:20) [15]
уточните что значит "каждый раз"
При каждом создании новой формы в проекте(или нового проекта)...
Vladimir Kladov (2006-10-21 21:20:00) [15]уточните что значит "каждый раз". Когда проект загружается (тогда тут что-то не то). А иначе - когда?
ANTPro (2006-10-21 21:11:00) [16]D[u]fa © (21.10.06 21:05) [13]
и еще вопросик, а нельзя ли сделать что б у формы сразу FontHeight был -11 ? просто каждый раз менять надо, чтобы нормальный шрифт был %)
Вроде как, выставлен выневый дефолт. Я постоянно ставлю 13 и шрифт Veardana.
D[u]fa (2006-10-21 21:05:00) [17]Владимир, Вы не идиот. Просто к моим мессагам нужно было отнестись серьезнее =) я б не стал писать просто так....
значит если убрать SMALLEST_CODE_PARENTFONT то проблема исчезает?
и еще вопросик, а нельзя ли сделать что б у формы сразу FontHeight был -11 ? просто каждый раз менять надо, чтобы нормальный шрифт был %)
Vladimyr (2006-10-21 17:30:00) [18]я идиот!
SMALLEST_CODEвместоSMALLEST_CODE_PARENTFONT
Читайте документацию... :((
Vladimyr (2006-10-21 14:27:00) [19]Недавно обновил КОЛ и перебилдил своё старое приложение, в результате получил ту же жирную гадость...
Ни одного байта в коде не менял.
Ковыряюсь...
D[u]fa (2006-10-03 08:31:00) [20]не нашел примеров я, плохо искал..
А вот почему вс это произошло после обновления? это вопрос, я исправил глюк таким образом что контролы теперь создает форма когда полуает опр. сообщение.