Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

02.06.2009, 10:50
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
[Дельфинчик] ОконAPI
Суть проблемы такова, при создании формы чисто через WinApi, необходимо отследить нажатия 4 клавиш, непосредственно W,A,D,S, вопрос как это сделать?
Пробовала отслеживать через WM_KEYDOWN,
Код:
case AMessage of
WM_KEYDOWN: begin ... end;
но система каждый раз по разному после перезагрузки ставит сообщения в очередь потоков.
Кто решит, тому +10.
|
|
|

02.06.2009, 10:56
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Если ты делаешь некое управление для игры, то этот механизм очень плохой потому что не сможет одновременно обрабатывать несколько кнопок.
А вообще может ты чтото не так делаешь в плане обработки сообщений и они у тебя накапливаются.
|
|
|

02.06.2009, 11:04
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
Если ты делаешь некое управление для игры, то этот механизм очень плохой потому что не сможет одновременно обрабатывать несколько кнопок.
А вообще может ты чтото не так делаешь в плане обработки сообщений и они у тебя накапливаются.
если бы я писала игру то только на С))), лень писать с нуля, ну может быть еще на питончике. а что может быть не так в плане обработки?, механизм работает в пределах системы, но перестает работать после ее рестарта, так как WParam, LParam, зависят от числа уже созданных потоков, но может быть я ошибаюсь, если не затруднит, разъясните пожалуйста.
PS: не через хуки, и без длл, необходимо.
|
|
|

02.06.2009, 11:10
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Суть проблемы такова, при создании формы чисто через WinApi, необходимо отследить нажатия 4 клавиш, непосредственно W,A,D,S, вопрос как это сделать?
Именно при создании?
Отследить где? В окне или всей системе?
|
|
|

02.06.2009, 11:12
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
Именно при создании? - нет в режиме работы
Отследить где? В окне или всей системе? - не важно, главное хоть как то связать, через какой нибудь параметр
|
|
|

02.06.2009, 11:42
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
незнаю в чем у тебя проблема... думаю не составит труда переделать на делфийский
Код:
#pragma comment(linker,"/MERGE:.rdata=.data")
#pragma comment(linker, "/MERGE:.text=.data" )
#pragma comment(linker,"/SECTION:.text,EWR")
#pragma comment(linker,"/ENTRY:Garik_WinMain")
#pragma comment(linker,"/NODEFAULTLIB")
#pragma comment(linker, "/SUBSYSTEM:WINDOWS" )
#pragma comment(linker, "/INCREMENTAL:NO" )
#pragma optimize( "gsy", on )
#include <windows.h>
int WINAPI WinMains (HINSTANCE hInstance,int nShowCmd);
LRESULT CALLBACK GarikWinProc (HWND,UINT,UINT,LONG);
void Garik_WinMain()
{
ExitProcess(WinMains(GetModuleHandle(NULL),SW_SHOWDEFAULT));
}
int WINAPI WinMains (HINSTANCE hInstance,int nShowCmd)
{
WNDCLASS WndClass;
HWND hWnd;
MSG Msg;
char szClassName[]="Garik class";
WndClass.style=CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc=GarikWinProc;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hInstance=hInstance;
WndClass.hIcon=LoadIcon(NULL,IDI_WINLOGO);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hbrBackground=(HBRUSH)(COLOR_BACKGROUND)+1;
WndClass.lpszMenuName=NULL;
WndClass.lpszClassName=szClassName;
if(!RegisterClass(&WndClass)) {
MessageBoxA(NULL,NULL,"RegisterClass",MB_OK|MB_ICONERROR);
return 0;
}
hWnd=CreateWindowA(szClassName,"Gar|k :: Storage Info",WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU,
CW_USEDEFAULT,CW_USEDEFAULT,
250,85,
NULL,NULL,
hInstance,NULL);
if(!hWnd) {
MessageBoxA(NULL,NULL,"CreateWindow",MB_OK|MB_ICONERROR);
return 0;
}
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
while(GetMessage(&Msg,NULL,0,0)) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return (int)Msg.wParam;
}
LRESULT CALLBACK GarikWinProc(HWND hWnd,UINT Message, UINT wParam, LONG lParam)
{
HDC hDC;
PAINTSTRUCT PaintStruct;
char buff[50];
switch(Message) {
case WM_KEYDOWN:
wsprintf((LPSTR)&buff,"%d",wParam);
MessageBox(hWnd,buff,NULL,MB_OK);
return 0;
case WM_PAINT:
hDC=BeginPaint(hWnd,&PaintStruct);
EndPaint(hWnd,&PaintStruct);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,Message,wParam,lParam);
}
тупо открыл вот это почитать....
http://www.firststeps.ru/mfc/winapi/keyb/r.php?59
|
|
|

02.06.2009, 11:56
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
В WndProc:
Код:
WM_KEYDOWN:
begin
if byte(WParam) in [87, 83, 65, 68] then
SetWindowText(hForm, @(char(WParam)));
end;
Я просто не до конца понял в чем трабл
|
|
|

02.06.2009, 12:25
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
function wsprintf(Output: PChar; Format: PChar): Integer; stdcall;
в дельфинчике она не корректно описана, но это лечится если на прямую цеплять, однако код не работает, не знаю почему.
var
szMessage: PChar;
...
...
function wsprintf( lpOut: LPSTR; lpFmt: LPCTSTR; p: Pointer): Integer; stdcall;
external 'user32.dll' name 'wsprintfA';
....
....
WM_KEYDOWN: begin
GetMem( szMessage, 256 );
wsprintf( szMessage, 'D', WParam); //Конвертация упущена
MessageBox( 0, szMessage, 'Ñîîáùåíèå', MB_OK );
end;
Joker-jar , сори все прекрасно работает спасибо, даже при ребуте!
Последний раз редактировалось Flame of Soul; 02.06.2009 в 12:28..
|
|
|

02.06.2009, 18:20
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
wsprintf в моем случае это тупа inttostr )
|
|
|

03.06.2009, 23:04
|
|
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
Провел на форуме: 246020
Репутация:
105
|
|
http://xproger.mentalx.org/old/?id=2
тут готовый движок для 3d игр, вопрос про wasd тут уже реализован.
кому пригодилось то не забудьте поставить плюсы.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|