Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

Заголовок формы   Найти похожие ветки 

 
Е.   (2006-01-05 10:42) [0]

У формы FormStyle=fsStayOnTop. Можно ли сделать так чтобы заголовок формы имел активный вид, даже когда сама форма неактивна?


 
TUser ©   (2006-01-05 11:45) [1]

procedure WmNcActivate (var M: TWMNcActivate); message WM_NCACTIVATE;

procedure TForm1.WmNcActivate (var M: TWMNcActivate);
begin
 if M.Active then
   inherited;
end;


 
Е.   (2006-01-05 13:02) [2]

Это конечно работает, но остальные формы в приложении становятся неуправляемыми.


 
КиТаЯц ©   (2006-01-05 14:15) [3]


> Е.   (05.01.06 10:42)
>
> У формы FormStyle=fsStayOnTop. Можно ли сделать так чтобы
> заголовок формы имел активный вид, даже когда сама форма
> неактивна?

Позвольте поинтересоваться для чего?


 
Е.   (2006-01-08 14:12) [4]

>КиТаЯц ©   (05.01.06 14:15) [3]

На основной форме имеется DBGrid, на второй форме (FormStyle=sStayOnTop) отображается информация об активной записи основной формы. Для отображения этой информации используется в т.ч. заголовок второй формы, поэтому необходимо, чтобы он имел активный вид.

PS. Интересно, почему мордератор переместил вопрос в категорию «Начинающим», может он сам и ответит на этот простой вопрос?


 
Е.   (2006-01-08 16:07) [5]

Кто-нибудь поможет новичку программирования?


 
Юрий Зотов ©   (2006-01-09 02:58) [6]

> Е. (08.01.06 16:07) [5]

Вообще говоря, не следует желать странного и вводить бедного юзера в недоумение столь нестандартным интерфейсом. Но если так уж сильно хочется непременно удивить мир, то придется, видимо, отрисовывать заголовок самому. Делается это примерно так:

procedure TForm1.WndProc(var Message: TMessage);
var
 DC: HDC;
 F, B, H: integer;
 G: BOOL;
 Flags: cardinal;
begin
 inherited;
 if Message.Msg in [WM_NCPAINT, WM_NCACTIVATE] then
 begin
   F := GetSystemMetrics(SM_CYSIZEFRAME);
   B := GetSystemMetrics(SM_CXSIZE);
   H := GetSystemMetrics(SM_CYCAPTION);
   SystemParametersInfo(SPI_GETGRADIENTCAPTIONS, 0, @G, 0);
   Flags := DC_ACTIVE or DC_ICON or DC_TEXT or DC_BUTTONS;
   if G then
     Flags := Flags or DC_GRADIENT;
   DC := GetWindowDC(Handle);
   try
     DrawCaption(Handle, DC, Rect(F, F, Width - F - 3 * B, H + F - 2), Flags)
   finally
     ReleaseDC(Handle, DC)
   end
 end
end;

Но код этот нужно рассматривать именно как пример, потому что он не решает всех вопросов. Во-первых, при градиентном заголовке запросто могут возникнуть трудности с отрисовкой зоны, в которой расположены системные кнопки. Во-вторых, этот код не поддерживает темы XP.

И когда Вы с этими проблемами намучаетесь, то, надеюсь, убедитесь, что овчинка не стоит выделки. И что странного действительно желать не следует (кстати, это характерно именно для начинающих).

Best regards.


 
Е.   (2006-01-09 08:50) [7]


> > Е. (08.01.06 16:07) [5]


В любом случае, спасибо за конструктивный ответ, именно это и было нужно.


 
Е.   (2006-01-09 08:53) [8]


> Юрий Зотов ©   (09.01.06 02:58) [6]

(С цитатой промахнулся:)


 
TUser ©   (2006-01-09 11:29) [9]


> Юрий Зотов ©   (09.01.06 02:58) [6]

А почему нельзя просто не обрабатывать wm_ncactivate при деактивировании формы? При обработке этого события что-то еще происходит, кроме ненужной (в смысле [0]) перерисовки заголовка?


 
Юрий Зотов ©   (2006-01-09 12:41) [10]

> TUser ©   (09.01.06 11:29) [9]

Если Вы имеете в виду [1], то ответ в [2]. Если же имеется в виду перерисовка при деактивации, то этого, видимо, будет недостаточно. Например, если по неактивной форме повозить другим окном, то деактивации не происходит, а перерисовка все равно требуется.

Первоначально я предполагал, что достаточно будет обрабатывать только WM_NCPAINT, но оказалось, что нет - поэтому в [6] и появилось WM_NCACTIVATE. Вообще говоря, перерисовка [6] происходит чаще, чем нужно и в этом смысле код далек от хорошего. Я не стал усложнять его только потому, что писал пример, а не готовое решение.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 1.501 c
15-1136806914
psa247
2006-01-09 14:41
2006.01.29
Кодировка ?


2-1136948053
petrorap
2006-01-11 05:54
2006.01.29
Вопрос по EhLib


2-1137407413
Id
2006-01-16 13:30
2006.01.29
IBsql


15-1136959135
Барлог(с)
2006-01-11 08:58
2006.01.29
И снова про "Начинающим"


15-1136754461
DillerXX
2006-01-09 00:07
2006.01.29
Клиническая смерть





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский