Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.24 c
15-1267312427
Когда-то_был_тут
2010-02-28 02:13
2010.08.27
Напомните писателя


15-1268173375
Германн
2010-03-10 01:22
2010.08.27
Паранойя или троешники?


15-1265308439
Leonid Troyanovsky
2010-02-04 21:33
2010.08.27
Джо Вономасса & Томми Эммануэль, гитара (Австралия)


15-1269250635
Delphist2
2010-03-22 12:37
2010.08.27
уменьшение размера exe


6-1216658120
evil_mike
2008-07-21 20:35
2010.08.27
tclientsocket без компонента на форме..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский