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

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

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

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

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

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

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

Компонент.Font.(Color | Name | Size), если я тебя правильно понял...
Я, как и ты, думал, что за нами прилетят,
Ошейник снимут, за ухом почешут и всё простят,
Но я сплю у миски, и ты всё съел... В подарок ириска!
Wiggle вне форума Ответить с цитированием
Старый 19.04.2007, 23:18   #3
Vasyatka
 
Регистрация: 19.04.2007
Сообщений: 5
По умолчанию

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

Код:
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
По умолчанию

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

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

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

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

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

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

Вобщем... После многочисленных экспериментов и долгого изучения исходников 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 Кб, 51 просмотров)
Voland вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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