Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Введение новой оконной процедуры   Найти похожие ветки 

 
Serega_____   (2004-03-04 11:15) [0]

Есть простое окошко, сделанное на API и поле ввода на нем, нужно
ввести отдельную оконную процедуру для этого поля ввода...,чтобы, например обработать нажатие Enter"a в нем.
Использую след. код,прога вылетае с ошибкой времени выполнения(run time), может кто поможет или предложит др. способ...,заранее спасибо.


program Test;

uses Windows, Messages;

var

wc: TWndClassEx;
Mes: TMsg;
MainWnd, EditWnd: HWND;
PrevProc: LongInt;

function MainWndProc(Wnd: HWND; Msg: Cardinal; WP: WParam; LP: LParam): LResult; stdcall;
Begin

case Msg of

WM_DESTROY:
 begin
  PostQuitMessage(0);
  Result:= 0;
 end;
 
 else Result:= DefWindowProc(Wnd, Msg, WP, LP);
end;
End;

function EditWndProc(Wnd: HWND; Msg: Cardinal; WP: WParam; LP: LParam): LResult; stdcall;
Begin

case Msg of

WM_KEYDOWN:
 begin
  if WP = VK_RETURN then MessageBox(0, "Тест", "Тест", 0);
  Result:= 0;
 end;

 else Result:= CallWindowProc(@PrevProc, Wnd, Msg, WP, LP);
end;
End;

BEGIN  // Тело программы

wc.cbSize:= sizeof(wc);
wc.style:= CS_HREDRAW or CS_VREDRAW;
wc.lpfnWndProc:= @MainWndProc;
wc.cbClsExtra:= 0;
wc.cbWndExtra:= 0;
wc.hInstance:= HInstance;
wc.hIcon:= LoadIcon(0, IDI_APPLICATION);
wc.hCursor:= LoadCursor(0, IDC_ARROW);
wc.hbrBackground:= COLOR_BTNFACE+1;
wc.lpszMenuName:= nil;
wc.lpszClassName:= "TestClass";

RegisterClassEx(wc);

MainWnd:= CreateWindowEx (0, "TestClass", "Test", WS_OVERLAPPEDWINDOW or WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, Hinstance, nil);

EditWnd:= CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", nil,
WS_CHILD or WS_VISIBLE ,
10, 10, 100, 20, MainWnd, 0, 0, nil);

PrevProc:= SetWindowLong(EditWnd, GWL_WNDPROC, LongInt(@EditWndProc));

while GetMessage(Mes, 0, 0, 0) do
begin
 TranslateMessage(Mes);
 DispatchMessage(Mes);
end;

END.



 
YuRock ©   (2004-03-04 11:24) [1]

Главная ошибка в приведенном коде: в строке

 else Result:= CallWindowProc(@PrevProc, Wnd, Msg, WP, LP);

надо убрать собаку перед PrevProc (можно написать вместо этого Pointer(PrevProc));


 
Serega_____   (2004-03-04 11:48) [2]

ага, спасибо, все номально



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
3-1081144448
dik
2004-04-05 09:54
2004.05.02
InterBase


14-1081411789
uny
2004-04-08 12:09
2004.05.02
какой клиент выбрать?


14-1081833297
Vlad Oshin
2004-04-13 09:14
2004.05.02
Не поможите найти драйвер для AIC7895p(SCSI) под Win2000?


14-1081336643
Домарощинер
2004-04-07 15:17
2004.05.02
Сборка собственного пакета


3-1080889758
ВадимВС
2004-04-02 11:09
2004.05.02
Ошибка BDE для PDOXUSRS.NET под Win-2000