Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.09.2010, 14:12
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию WinApi и Регионы окна

Всем привет, трабл такой. На vlc превосходно работает перерисовка регионов, а на winapi нет. Код у меня такой:
Код:
program APIx_Project3;

uses
  windows,
  messages,
  commctrl;

var
  WinClass : TWndClass;
  Form : HWND;
  Handle : HWND;
  Msg : TMSG;
  hFont : HWND;
  HRegion1, Hreg2, Hreg3: THandle;
  Region: HRGN;

procedure ShutDown; //процедура завершения программы
begin
  DeleteObject(hFont); //удаление шрифта
  UnRegisterClass('TAPIxForm', Form); //удаление окна
  ExitProcess(Form); //закрытие программы
end;

function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //обработчик сообщений
begin
  Result := DefWindowProc(hwnd, msg, wparam, lparam);
  case Msg of
WM_COMMAND:
if (lParam = ...) and (HiWord(wParam) = BN_CLICKED) then
  begin
  ...;
  end;
  WM_DESTROY: ShutDown;
  end;
end;

begin
Form := GetModuleHandle(nil);
  with WinClass do
  begin
   Style := CS_PARENTDC; 
   hIcon := LoadIcon(Form, MAKEINTRESOURCE('APIXICON')); 
   lpfnWndProc := @WindowProc;
   hInstance := Form;
   hbrBackground := COLOR_BTNFACE + ...;
   lpszClassName := 'TAPIxForm';
   hCursor := LoadCursor(0, IDC_ARROW);
   Region := CreateEllipticRgn(0, 0, 490, 300);
   SetWindowRgn(Handle, Region, True);
  end;
InitCommonControls;
RegisterClass(WinClass); 

Handle := CreateWindowEx(0, 'TAPIxForm', 'NAC',
WS_POPUP or WS_GROUP or
WS_VISIBLE or WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_SYSMENU or WS_EX_CLIENTEDGE,
219, 116, 500, 366,
0, 0,
Form, nil);

hFont := CreateFont(
-11, 0, 0, 0, 0, 0, 0, 0,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif');

  while(GetMessage(Msg, 0, 0, 0)) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
  end.
Подскажите что я делаю не так, в google и yandex ничего не нашёл
Ответить с цитированием
  #2  
Старый 29.09.2010, 14:24
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

SetWindowRgn после CreateWindowEx

CreateWindowEx без WS_VISIBLE
потом:
ShowWindow
UpdateWindow
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 29.09.2010 в 14:26.
Ответить с цитированием
  #3  
Старый 29.09.2010, 14:46
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию

NumLucl сделал так
Код:
program APIx_Project3;

uses
  windows,
  messages,
  commctrl;

var
  WinClass : TWndClass;
  Form : HWND;
  Handle : HWND;
  Msg : TMSG;
  hFont : HWND;
  HRegion1, Hreg2, Hreg3: THandle;
  Region: HRGN;

procedure ShutDown; //процедура завершения программы
begin
  DeleteObject(hFont); //удаление шрифта
  UnRegisterClass('TAPIxForm', Form); //удаление окна
  ExitProcess(Form); //закрытие программы
end;

function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //обработчик сообщений
begin
  Result := DefWindowProc(hwnd, msg, wparam, lparam);
  case Msg of
WM_COMMAND:
if (lParam = ...) and (HiWord(wParam) = BN_CLICKED) then
  begin
  ...;
  end;
  WM_DESTROY: ShutDown;
  end;
end;

begin
Form := GetModuleHandle(nil);
  with WinClass do
  begin
   Style := CS_PARENTDC; 
   hIcon := LoadIcon(Form, MAKEINTRESOURCE('APIXICON')); 
   lpfnWndProc := @WindowProc;
   hInstance := Form;
   hbrBackground := COLOR_BTNFACE + ...;
   lpszClassName := 'TAPIxForm';
   hCursor := LoadCursor(0, IDC_ARROW);
  end;
InitCommonControls;
RegisterClass(WinClass); 

Handle := CreateWindowEx(0, 'TAPIxForm', 'NAC',
WS_POPUP or WS_GROUP or 
WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_SYSMENU or WS_EX_CLIENTEDGE,
219, 116, 500, 366,
0, 0,
Form, nil);
Region := CreateEllipticRgn(0, 0, 490, 300);
   SetWindowRgn(Handle, Region, True);

hFont := CreateFont(
-11, 0, 0, 0, 0, 0, 0, 0,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif');
  ShowWindow(Form,SW_SHOW);
  while(GetMessage(Msg, 0, 0, 0)) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
  end.
Но компилица не доканца и ошибок не выводит, ходя в explorer прогу вижу фоном, UpdateWindow не знаю как делать
Ответить с цитированием
  #4  
Старый 29.09.2010, 15:00
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
program APIx_Project3;

uses
  windows,
  messages,
  commctrl;

var
  WinClass : TWndClass;
  Form : HWND;
  Handle : HWND;
  Msg : TMSG;
  hFont : HWND;
  HRegion1, Hreg2, Hreg3: THandle;
  Region: HRGN;

procedure ShutDown; //ïðîöåäóðà çàâåðøåíèÿ ïðîãðàììû
begin
  DeleteObject(hFont); //óäàëåíèå øðèôòà
  UnRegisterClass('TAPIxForm', Form); //óäàëåíèå îêíà
  ExitProcess(Form); //çàêðûòèå ïðîãðàììû
end;

function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //îáðàáîò÷èê ñîîáùåíèé
begin
  Result := DefWindowProc(hwnd, msg, wparam, lparam);
  case Msg of
WM_COMMAND:
//if (lParam = ...) and (HiWord(wParam) = BN_CLICKED) then
  begin
//  ...;
  end;
  WM_DESTROY: ShutDown;
  end;
end;

begin
Form := GetModuleHandle(nil);
  with WinClass do
  begin
   Style := CS_PARENTDC; 
   hIcon := LoadIcon(Form, MAKEINTRESOURCE('APIXICON')); 
   lpfnWndProc := @WindowProc;
   hInstance := Form;
   hbrBackground := COLOR_BTNFACE; 
   lpszClassName := 'TAPIxForm';
   hCursor := LoadCursor(0, IDC_ARROW);
   Region := CreateEllipticRgn(0, 0, 490, 300);
  end;
InitCommonControls;
RegisterClass(WinClass);

Handle := CreateWindowEx(0, 'TAPIxForm', 'NAC',
WS_POPUP or WS_GROUP or
WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_SYSMENU or WS_EX_CLIENTEDGE,
219, 116, 500, 366,
0, 0,
Form, nil);
   SetWindowRgn(Handle, Region, True);
   ShowWindow(Handle, SW_SHOW);
   UpdateWindow(Handle);

hFont := CreateFont(
-11, 0, 0, 0, 0, 0, 0, 0,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif');

  while(GetMessage(Msg, 0, 0, 0)) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
  end.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 29.09.2010, 15:18
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию

Работает, спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter