Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменить шрифт заголовка окна [D6, XP]


DC-AC ©   (2010-07-07 15:21:00) 

Доброго времени суток.
Нужно написать заголовок основной формы меньшим шрифтом. Делаю так :

type
TForm1 = class(TForm)
private
  procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
public
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
var
ACanvas: TCanvas;
begin
inherited;
ACanvas := TCanvas.Create;
try
  ACanvas.Handle := GetWindowDC(Form1.Handle);
  with ACanvas do
  begin
    Brush.Color := clActiveCaption;
    Font.Name := 'Tahoma';
    Font.Size := 8;
    Font.Color := clWhite;
    Font.Style := [fsBold];
    TextOut(GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CXBORDER),
      Round((GetSystemMetrics(SM_CYCAPTION) - Abs(Font.Height)) / 2) + 1,
        ' Мой текст');
  end;
finally
  ReleaseDC(Form1.Handle, ACanvas.Handle);
  ACanvas.Free;
end;
end;


Поставил обработчик OnPaint

procedure TForm1.FormPaint(Sender: TObject);
begin
SendMessage(Form1.Handle, WM_NCPAINT, 0, 0);
end;

Этот обработчик помогает при сворачивании-разворачивании окна, а при вызове любой модальной формы или MessageDlg - заголовок у формы пропадает. Какой обработчик еще нужно поставить ?


Юрий Зотов   (2010-07-08 09:37:00) [1]


> DC-AC   (08.07.10 07:55) [5]

Когда-то делал я класс формы с собственной прорисовкой Caption. Сделать-то сделал, но не запросто. Там действительно не все так просто, пришлось вставлять порядка десятка обработчиков.


DC-AC   (2010-07-08 07:55:00) [2]

Наверное придется бросить. Просто потребовалось увеличить длину Caption а куча контролов на форме уже расставлены, так неохота было все заново выравнивать. Несколько десятков MessageDlgPos тоже придется переделывать :-(. Всем спасибо.


Игорь Шевченко   (2010-07-07 16:31:00) [3]

Брось ты эту затею


DC-AC   (2010-07-07 16:05:00) [4]

Частично помогло

 private
   { Private declarations }
  procedure WMNCACTIVATE(var M: TWMNCACTIVATE); message WM_NCACTIVATE;
...
procedure TForm1.WMNCACTIVATE(var M: TWMNCACTIVATE);
var
ACanvas: TCanvas;
begin
inherited;
ACanvas := TCanvas.Create;
try
  ACanvas.Handle := GetWindowDC(Form1.Handle);
  with ACanvas do
  begin
    if M.Active then Brush.Color := clActiveCaption
    else Brush.Color := clInActiveCaption;
    Font.Name := 'Tahoma';
    Font.Size := 8;
    Font.Color := clWhite;
    Font.Style := [fsBold];
    TextOut(GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CXBORDER),
      Round((GetSystemMetrics(SM_CYCAPTION) - Abs(Font.Height)) / 2) + 1,
        ' Мой текст');
  end;
finally
  ReleaseDC(Form1.Handle, ACanvas.Handle);
  ACanvas.Free;
end;
end;

Но : при вызове модальной формы фон заголовка нормальный, при вызове MessageDlg все равно clActiveCaption
if M.Active then Brush.Color := clActiveCaption else Brush.Color := clInActiveCaption не помогает...


Юрий Зотов   (2010-07-07 15:31:00) [5]

WM_NCACTIVATE ?


aka   (2010-07-07 15:30:00) [6]


> Какой обработчик еще нужно поставить ?

их не много, втыком нет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо