Форум: "WinAPI";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизСтиль Windows Xp для нарисованой кнопки на Caption bar ? Найти похожие ветки
← →
kolj (2009-01-08 15:07) [0]Привет всем!!!
Возникла следующа проблемка:
Нужно сделать кнопку на Caption bar формы (код ниже),с этим проблем нет, однако возникла другая проблема: Когда в Windows xp стоит стиль Windows Xp (не классический) кнопка рисуется в классическом стиле, и наложение Xpmanifest не помогает. Как можно решить эту проблему ? Благодарю.
procedure TForm1.DrawCaptButton;
var
xFrame, yFrame, xSize, ySize: integer;
R: TRect;
begin
xFrame:= GetSystemMetrics(SM_CXFRAME);
yFrame:= GetSystemMetrics(SM_CYFRAME);
xSize:= GetSystemMetrics(SM_CXSIZE);
ySize:= GetSystemMetrics(SM_CYSIZE);
CaptionBtn:= Bounds(Width - xFrame - 4*xSize + 2,
yFrame + 2, xSize - 2, ySize - 4);
Canvas.Handle:= GetWindowDC(Self.Handle);
Canvas.Font.Name:= "Symbol";
Canvas.Font.Color:= clBlue;
Canvas.Font.Style:= [fsBold];
Canvas.Pen.Color:= clYellow;
Canvas.Brush.Color:= clBtnFace;
try
DrawButtonFace(Canvas, CaptionBtn, 1, bsnew, False, False, False);
R:= Bounds(Width - xFrame - 4*xSize + 2,
yFrame + 3, xSize - 6, ySize - 7);
with CaptionBtn do
Canvas.TextRect(R, R.Left + 2, R.Top - 1, "W");
finally
ReleaseDC(Self.Handle, Canvas.Handle);
Canvas.Handle:= 0;
end;
end;
← →
Eraser © (2009-01-08 16:24) [1]> [0] kolj (08.01.09 15:07)
для начала, посмотреть готорые решения, например из пакета JEDI VCL. но там у кнопки серьезный недостаток, при ресайзе формы есть утечка огромного количества GDI дескрипторов.
← →
kolj (2009-01-08 19:25) [2]Как оказалось всьо просто. В место ф-и DrawButtonFace надо использовать ф-ю DrawThemeBackground.
← →
Eraser © (2009-01-08 19:59) [3]научишься рисовать такие стилизованные кнопки в висте с включенным аеро - скажи )
← →
Maks1509 (2009-01-26 00:33) [4]Да вот что-то типа такого.
http://webdrive.avtograd.ru/Download/Explorer/sources/caption_button_theme_src.zip
← →
Eraser © (2009-01-29 08:08) [5]вот так в висте выглядит этот пример http://f.imagehost.org/0470/example.png
← →
Maks1509 (2009-02-01 11:03) [6]Я кстати хотел универсально сделать с пересчетом координат на нестандартных темах оформления еще.
SizeX := GetSystemMetrics(SM_CXSMSIZE) - GetSystemMetrics(SM_CXFRAME);
SizeY := GetSystemMetrics(SM_CYSMSIZE) - GetSystemMetrics(SM_CYFRAME);
xFrame := GetSystemMetrics(SM_CXFRAME);
yFrame := GetSystemMetrics(SM_CYFRAME);
iWidth := WindowRect.Right - WindowRect.Left;
hhh:=GetSystemMetrics(SM_CXEDGE)*2+1;
if InitThemeLibrary and UseThemes then
// ширина - 5 - 16
MinBtnRect := Bounds(
iWidth - (hhh + (SizeX*2) + GetSystemMetrics(SM_CXEDGE)),
xFrame+1,
SizeX,
Sizey
);
MinBtnRect.Left := iWidth - (hhh + (SizeX*2) + GetSystemMetrics(SM_CXEDGE))-15;
MinBtnRect.top := xFrame+1;
MinBtnRect.right := 192+SizeX;//192 заменить на величину, не помню, тут она вычисляется, я просто так еще решил проверить
MinBtnRect.bottom := MinBtnRect.top+Sizey;
Как-то так вычислял длинну и высоту кнопок. Только с посдчетом координат фигня. Кнопка вполовину рисуется почему -то.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.064 c