Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Иконка кнопки закрытия окна   Найти похожие ветки 

 
Almaz ©   (2004-03-18 02:24) [0]

Вопрос в следующем: как получить изображение кнопки закрытия окна ? Так, например, для того чтобы получить кнопку минимизации можо воспользоваться функцией LoadBitmap(0, MAKEINTRESOURCE(OBM_REDUCE)); но для кнопки закрытия такой константы (OBM_XXX) я не нашел. OBM_CLOSE возвращает не кнопку закрытия а иконку системного меню.


 
Defunct ©   (2004-03-18 03:16) [1]

Что-то мне кажется нет такого ресурса.. или во всяком случае с помощью LoadBitmap его получить низя..

 I := 0;
 X:=0; Y:=0;
 While Y<Image1.Height Do
 Begin
   Bitmap.ReleaseHandle;
   Bitmap.Handle :=
   LoadBitmap(0, MAKEINTRESOURCE(OBM_Close-I+21100));

   If X<Image1.Width Then X := X + Bitmap.Width+1 Else
   Begin
     Y:=Y+Bitmap.Height+1;
     X:=0;
   End;
   Image1.Canvas.Draw(X,Y, Bitmap);
   Inc(i);
 End;

 BitMap.Free;


Мне видится, что скопировать CopyRect со Screen.DC или с Form.DC будет самым простым решением.


 
Almaz ©   (2004-03-18 03:46) [2]


> Что-то мне кажется нет такого ресурса..

Ресурс-то должен быть, вот только как его достать ???


> или во всяком случае с помощью LoadBitmap его получить низя..

А вот в этом-то как раз и все проблема :(


> Мне видится, что скопировать CopyRect со Screen.DC или с
> Form.DC будет самым простым решением.

Я пишу на API - и при этом перехватываю WM_NCPAINT, поэтому тут есть определенные проблемы с таким решением ...


 
Defunct ©   (2004-03-18 04:09) [3]

попробуйте GetSystemMenu


 
MBo ©   (2004-03-18 05:17) [4]

Может, проще нарисовать? (Marlett 0x72) - вот только с темами XP могут быть проблемы...


 
MBo ©   (2004-03-18 05:59) [5]

или DrawFrameControl c DFCS_CAPTIONCLOSE


 
Игорь Шевченко ©   (2004-03-18 12:14) [6]

Система получает эти битмапы рисованием DrawFrameControl на этапе инициализации. Достать их через LoadBitmap невозможно (LoadBitmap перехватывает обращение к OBM_xxxxx идентификаторам и для ряда кнопок заменяет старые идентификаторы на новые (OBI_xxxxx)). Для OBM_CLOSE эквалентная замена на OBI_CLOSE не производится.
Поэтому выход - создать битмап, нарисовать в его контекст DrawFrameControl нужные изображения (для нажатой, отжатой и недоступной кнопки) а дальше пользоваться своим созданным битмапом.


 
Vuk ©   (2004-03-18 12:35) [7]

Похожие символы есть в marlett.ttf


 
Vuk ©   (2004-03-18 12:43) [8]

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


 
Игорь Шевченко ©   (2004-03-18 13:20) [9]

Vuk ©   (18.03.04 12:43)

Именно этот шрифт и используется в реализации DrawFrameControl.
Но лучше использовать саму функцию, так как в WinXP и выше она перехватывается в uxtheme.dll


 
Almaz ©   (2004-03-19 00:26) [10]


> MBo ©   (18.03.04 05:59) [5]
> Игорь Шевченко ©   (18.03.04 12:14) [6]

Спасибо - то что нужно. Про DrawFrameControl я и забыл :)



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

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
3-1078400416
nuinu
2004-03-04 14:40
2004.04.04
Установка Interbase


14-1079010513
SPeller
2004-03-11 16:08
2004.04.04
Абсурд с явкой на выборы


1-1079594264
Infom
2004-03-18 10:17
2004.04.04
dxTreeList


8-1070438607
Pa5ha
2003-12-03 11:03
2004.04.04
Анимация персонажей


3-1078648926
Дмитрий2004
2004-03-07 11:42
2004.04.04
Вопрос на счет значений поля в DBGrid