![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменить шрифт заголовка окна [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]
> Какой обработчик еще нужно поставить ?
их не много, втыком нет?