Главная страница
    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.075 c
15-1268775005
Юрий
2010-03-17 00:30
2010.08.27
С днем рождения ! 17 марта 2010 среда


3-1239500260
andirock2112
2009-04-12 05:37
2010.08.27
Связь многие ко многим


15-1271261484
[true]TRIx
2010-04-14 20:11
2010.08.27
Ищу дельфи пример Цепи Маркова.


2-1273682768
ArtMoniac
2010-05-12 20:46
2010.08.27
Network Multimedia. класс не найден


2-1267513524
MAX
2010-03-02 10:05
2010.08.27
текст на MessageDlg





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