Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Все-таки как включить поддержку Visual Styles ???? [D6, D7]


Страницы:   1 2

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'ом.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо