Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
ВнизКак же все таки поменить оконную функцию TEdit ??? :(( HELP! Найти похожие ветки
← →
pirat (2002-10-16 22:30) [0]Помогите кто может!
пишу
TFloatEdit = class(TEdit)
protected
procedure WndProc(var Message: TMessage);override;
end;
и потом
procedure TFloatEdit.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_KEYDOWN then
begin
Message.Result :=0;
end
else
inherited WndProc(Message);
end;
по идее, когда result становится равным 0 обработка должна прекратиться, то есть при нажатии на кнопки ничего вводится не должно. Однако фигушки!!! Все работает :(((((( Отсюда вывод - что WndProc не учавствует в цепочке обработки. Так что же мне заменять??
HELP!
← →
Eazy (2002-10-16 22:43) [1]OnKeyPress etc
← →
Eazy (2002-10-16 22:48) [2]Шучу, конечно.
procedure WMKEYDON (Var Message: TMessage);message WM_KeyDown;
← →
TTCustomDelphiMaster (2002-10-16 22:54) [3]TFloatEdit = class(TEdit)
protected
procedure WMChar(var Message: TWMChar); message WM_CHAR;
end;
procedure TFloatEdit.WMChar(var Message: TWMChar);
begin
//inherited;
end;
← →
pirat (2002-10-16 23:17) [4]у меня появляется желание залезть на стенку :(
Дело было не только в WM_KEYDOWN ... хотелось бы всю процедуру подменить.
← →
MBo (2002-10-17 06:42) [5]Без создания нового компонента:
private
OldProc: TWndMethod;
procedure NewProc(var msg: TMessage);
в OnCreate
OldProc := Scrollbox1.WindowProc;
Scrollbox1.WindowProc := NewProc;
procedure TForm1.NewProc(var msg: TMessage);
begin
case msg.Msg of
WM_VSCROLL: label1.caption:="vert";
WM_HSCROLL: label1.caption:="horiz";
end;
OldProc( msg );
end;
← →
pirat (2002-10-17 15:09) [6]ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!
Я в начале тоже самое писал только OldWindow:pointer сделал, и у меня ни фига не получалось :)
Вот что в итоге
TFloatEdit = class(TEdit)
public
OldProc: TWndMethod;
constructor Create(AOwner: TComponent); override;
procedure NewProc(var msg: TMessage);
end;
constructor TFloatEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
OldProc := self.WindowProc;
self.WindowProc := self.NewProc;
end;
procedure TFloatEdit.NewProc(var msg: TMessage);
begin
if (msg.Msg <> WM_KEYDOWN) and
(msg.Msg<>WM_KEYUP) and
(msg.Msg<>WM_CHAR) then
OldProc(msg)
else
msg.Result:=0;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c