Главная страница
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.031 c
14-1081351546
Сатир
2004-04-07 19:25
2004.05.02
Артемий Лебедев отдыхает!:)


1-1081873908
AsD
2004-04-13 20:31
2004.05.02
BPL и формы


1-1082024142
Dysan
2004-04-15 14:15
2004.05.02
Перевернуть текст


1-1082015581
siriusP
2004-04-15 11:53
2004.05.02
Как сохранить, загрузить содержимое фрейма в Bitmap?


3-1081229415
Filat
2004-04-06 09:30
2004.05.02
Через что лучше связать Delphi с MS SQL 7/2000?