Главная страница
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.023 c
14-1078690330
juiceman
2004-03-07 23:12
2004.04.04
убить чужой процесс


3-1078212725
Anics
2004-03-02 10:32
2004.04.04
Как организовать циклический поиск по таблице?


6-1075407578
Arsen
2004-01-29 23:19
2004.04.04
Save As... в TWebBrowser


6-1074868075
Sound
2004-01-23 17:27
2004.04.04
Как очистить папку History?


3-1078686579
zyurik
2004-03-07 22:09
2004.04.04
Проблема с удалением