Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2009, 21:27   #1
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию Приложение Delphi API

Приветствую. Обычно делал контролы в VCL, а вот щас надо сделать в Win API. Ну создал окно (CreateWindowEx) по рисовал малек, получил допустим кнопку. Есть мой класс

Код:
var
  WndClass: TWndClass = (
    style: CS_DBLCLKS;
    cbClsExtra: 0;
    cbWndExtra: 0;
    hbrBackground: 0;
    lpszMenuName: NIL;
    lpszClassName: WndClassName;
  );

WndClass.lpfnWndProc := @WindowProc;
  WndClass.hInstance := HInstance;
  WndClass.hIcon := LoadIcon(HInstance, 'MAINICON');
  WndClass.hCursor := LoadCursor(0, IDC_ARROW);
  Windows.RegisterClass(WndClass);
В WindowProc вызываается DefProc (WIndows.pas) ну и обрабатываются мои сообщения. Дело в том, что к примеру WM_LBUTTONUP ну вот я получил сообщение что на мое окно нажали (допустим окно-контрол-кнопка) потом, увели мышь (что странно так же, TrackMouseEvent, не возвращает WM_MOUSELEAVE, возвращает только если на мое окно не нажали) а потом отпустили кнопку мыши. Поидее окно должно получить WM_LBUTTONUP но не получает его, и соотвественно глюки.

В VCL я получал обработку WM_LBUTTONUP если даже за окном отпустили мышь (но нажата была она в окне).

Что делать ? Кто подскажет.

Последний раз редактировалось BOBAH13; 11.02.2009 в 21:45.
BOBAH13 вне форума Ответить с цитированием
Старый 11.02.2009, 21:48   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

в родительском окне при получении сообщения WM_LBUTTONUP, отправлять его всем дочерним контролам
rpy3uH вне форума Ответить с цитированием
Старый 11.02.2009, 21:56   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Всеравно. В оконный обработчик класса (моего зарегестрированного), когда вот нажимаю (приходит WM_LBUTTONDOWN) после отпускаю но не над окном моим, а допустим над рабочим столом, WM_LBUTTONUP не приходит.

Код:
function WindowProc(hWnd: HWND; uMessage: UINT; wParam: UINT; lParam: UINT): LRESULT; stdcall;
begin
  if (uMessage = WM_LBUTTONUP) then
  ShowMessage('1');

  Result := DefWindowProc(hWnd, uMessage, wParam, lParam);
end;

......

pd := CreateWindowEx(WS_EX_TOOLWINDOW or WS_EX_LAYERED,
    WndClass.lpszClassName, NIL, WS_POPUP or WS_VISIBLE, 0, 0, 0, 0, 0, 0, HInstance, NIL);
BOBAH13 вне форума Ответить с цитированием
Старый 11.02.2009, 22:06   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
...В VCL я получал обработку WM_LBUTTONUP если даже за окном отпустили мышь (но нажата была она в окне).

Что делать ? Кто подскажет.
VCL захватывает курсор при нажатии левой клавиши:

Код:
procedure TControl.WMLButtonDown(var Message: TWMLButtonDown);
begin
...
  if csCaptureMouse in ControlStyle then MouseCapture := True; 
  // csCaptureMouse по умолчанию установлен
...
end;

procedure TControl.SetMouseCapture(Value: Boolean);
begin
  if MouseCapture <> Value then
    if Value then SetCaptureControl(Self) else SetCaptureControl(nil);
end;

// И внутри SetCaptureControl
// SetCapture(TWinControl(Control).Handle)
alexBlack вне форума Ответить с цитированием
Старый 11.02.2009, 22:11   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Благодарю Вы очень мне помогли
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование API функций в Delphi (нужна инфа для курсовой) Abask Win Api 4 25.12.2008 01:56
Delphi [windows.api] срочно. Готов платить WMZ comeoff Фриланс 1 22.12.2008 10:44
Как вставить HTML страницу в Delphi приложение? Valdis Компоненты Delphi 7 03.10.2007 20:52
Консольное приложение на Delphi Enko Помощь студентам 1 21.09.2007 10:42
КАК ОТКРЫТЬ ЛЮБОЕ ПРИЛОЖЕНИЕ ЧЕРЕЗ DELPHI??? micaell Общие вопросы Delphi 8 17.12.2006 20:05