![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Все-таки как включить поддержку Visual Styles ???? [D6, D7]
Comp © (2004-09-26 18:02:00)Народ, нужен пример. Пишу чисто на API. С++ пока не изучал, довольствуюсь Delphi. Как правильно настроить это дело?
Я не думаю, что обязательно надо все самому рисовать - можно и Windows заставить это делать. Ведь на то и API нужны...
Comp (2004-09-27 17:50:00) [1]Удалено модератором
Примечание: Дубль
Comp (2004-09-27 17:50:00) [2]НУ ВСЕ!!!!!!!!!!!!
ЗАРАБОТАЛО!
СПАСИБО USERS!
Именно благодаря этому человеку вопрос фактически решен, и данная тема закрывается.
СПАСИБО ВСЕМ, КТО УЧАВСТВОВАЛ И ДАВАЛ СОВЕТЫ!
Dimaxx
Yuri Btr ©
Yanis ©
Cobalt ©
Users
Lin7
Lin7 (2004-09-27 17:29:00) [3]
> Comp © (27.09.04 17:26) [22]
> ... Больше никто эти темы не поднимал
В своё время искал и тоже больше ничего не нашёл :(
Comp (2004-09-27 17:26:00) [4]Lin7, спасибо, я её всю перечитал почти. Она по всему инету эта статья разослана. Больше никто эти темы не поднимал.
Lin7 (2004-09-27 17:22:00) [5]
> Comp © (26.09.04 18:02)
Может эта информация окажется полезной :)
http://www.akzhan.midi.ru/devcorner/articles/Windows%20Visual%20Styles%20(Themes)%20API%20Support%20in%20Your%20controls .htm
Users (2004-09-27 17:08:00) [6]Что значит "процедура игнорируется". Должно работать.
Я тебе на email пример рабочий выслал.
Comp (2004-09-27 16:33:00) [7]Yuri Btr, а где её вызывать? Модули эти у меня есть, процедуру я нашел.
В процессе создания окна?
WM_CREATE
Comp (2004-09-27 16:27:00) [8]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:13:00) [9]Yanis, ты молодец.
Экзешник запускается, все ништяк работает.
Тока прикинь, открываю проект, копирую файлы из папки Users в рабочую, компилирую и все.
Та же беда. Может что делфи не так или Windows...
Comp (2004-09-27 12:36:00) [10]Все перепробую, пересмотрю, если что, напишу.
Если получится - то только благодарности...!
Users (2004-09-27 11:16:00) [11]Interface
...
Procedure InitCommonControls; StdCall;
...
Implementation
Procedure InitCommonControls; External 'comctl32.dll' name 'InitCommonControls';
Users (2004-09-27 11:14:00) [12]Попробуйте сделать вызов на окне:
WM_CREATE:
Begin
InitCommonControls;
...
End;
у меня был подобный глюк. Процедура в CommCtrl.pas, но чтоб его не тащить можно выдрать в свой модуль.
Yuri Btr (2004-09-27 10:34:00) [13]Все ясно, нужно вызвать SetWindowTheme , который описан в библиотеке EldoS, но не проще (бесплатней) взять описание в Jedi Win32 API
там есть JwaUxTheme, где и описана эта ф-ия
Yuri Btr (2004-09-27 10:16:00) [14]Совершенно правильное замечание высказал Comp
У меня та же самая проблема.
При создании окон например из ресурсов (dialog template) при подключенном файле манифеста происходит крах приложения....
Хотя всё исключительно "микрософтовские штучки" :)
Yanis (2004-09-27 02:38:00) [15]Геморно конечно, но твою проблему я только так смог решить.
Скачивай прирмер:
http://actualsoft.narod.ru/Sample.rar
И нужные к нему юниты:
http://actualsoft.narod.ru/units.rar
Comp (2004-09-27 01:14:00) [16]Yanis, ну код вроде бы правильный. Все как должно. У меня Делфи 7.
А беда не отстает...
Yanis (2004-09-27 01:08:00) [17]Странно.
Comp (2004-09-27 01:07:00) [18]Мужики, файл манифеста есть. В ресурсном файле.
Но не хотят почему то кнопочки отрисовываться. Хоть убей.
Может что не так делаю?
Я вставляю строчку {$R WindowsХР.RES} после {$R *.RES} и все.
Окно чистое.
Comp (2004-09-27 00:27:00) [19]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.
Cobalt (2004-09-27 00:21:00) [20]Гы :)
А окна точно создаются? Посмотри WinSight'ом.