Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

Все-таки как включить поддержку Visual Styles ????   Найти похожие ветки 

 
Comp ©   (2004-09-26 18:02) [0]

Народ, нужен пример. Пишу чисто на API. С++ пока не изучал, довольствуюсь Delphi. Как правильно настроить это дело?
Я не думаю, что обязательно надо все самому рисовать - можно и Windows заставить это делать. Ведь на то и API нужны...


 
Dimaxx   (2004-09-26 22:16) [1]

Есть такая штука как манифест.


 
Comp ©   (2004-09-27 00:02) [2]

Dimaxx , Ну? Я слышал.
Но тока он не работает с программами, которые написаны на API.
Я слышал, что его как-то в ресурсный файл вшивают. А как потом использовать?


 
Yanis ©   (2004-09-27 00:09) [3]

Не нужно ничего "вшивать". Если у тебя 7 delphi то просто в uses напиши XPMan или напиши:

{$R WindowsXP.res}


>А как потом использовать?
Он сам работает.


 
Comp ©   (2004-09-27 00:19) [4]

Yanis, да, у мня Д7 и это все работает.
Но тока когда программируешь через VCL.
На АПИ ЭТО ВСЕ НЕ ПАШЕТ!
Иначе я бы вопрос не задавал.
А не работает просто - элементы не создаются, ничего не видно, не слышно... Тока одно окно висит и все.


 
Gero ©   (2004-09-27 00:20) [5]


> А не работает просто - элементы не создаются, ничего не
> видно, не слышно...

У тебя ошибка в программе.


 
Cobalt ©   (2004-09-27 00:21) [6]

Гы :)
А окна точно создаются? Посмотри WinSight"ом.


 
Comp ©   (2004-09-27 00:27) [7]

Gero, замечание мало-мальски по существу...

Люди, исходный код гляньте, пожалуйста:
(Правда он не мой, где взял не помню, но создание окна через АПИ происходит...)



program window;

uses
 windows, messages;
{$R *.RES}

//îáúÿâëåíèÿ ïåðåìåííûõ
var
   wcl: TWNDCLASS;
   msg: TMSG;
   hMainWnd, hButton1, hButton2, hEdit1, hEdit2, hStatic: HWND;
   szWinName: PCHAR;
   szBuff: array[0 .. 18] of char;

//îêîííàÿ ôóíêöèÿ
procedure WindowFunc(hMainWnd: HWND; iMsg: integer; wParam: WPARAM; lParam: LPARAM); stdcall;
Begin
case iMsg of
   WM_DESTROY: PostQuitMessage(0);

   WM_COMMAND:
   begin
       if (HWND(lParam) = hButton2) and (wParam = HIWORD(BN_CLICKED)) then PostQuitMessage(0);

       if (HWND(lParam) = hButton1) and (wParam = HIWORD(BN_CLICKED)) then
           begin
               GetWindowText(hEdit1, szBuff, 18);
               SetWindowText(hEdit2, szBuff);
           end;
   end

   else
   DefWindowProc(hMainWnd, iMsg, wParam, lParam);
   end;
End;

begin
//èìÿ îêîííîãî êëàññà
szWinName := "MyClass";
//çàïîëíÿåì ñòðóêòóðó òèïà TWNDCLASS
wcl.hInstance:= hInstance;
wcl.lpszClassName:= szWinName;
wcl.lpfnWndProc:= @WindowFunc;
wcl.style:= 0;
wcl.hIcon:= LoadIcon(0, IDI_ASTERISK);
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 xor WS_THICKFRAME xor WS_MAXIMIZEBOX),
                       CW_USEDEFAULT, CW_USEDEFAULT,
                       300, 170, 0, 0, hInstance, nil);

hButton1:= CreateWindow("button", "Copy", WS_CHILD or WS_VISIBLE, 200, 10, 70, 25, hMainWnd, 0, hInstance, nil);
hButton2:= CreateWindow("button", "Close", WS_CHILD or WS_VISIBLE, 200, 40, 70, 25, hMainWnd, 0, hInstance, nil);
hEdit1:= CreateWindowEx(WS_EX_CLIENTEDGE, "edit", nil, WS_CHILD or WS_VISIBLE or WS_BORDER, 20, 10, 150, 25, hMainWnd, 0, hInstance, nil);
hEdit2:= CreateWindowEx(WS_EX_CLIENTEDGE, "edit", nil, WS_CHILD or WS_VISIBLE or WS_BORDER or ES_READONLY, 20, 40, 150, 25, hMainWnd, 0, hInstance, nil);
hStatic:= CreateWindow("static", "Ïðè íàæàòèè íà êíîïêó Copy, òåêñò èç ïåðâîãî ïîëÿ ââîäà êîïèðóåòñÿ âî âòîðîå.",
       WS_CHILD or WS_VISIBLE or SS_CENTER, 20, 70, 150, 70, hMainWnd, 0, hInstance, nil);

// âûâîäèì íà ýêðàí è ïåðåðèñîâûâàåì îêíî
ShowWindow(hMainWnd, CmdShow);
UpdateWindow(hMainWnd);

// öèêë ñîîáùåíèé
while(GetMessage(msg, 0, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;

end.



 
Comp ©   (2004-09-27 01:07) [8]

Мужики, файл манифеста есть. В ресурсном файле.
Но не хотят почему то кнопочки отрисовываться. Хоть убей.
Может что не так делаю?
Я вставляю строчку {$R WindowsХР.RES} после {$R *.RES} и все.
Окно чистое.


 
Yanis ©   (2004-09-27 01:08) [9]

Странно.


 
Comp ©   (2004-09-27 01:14) [10]

Yanis, ну код вроде бы правильный. Все как должно. У меня Делфи 7.
А беда не отстает...


 
Yanis ©   (2004-09-27 02:38) [11]

Геморно конечно, но твою проблему я только так смог решить.

Скачивай прирмер:
http://actualsoft.narod.ru/Sample.rar
И нужные к нему юниты:
http://actualsoft.narod.ru/units.rar


 
Yuri Btr ©   (2004-09-27 10:16) [12]

Совершенно правильное замечание высказал Comp
У меня та же самая проблема.
При создании окон например из ресурсов (dialog template) при подключенном файле манифеста происходит крах приложения....
Хотя всё исключительно "микрософтовские штучки" :)


 
Yuri Btr ©   (2004-09-27 10:34) [13]

Все ясно, нужно вызвать  SetWindowTheme , который описан в библиотеке EldoS, но не проще (бесплатней) взять описание в Jedi Win32 API
там есть JwaUxTheme, где и описана эта ф-ия


 
Users   (2004-09-27 11:14) [14]

Попробуйте сделать вызов на окне:

  WM_CREATE:
     Begin
       InitCommonControls;
       ...
     End;

у меня был подобный глюк. Процедура в CommCtrl.pas, но чтоб его не тащить можно выдрать в свой модуль.


 
Users   (2004-09-27 11:16) [15]

Interface
...

Procedure InitCommonControls; StdCall;

...
Implementation

Procedure InitCommonControls; External "comctl32.dll" name "InitCommonControls";


 
Comp ©   (2004-09-27 12:36) [16]

Все перепробую, пересмотрю, если что, напишу.
Если получится - то только благодарности...!


 
Comp ©   (2004-09-27 16:13) [17]

Yanis, ты молодец.
 Экзешник запускается, все ништяк работает.
Тока прикинь, открываю проект, копирую файлы из папки Users в рабочую, компилирую и все.
Та же беда. Может что делфи не так или Windows...


 
Comp ©   (2004-09-27 16:27) [18]

Users, процедура игнорируется.

Может что не так.

program window;

uses
 windows,
 messages,CommCtrl;

{$R *.RES}
var
   wcl: TWNDCLASS;
   msg: TMSG;
   hMainWnd, hButton1, hButton2, hEdit1, hEdit2, hStatic: HWND;
   szWinName: PCHAR;
   szBuff: array[0 .. 18] of char;

procedure WindowFunc(hMainWnd: HWND; iMsg: integer; wParam: WPARAM; lParam: LPARAM); stdcall;
Begin
case iMsg of
   WM_DESTROY: PostQuitMessage(0);
   WM_CREATE:
    Begin
      InitCommonControls;
    End;

   WM_COMMAND:
   begin
       if (HWND(lParam) = hButton2) and (wParam = HIWORD(BN_CLICKED)) then PostQuitMessage(0);

       if (HWND(lParam) = hButton1) and (wParam = HIWORD(BN_CLICKED)) then
           begin
               GetWindowText(hEdit1, szBuff, 18);
               SetWindowText(hEdit2, szBuff);
           end;
   end

   else
   DefWindowProc(hMainWnd, iMsg, wParam, lParam);
   end;
End;

begin

szWinName := "MyClass";

wcl.hInstance:= hInstance;
wcl.lpszClassName:= szWinName;
wcl.lpfnWndProc:= @WindowFunc;
wcl.style:= 0;
wcl.hIcon:= LoadIcon(0, IDI_ASTERISK);
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 xor WS_THICKFRAME xor WS_MAXIMIZEBOX),
                       CW_USEDEFAULT, CW_USEDEFAULT,
                       300, 170, 0, 0, hInstance, nil);

hButton1:= CreateWindow("button", "Copy", WS_CHILD or WS_VISIBLE, 200, 10, 70, 25, hMainWnd, 0, hInstance, nil);
hButton2:= CreateWindow("button", "Close", WS_CHILD or WS_VISIBLE, 200, 40, 70, 25, hMainWnd, 0, hInstance, nil);
hEdit1:= CreateWindowEx(WS_EX_CLIENTEDGE, "edit", nil, WS_CHILD or WS_VISIBLE or WS_BORDER, 20, 10, 150, 25, hMainWnd, 0, hInstance, nil);
hEdit2:= CreateWindowEx(WS_EX_CLIENTEDGE, "edit", nil, WS_CHILD or WS_VISIBLE or WS_BORDER or ES_READONLY, 20, 40, 150, 25, hMainWnd, 0, hInstance, nil);
hStatic:= CreateWindow("static", "Ïðè íàæàòèè íà êíîïêó Copy, òåêñò èç ïåðâîãî ïîëÿ ââîäà êîïèðóåòñÿ âî âòîðîå.",
       WS_CHILD or WS_VISIBLE or SS_CENTER, 20, 70, 150, 70, hMainWnd, 0, hInstance, nil);
ShowWindow(hMainWnd, CmdShow);
UpdateWindow(hMainWnd);

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

end.


 
Comp ©   (2004-09-27 16:33) [19]

Yuri Btr, а где её вызывать? Модули эти у меня есть, процедуру я нашел.
В процессе создания окна?
WM_CREATE


 
Users   (2004-09-27 17:08) [20]

Что значит "процедура игнорируется". Должно работать.
Я тебе на email пример рабочий выслал.


 
Lin7   (2004-09-27 17:22) [21]


> Comp ©   (26.09.04 18:02)


Может эта информация окажется полезной :)
http://www.akzhan.midi.ru/devcorner/articles/Windows%20Visual%20Styles%20(Themes)%20API%20Support%20in%20Your%20controls .htm


 
Comp ©   (2004-09-27 17:26) [22]

Lin7, спасибо, я её всю перечитал почти. Она по всему инету эта статья разослана. Больше никто эти темы не поднимал.


 
Lin7   (2004-09-27 17:29) [23]


> Comp ©   (27.09.04 17:26) [22]
> ... Больше никто эти темы не поднимал

В своё время искал и тоже больше ничего не нашёл :(


 
Comp ©   (2004-09-27 17:50) [24]

НУ ВСЕ!!!!!!!!!!!!

ЗАРАБОТАЛО!

СПАСИБО USERS!

Именно благодаря этому человеку вопрос фактически решен, и данная тема закрывается.

СПАСИБО ВСЕМ, КТО УЧАВСТВОВАЛ И ДАВАЛ СОВЕТЫ!

Dimaxx

Yuri Btr ©

Yanis ©

Cobalt ©

Users

Lin7


 
Comp ©   (2004-09-27 17:50) [25]

Удалено модератором
Примечание: Дубль



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

Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.042 c
4-1095952236
Mirror
2004-09-23 19:10
2004.10.31
Поиск файла


1-1098100780
Jolik
2004-10-18 15:59
2004.10.31
Exception & Result


4-1095947982
MakNik
2004-09-23 17:59
2004.10.31
Имя компьютера


1-1097650128
Rentgen
2004-10-13 10:48
2004.10.31
Как узнать число-ли переменная S:String;


3-1094811335
VictorT
2004-09-10 14:15
2004.10.31
Распределение записей в таблице по часам в сутках





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