Форум: "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.05 c