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

Delphi Sources



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

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

Код:
private
    procedure WMNCHitTest (var M: TWMNCHitTest); message wm_NCHitTest;
///
procedure TForm1. WMNCHitTest(var M: TWMNCHitTest);
begin
  inherited;
  if M.Result = htClient then
    M.Result := htCaption;
end;
Вызвается если использовать vlc формы, но в случае с win api такой трюк не пройдёт, и если форма без Caption хоть монитор в окно выкень, не чего не сработает, что само собой огорчает. Есть ли способы прикрутить эту процедуру к такому коду:
Код:
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.
winapi изучаю только третий день, если не будет трудно прям в коде объясните где вставить
Ответить с цитированием
  #2  
Старый 29.09.2010, 16:11
Аватар для 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; //i?ioaao?a caaa?oaiey i?ia?aiiu
begin
  DeleteObject(hFont); //oaaeaiea o?eooa
  UnRegisterClass('TAPIxForm', Form); //oaaeaiea ieia
  ExitProcess(Form); //cae?uoea i?ia?aiiu
end;

function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //ia?aaio?ee niiauaiee
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;
    WM_NCHITTEST: begin
      Result:=HTCAPTION;
      Exit;
    end;
  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.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 29.09.2010, 16:55
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию

Спасибо ещё раз NumLuck
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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