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

Вниз

Tab_Control и поддержка Visual Styles   Найти похожие ветки 

 
Comp ©   (2004-10-23 22:52) [0]

Здравствуйте, уважаемые мастера. Пожскажите пожалуйста (кто знает) почему когда меняешь стиль этого контрола на TCS_BUTTONS то пропадает поддержка Visual Styles у него. Когда обычные закладки - все нормалько. Как только кнопки - то все. Старый добрый win98... Подскажите пожалуйста, можно это исправить самому или смириться? Буду очень благодарен.

На всякий случай привожу код моей экспериментальной проги.


program window;

uses
 windows,
 messages,CommCtrl;

{$R unit1.RES}
var
   wcl,WndClassName: TWNDCLASS;
   msg: TMSG;
   hMainWnd, tabcontrol1: HWND;
   szWinName: PCHAR;
   szBuff: array[0 .. 18] of char;
   tie:TC_ITEM;

function WindowFunc(hMainWnd: HWND; iMsg: integer; wParam: WPARAM; lParam: LPARAM):Integer; stdcall;

{НА ЭТО ВНИМАНИЕ МОЖНО НЕ ОБРАЩАТЬ}

   const
   dwPenStyle: array [0..5] of Word = (
                          PS_DASH,
                          PS_DASHDOT,
                          PS_DOT,
                          PS_INSIDEFRAME,
                          PS_NULL,
                          PS_SOLID

                       );
  uHatch: array [0..5] of UINT= (
                     HS_BDIAGONAL,
                     HS_CROSS,
                     HS_DIAGCROSS,
                     HS_FDIAGONAL,
                     HS_HORIZONTAL,
                     HS_VERTICAL
                    );
var
   ps:PAINTSTRUCT ;
   lb:LOGBRUSH ;
   rc:TRECT ;
   hdcw:HDC ;
   i:cardinal ;
   hPenw, hPenOld:HPEN ;
begin

   case iMsg of
         WM_CREATE:
         begin
            InitCommonControls;
         end;

      { WM_PAINT:
        begin
           GetClientRect(hMainWnd, rc);
           rc.left:=rc.left+10;
           rc.top :=rc.top +10;
           rc.bottom:= rc.bottom-10;
           lb.lbStyle := BS_SOLID;
           lb.lbColor := RGB(255,0,0);
           lb.lbHatch := 0;

           hdcw := BeginPaint(hMainWnd, ps);
           for i := 0 to 6 do
           begin
               hPenw := ExtCreatePen(PS_COSMETIC + dwPenStyle[i],
                                   1, lb, 0, Nil);
               hPenOld := SelectObject(hdcw, hPenw);
               MoveToEx(hdcw, rc.left + (i * 20), rc.top, Nil);

               LineTo(hdcw, rc.left + (i * 20), rc.bottom);
               SelectObject(hdcw, hPenOld);
               DeleteObject(hPenw);

           end;
           rc.left := rc.left +150;
           for i := 0 to 6 do
           begin
               lb.lbStyle := BS_HATCHED;
               lb.lbColor := RGB(0,0,255);
               lb.lbHatch := uHatch[i];
               hPenw := ExtCreatePen(PS_GEOMETRIC,
                                   5, lb, 0, Nil);

               hPenOld := SelectObject(hdcw, hPenw);
               MoveToEx(hdcw, rc.left + (i * 20), rc.top, Nil);
               LineTo(hdcw, rc.left + (i * 20), rc.bottom);
               SelectObject(hdcw, hPenOld);
               DeleteObject(hPenw);
           end;
          // Rectangle(hdcw,0,0,100,100);
           EndPaint(hMainWnd, ps); }

    //   end;

       WM_DESTROY:
       begin
           DeleteObject(hPenw);
           PostQuitMessage(0);
       end;
end;

          result:= DefWindowProc(hMainWnd, iMsg, wParam, lParam);

end;

begin

szWinName := "MyClass";

wcl.hInstance:= hInstance;
wcl.lpszClassName:= szWinName;
wcl.lpfnWndProc:= @WindowFunc;
wcl.style:= CS_PARENTDC;
wcl.hCursor:= LoadCursor(0,IDC_ARROW);
wcl.lpszMenuName:= nil;
wcl.cbClsExtra:= 0;
wcl.cbWndExtra:= 0;
wcl.hbrBackground:= COLOR_WINDOW;
RegisterClass(Wcl);

hMainWnd:= CreateWindow(szWinName, "API.", (WS_OVERLAPPEDWINDOW or WS_THICKFRAME or WS_MAXIMIZEBOX),
                       CW_USEDEFAULT, CW_USEDEFAULT,
                       300, 170,0,0, hInstance, nil);

{Все начинается тут}

tabcontrol1:=CreateWindow(WC_TABCONTROL,"123",
    WS_VISIBLE+WS_CHILD+TCS_BUTTONS,
    0,0,300,170,hMainWnd,0,hInstance,nil);
tie.mask := TCIF_TEXT;
   tie.iImage := -1;
   tie.pszText := "ddddd";
   SendMessage(tabcontrol1,TCM_INSERTITEM,0,LPARAM(@tie));
   SendMessage(tabcontrol1,TCM_INSERTITEM,1,LPARAM(@tie));

ShowWindow(hMainWnd, CmdShow);
UpdateWindow(hMainWnd);

while(GetMessage(msg, 0, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;

end.



 
Comp ©   (2004-10-24 00:18) [1]

Короче, искал,искал инфу по инету - ничего нигде нет. Остается тока одно мнение - это недоработка Майкрософт. И скорее всего так оно и есть. Конечно жалко потраченного времени и денег на этот несчастный мегабайт.

Всем спасибо за внимание.


 
Gero ©   (2004-10-24 07:48) [2]

Рисовать темы надо самому, если хочешь чтобы хорошо выглядело.
С Delphi7 поставляется UxTheme.pas, это тебе поможет.


 
DVM ©   (2004-10-24 13:00) [3]


> Comp ©   (24.10.04 00:18) [1]

Можно эту недоработку легко исправить. Подменяешь оконную процедуру TabControl и рисуешь кнопки сам. Я делал подобное. Сделал кнопки на TabControl такими же как кнопки на панели задач при включенных темах. Получилось красиво.


 
Gero ©   (2004-10-24 13:16) [4]


> DVM ©   (24.10.04 13:00)

<off>
Ты мне кстати обещал пример прислать по этому поводу.
</off>


 
DVM ©   (2004-10-24 13:20) [5]


> Gero ©   (24.10.04 13:16) [4]

Извини, забыл. Работы море, закрутился. Постараюсь в ближайшее время выдрать кусок из программы и прислать.


 
Comp ©   (2004-10-24 20:55) [6]


>  [5] DVM ©   (24.10.04 13:20)


>  [2] Gero ©   (24.10.04 07:48)


 Спасибо за подсказки!!!
 Постараюсь что-нибудь придумать. Если получится - это будет ништяк. Будет новая революция в моих знаниях по API...


 
Comp ©   (2004-10-24 23:15) [7]

Спасибо, мужики, еще раз.

Нашел просто, но сначала потратил 7 Мб на бесполезное рыскание по интернету, пока не вспомнил свой старый добрый, быстрый и точный метод поиска.
Открыл UxTheme.pas, как посоветовали в

[2] Gero ©   (24.10.04 07:48)
, нашел первую попавшуюся жертву из этого кода - ею оказалась функция


 DrawThemeBackground(...)


И ввел в поле ввода на google.ru.
 Результат не заставил себя долго ждать - в конечном итоге я имею на руках исходники демонстрационной программы (хоть на С++, но это не страшно), в которой показывается прорисовка визуальных стилей.
 Конечно, мой недостаток в том, что я не сразу догадываюсь, что надо делать.
 Пока не отдал почти 2 $ этому проклятому Билайну за интернет...
 
Извините...


 
DVM ©   (2004-10-25 10:28) [8]


> Comp ©   (24.10.04 23:15) [7]

А еще на этом сайте есть статья "Использование визуальных стилей XP в своих органах управления"


 
Comp ©   (2004-10-25 16:38) [9]


>  [8] DVM ©   (25.10.04 10:28)


Да, она есть и на моем компе - уже когда-то успед сохранить, когда искал глобальную поддержку визуальных стилей во всем приложении. (Хотя оказалось, что этот вопрос решается намного проще).


 
DVM ©   (2004-10-25 18:41) [10]

> Comp ©
> Gero ©

Собственная отрисовка кнопок в TabControl.
http://www.dvm.com.ru/files/TabControlDemo.zip


 
Comp ©   (2004-10-25 18:46) [11]


>  [10] DVM ©   (25.10.04 18:41)


Спасибо ОГРОМНОЕ!!!

Теперь решатся и многие другие вопросы...



Страницы: 1 вся ветка

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

Наверх




Память: 0.51 MB
Время: 0.024 c
4-1098871748
olevacho
2004-10-27 14:09
2004.12.12
запуск команд под другой учетной записью


14-1101020968
zokzok
2004-11-21 10:09
2004.12.12
М. Кэнту - Delphi 7 для проф.


14-1101037120
Новичек
2004-11-21 14:38
2004.12.12
Посмейтесь, Мастера :-)


3-1100531559
Dionnis
2004-11-15 18:12
2004.12.12
Использование индексов


8-1094651546
SNV888
2004-09-08 17:52
2004.12.12
проигрывание MOD файлов