Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 08:48   #1
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 144
Вопрос Popupmenu и системный шрифт Windows

Здравствуйте. Столкнулся с такой проблемой, при смене системного шрифта Windows XP (Пуск > Настройка > Панель управления > Экран > Вкладка "Оформление" > Размер шрифта), меняю его с обычного на крупный, то все пункты всплывающего меню (Popupmenu) моей программы меняют размер шрифта с обычного на крупный. Прошу вас подсказать каким образом в моей программе можно настроить шрифт всплывающего меню, который бы не реагировал на изменение шрифта системы в целом?
Рисую всплывающее меню при помощи Canvas.


Код:

{ Отрисовка вертикальной полосы с надписью }

procedure TMainForm.DrawBar(ACanvas: TCanvas);
var
  lf : TLogFont;
  tf : TFont;
begin
  with ACanvas do begin
    Brush.Color := clGray;
    FillRect(Rect(0,0,20,92));
    Font.Name := 'Tahoma';
    Font.Size := 7;
    Font.Style := Font.Style - [fsBold];
    Font.Color := clWhite;
    tf := TFont.Create;
    try
      tf.Assign(Font);
      GetObject(tf.Handle, sizeof(lf), @lf);
      lf.lfEscapement := 900;
      lf.lfHeight := Font.Height - 2;
      tf.Handle := CreateFontIndirect(lf);
      Font.Assign(tf);
    finally
      tf.Free;
    end;
    TextOut(2, 85, 'delphi.about.com');
  end;
end;


Код:

{ Отрисовка пункта всплывающего меню Exit }

procedure TMainForm.Exit1DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
begin
 if Selected then
   ACanvas.Brush.Color := clHighlight
 else
   ACanvas.Brush.Color := clMenu;

 ARect.Left := 25;
 ACanvas.FillRect(ARect);

 DrawText(ACanvas.Handle, PChar('Exit'), -1, ARect, DT_LEFT or DT_VCENTER or DT_SINGLELINE or DT_NOCLIP);

 DrawBar(ACanvas);
end;
ichi вне форума Ответить с цитированием
Старый 29.03.2012, 20:02   #2
robt
Заблокирован
 
Регистрация: 21.06.2010
Сообщений: 77
По умолчанию

вообщето эта опция для того и задумана чтобы увеличивать ВСЕ шрифты,по желанию пользователя
а желание пользователя это закон, запомни
твоя задача смасштабировать элементы управления так,чтобы увеличенный текст влезал полностью,либо не слишком позорно обрезался

но! если у тебя свои представления о красоте и эргономичности
и тебе пофиг на пользователя,то логично что нужно просто уменьшать размер шрифта если включено увеличение
robt вне форума Ответить с цитированием
Старый 30.03.2012, 11:49   #3
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 144
По умолчанию

Цитата:
Сообщение от robt Посмотреть сообщение
вообщето эта опция для того и задумана чтобы увеличивать ВСЕ шрифты,по желанию пользователя
а желание пользователя это закон, запомни
твоя задача смасштабировать элементы управления так,чтобы увеличенный текст влезал полностью,либо не слишком позорно обрезался

но! если у тебя свои представления о красоте и эргономичности
и тебе пофиг на пользователя,то логично что нужно просто уменьшать размер шрифта если включено увеличение
Спасибо за ответ. А как в Delphi можно отследить факт того, что пользователь изменил сам шрифт или размер шрифта? Укажите направление куда копать.
ichi вне форума Ответить с цитированием
Старый 30.03.2012, 12:29   #4
robt
Заблокирован
 
Регистрация: 21.06.2010
Сообщений: 77
По умолчанию

для дпи в реестре
в семерке
HKEY_CURRENT_USER\Control Panel\Desktop
в хпшке
HKEY_LOCAL_MACHINE\SOFTWARE\Microso ft\Windows NT\CurrentVersion\FontDPI
параметр
LogPixels
5 стандартных варианта
72,96,120,144,192
соответсна
75%,100%,120%,150%,200%

про настройки оформления ловиш месагу
wm_settingchange
и куриш SystemParametersInfo

Последний раз редактировалось robt; 30.03.2012 в 12:39.
robt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Крупный шрифт в Windows - как подстроить программу? Dux Общие вопросы Delphi 7 21.08.2011 16:58
Как получить системный шрифт Windows с++ kali0n Win Api 3 15.09.2010 15:57
Как побороть крупный шрифт Windows? _ozzy_ Win Api 2 18.01.2007 20:13
Как побороть крупный шрифт Windows? _ozzy_ Общие вопросы Delphi 1 18.01.2007 11:07