Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 19.04.2007, 21:26   #1
Vasyatka
 
Регистрация: 19.04.2007
Сообщений: 5
Репутация: 10
По умолчанию Смена шрифтов

Салют! Подскажите, плиз, ответ на такой вопрос. Есть прога с кучей компонентов, есть возможность менять шрифт всех из них, кроме меню и вплывающих подсказок (например, подсказка для кнопки). Как сделать смену шрифта для этих "штук"?
Vasyatka вне форума   Ответить с цитированием
Старый 19.04.2007, 21:44   #2
Wiggle
Пользователь
 
Аватар для Wiggle
 
Регистрация: 16.04.2007
Сообщений: 15
Репутация: 10

icq: 352963256
По умолчанию

Компонент.Font.(Color | Name | Size), если я тебя правильно понял...
Wiggle вне форума   Ответить с цитированием
Старый 19.04.2007, 23:18   #3
Vasyatka
 
Регистрация: 19.04.2007
Сообщений: 5
Репутация: 10
По умолчанию

нет не правильно. это свойство я использую для всех компонентов, кроме меню у него это свойство, где? тоже самое с подсказкой для кнопки
Vasyatka вне форума   Ответить с цитированием
Старый 20.04.2007, 00:19   #4
RSLoader
_________
Форумчанин
 
Аватар для RSLoader
 
Регистрация: 27.03.2007
Адрес: Краснодар
Сообщений: 69
Репутация: 212

icq: 391303557
По умолчанию

Код:

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus;
type
  TMyHintWindow = class(THintWindow)
     constructor Create(AOwner: TComponent); override;
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure N1DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
      Selected: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
constructor TMyHintWindow.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Canvas.Font.Size:=Canvas.Font.Size+5;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  HintWindowClass:=TMyHintWindow;
  Application.ShowHint:=False;
  Application.ShowHint:=True;
end;
procedure TForm1.N1DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
begin 
  MainMenu1.OwnerDraw:=True;
  with ACanvas do
  begin
    Font.Color:=clRed;
    if Selected then
    begin
      Font.Color:=clRed;
      Brush.Color:=clGreen;
    end
    else
    begin
      Font.Color:=clGreen;
      Brush.Color:=clRed;
    end;
    Rectangle(ARect);
    TextOut(ARect.Left,ARect.Top,(Sender as TMenuItem).Caption);
  end;
end;
end.

Не забудь предварительно выставить свойство MainMenu OwnerDraw:=True;
RSLoader вне форума   Ответить с цитированием
Старый 20.04.2007, 14:10   #5
Vasyatka
 
Регистрация: 19.04.2007
Сообщений: 5
Репутация: 10
По умолчанию

Спасибо! Я нечто делала с меню, а тут еще и подсказки!!!!
Vasyatka вне форума   Ответить с цитированием
Старый 20.04.2007, 16:50   #6
Vasyatka
 
Регистрация: 19.04.2007
Сообщений: 5
Репутация: 10
Печаль

Пункты меню - получились, НО, вот что странно. До прорисовки пункты меню "третьей иерархии" отражались нормально, например Путь1, а после прорисовки эти надписи странные - Путь&1. Почему? И как это исправить? (именно третья ступень меню)
А вот с подсказками не получилось. . Никак не реагирует на смену шрифта подсказка к кнопке. Почему?
И еще, как изменить шрифт заголовка формы? Он тоже не меняется...
Vasyatka вне форума   Ответить с цитированием
Старый 21.04.2007, 19:14   #7
Voland
Heavy metal
Пользователь
 
Аватар для Voland
 
Регистрация: 02.04.2007
Сообщений: 42
Репутация: 62
По умолчанию

Рисовать текст лучше функцией DrawText, она эти & заменит на подчёркивания букв. Ну или используй StripHotkey чтобы их вырезать. Вообще-то отрисовать пункт меню по всем правилам - целая наука. Я как-то написал простенький модуль для альтернативной отрисовки меню, если надо, могу выложить (правда у меня там шрифт не меняется, но добавить несложно).

Насчёт заголовка формы - просто так не изменишь. Опять же, надо всё самому отрисовывать будет, перехватывая сообщение WM_NCPAINT.
Voland вне форума   Ответить с цитированием
Старый 26.04.2007, 14:38   #8
Vasyatka
 
Регистрация: 19.04.2007
Сообщений: 5
Репутация: 10
По умолчанию

Спасибо! Voland, если можете, скинте мне е-mail
Vasyatka вне форума   Ответить с цитированием
Старый 27.04.2007, 12:28   #9
Voland
Heavy metal
Пользователь
 
Аватар для Voland
 
Регистрация: 02.04.2007
Сообщений: 42
Репутация: 62
По умолчанию

Лучше здесь напишу, может ещё кому пригодится.

Вобщем... После многочисленных экспериментов и долгого изучения исходников VCL, я выяснил следующее:
1. Для смены шрифта меню предусмотрен стандартный способ: объект Screen.MenuFont Он влияет только если у меню OwnerDraw:=True
2. Сменить щрифт на всплывающих подсказках можно аналогичным способом: Screen.HintFont С этим никаких проблем нет.
3. Изменить ВЫСОТУ пунктов меню верхнего уровня (то есть строки меню) не удаётся никак. Поэтому, если установить размер шрифта больше системного, строка меню будет отрисовываться неправильно.

Поэтому в своём модуле я сделал так, что пункты верхнего уровня рисуются стандартным шрифтом, а остальные - заданным.

Как пользоваться:
Код:

...
implementation

uses FontAMD;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  MenuDrawer.AssignToMenu(MainMenu1);  // <-- при необходимости вызываем этот метод для каждого меню
end;
...

Чтобы использовать нестандартный шрифт, устанавливаем MenuDrawer.UseFont:=True и меняем MenuDrawer.Font
Кому интересно - почитайте исходник, прокомментируйте.
Вложения
Тип файла: zip FontAMD.zip (3.1 Кб, 33 просмотров)
Voland вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена данных в icq Marsik Помощь студентам 2 01.05.2008 18:47
вместо шрифтов рисуются иероглифы Sharley Общие вопросы Delphi 4 27.04.2008 18:41
Смена IP-адреса Македонский Работа с сетью в Delphi 13 06.02.2008 20:02
Смена имени Terran Win Api 2 14.12.2007 18:19
Изменение шрифтов xTANATOSx Общие вопросы Delphi 3 07.11.2007 01:02


20:19.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru