Главная страница
    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.067 c
8-1205173351
Ramzes001
2008-03-10 21:22
2010.08.27
Помогите!


2-1274084890
REX
2010-05-17 12:28
2010.08.27
метод ExecSQL (компонент ADOQuery)


15-1271936340
12
2010-04-22 15:39
2010.08.27
PHP. mssql_fetch_array сдвигает курсор?!!


15-1264759264
Alkid
2010-01-29 13:01
2010.08.27
Навеяно трахами с linux mint


2-1273602560
novichek
2010-05-11 22:29
2010.08.27
TCPClient вторая посылка не проходит





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский