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

Вниз

Стиль 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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.046 c
2-1268482467
Первокурсница
2010-03-13 15:14
2010.08.27
Контроль превышения размера числа


15-1268775005
Юрий
2010-03-17 00:30
2010.08.27
С днем рождения ! 17 марта 2010 среда


15-1263763827
Юрий
2010-01-18 00:30
2010.08.27
С днем рождения ! 18 января 2010 понедельник


15-1270894944
имя
2010-04-10 14:22
2010.08.27
Мда ....


2-1273502556
NoSilence
2010-05-10 18:42
2010.08.27
Обновление компонента сендмеседжом