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

Вниз

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

 
Atrem   (2002-05-10 22:24) [0]

Господа, как заменить оконную процедуру дочернего элемента.Есть пример на C++,но перенести что-то не получается.Хочу,например, поменять оконную процедуру edit.Вот что получилось:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Wnd:HWND;
N:integer;
implementation

{$R *.dfm}
function Proc(Wnd:HWND;Msg:Cardinal;WParam,LParam:Integer):integer;stdcall;
begin
if (Msg = WM_KEYDOWN) and (wParam = VK_RETURN) then ShowMessage("I did it !!!");
Result:=CallWindowProc(@n,wnd,Msg,WParam,LParam);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Wnd:=CreateWindow("Edit","66",WS_CHILD or WS_BORDER or WS_VISIBLE or ES_CENTER or ES_NUMBER,10,10,100,30,Handle,1,HInstance,nil);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
n:=SetClassLong(Wnd,GWL_WNDPROC,integer(@Proc));
end;

end.


 
ION T ©   (2002-05-10 22:54) [1]

В строке Result:=CallWindowProc(@n,wnd,Msg,WParam,LParam); n - содержит адрес указателя, а вы передаете указатель на переменную с этим адресом (указатель на указатель:))

Надо-бы делать простой тайпкаст Result:=CallWindowProc(Pointer(n),wnd,Msg,WParam,LParam);


 
Atrem   (2002-05-11 11:48) [2]

Все равно не помогает
Почему-то SetClassLong всегда возвращает 0
Может еще есть ошибка?


 
Cobalt ©   (2002-05-11 12:10) [3]


> Почему-то SetClassLong всегда возвращает 0

А что он должен возвращать? В случае успеха?


 
Atrem   (2002-05-11 13:21) [4]

а почему тогда не работает?


 
Cobalt ©   (2002-05-11 14:09) [5]

Попробуй SetWindowLong;
А о смысле ошибки смотрите
ShowMessage(SysErrorMessage(GetLastError));


 
Raptor ©   (2002-05-13 21:20) [6]

Тут и пробовать нечего. SetWindowLong это именно то, что надо использовать.



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

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

Наверх




Память: 0.47 MB
Время: 0.019 c
3-47165
Explorer
2002-06-13 09:44
2002.07.15
Decimal, money и Float


1-47284
Gamar
2002-06-29 17:40
2002.07.15
Изменение цвета столбца в Run-Time


1-47556
Йёти
2002-06-28 09:13
2002.07.15
TOwnedCollection


1-47378
MPro
2002-07-02 12:48
2002.07.15
Позарез надо изменить размер ячеек и сделать рамку в Excel!!


1-47518
SkyQuake
2002-07-04 14:31
2002.07.15
Загрузка данных в Image