![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DrawThemeBackground - CaptionButton - Windows XP (.NET) [D6, WinXP]
Ученик © (2002-10-02 09:01:00)Рисуется кнопка (своя) в заголовке окна с использованием DrawThemeBackground (WP_MINBUTTON),
Проблема: на кнопке присутствует значок минимизации;
Вопрос: возможно ли рисование кнопки без картинки, может режим какой-то надо установить, или в параметры чего-нибудь добавить ?
Ученик (2002-10-04 13:20:00) [21]>Игорь Шевченко © (04.10.02 13:08)
Нарисовать кнопку такую же как системные кнопки в заголовке окна (XP, .NET), но со своей картинкой
Игорь Шевченко (2002-10-04 13:08:00) [22]Ученик © (04.10.02 13:04)
Весьма вероятно. Но я совсем понимаю, что тебе надо. Может, поподробнее ?
Ученик (2002-10-04 13:04:00) [23]Ученик © (04.10.02 13:00)
Использование DrawFrameControl отключает XP-стиль окна
Ученик (2002-10-04 13:00:00) [24]>Игорь Шевченко © (04.10.02 12:54)
Нет
Игорь Шевченко (2002-10-04 12:54:00) [25]Ученик © (04.10.02 12:34)
Значок минимизации рисуется функцией DrawFrameControl
Ученик (2002-10-04 12:34:00) [26]>Ученик © (04.10.02 12:33)
Имеется ввиду как рисуется значок минимизации, перехват, вроде, налажен
Ученик (2002-10-04 12:33:00) [27]>Игорь Шевченко © (04.10.02 12:25)
Поэтому и вопрос в форуме, как добиться, пока рисунок затирается после DrawThemeBackground (но решение не очень),
есть еще идея перехватить вывод картинки, но какой функцией это делается пока не понятно.
Игорь Шевченко (2002-10-04 12:25:00) [28]Ученик © (04.10.02 12:14)
По моему скромному мнению, DrawThemeBackground не распозанет такого пользовательского элемента, как нестандартная кнопка в заголовке окна. Может, я и ошибаюсь...
Ученик (2002-10-04 12:25:00) [29]>Termik © (04.10.02 12:16)
Спасибо, но нужны кнопки
Ученик (2002-10-04 12:24:00) [30]>Игорь Шевченко © (04.10.02 11:57)
Код получше (это Delphi 7)
procedure WMNCPaint(var Message : TWMNCPaint); message WM_NCPAINT;
uses
Themes, XPMan;
procedure TForm1.WMNCPaint(var Message : TWMNCPaint);
var
DC : HDC;
Details: TThemedElementDetails;
begin
inherited;
DC := GetWindowDC(Handle);
if DC <> 0 then try
if ThemeServices.ThemesEnabled then begin
Details := ThemeServices.GetElementDetails(twMinButtonNormal);
ThemeServices.DrawElement(DC, Details, Rect(100, 5, 125, 30));
end
finally
ReleaseDC(Handle, DC)
end
end;
Termik (2002-10-04 12:16:00) [31]Обязательно так рисовать ?
А вот так не подойдет ?
type
TMyForm=class(TForm)
procedure wmSysCommand(var Message:TMessage); message WM_SYSCOMMAND;
end;
const
ID_ABOUT = WM_USER+1;
ID_CALENDAR=WM_USER+2;
ID_EDIT = WM_USER+3;
ID_ANALIS = WM_USER+4;
implementation
procedure TMyForm.wmSysCommand;
begin
case Message.wParam of
ID_CALENDAR:DatBitBtnClick(Self) ;
ID_EDIT :EditBitBtnClick(Self);
ID_ANALIS:AnalisButtonClick(Self);
end;
inherited;
end;
procedure TMyForm.FormCreate(Sender: TObject);
var SysMenu:THandle;
begin
SysMenu:=GetSystemMenu(Handle,False);
InsertMenu(SysMenu,Word(-1),MF_SEPARATOR,ID_ABOUT,"");
InsertMenu(SysMenu,Word(-1),MF_BYPOSITION,ID_Calendar, "Calendar");
InsertMenu(SysMenu,Word(-1),MF_BYPOSITION,ID_Analis, "Analis");
InsertMenu(SysMenu,Word(-1),MF_BYPOSITION,ID_Edit, "Edit");
end;
Ученик (2002-10-04 12:14:00) [32]>BP_xxxx
Кнопка будет не того стиля.
uses
Themes;
var
ThemedWindow : TThemedWindow;
...
ThemedWindow := twMinButtonNormal;
if ThemeServices.ThemesEnabled then begin
Details := ThemeServices.GetElementDetails(ThemedWindow);
ThemeServices.DrawElement(FCanvas.Handle, Details, FButtonRect);
end;
Игорь Шевченко (2002-10-04 11:57:00) [33]WP_MINBUTTON - это кнопка минимизации.
Может, BP_xxxx поможет ?
(XP под рукой нет, если не получится, давай код, дома попробую)
Ученик (2002-10-04 11:49:00) [34]>Игорь Шевченко © (04.10.02 11:30)
Какую часть сообщения ?
Игорь Шевченко (2002-10-04 11:30:00) [35]А поподробнее ?
Ученик (2002-10-04 10:35:00) [36]Проблема еще не решена, может есть идеи ?