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

Вниз

Как к функции прикрепить процедуру   Найти похожие ветки 

 
Лесник ©   (2003-04-17 23:55) [0]

Привет знатоки. Столкнулся я со следующей проблемой: Мне необходимо чтобы стандартный InputtBox при вводе в поле Edit обрабатывал событие OnKeyPress и разрешал вводить только цифры. Создал я свой юнит в который переписал процедуру (из Dialogs.pas ) InputBox и InputQuery все работает пока не пытаюсь после создания Edit"a подключить процедуру EditKeyPress
Пример кода:

procedure EditKeyPress(Sender:TObject;var Key:Char);
begin
if not (Key in["0".."9") then key:=#0;
end;

function InputQueryN(const ACaption, APrompt: string;
var Value: string): Boolean;
...........
Edit := TEdit.Create(Form);
with Edit do
begin
Parent := Form;
Left := Prompt.Left;
Top := Prompt.Top + Prompt.Height + 5;
Width := MulDiv(164, DialogUnits.X, 4);
MaxLength := 255;
Text := Value;
SelectAll;
OnKeyPress:=EditKeyPress; //здесь ошибка
end;
.............
Что здесь неправильно помогите разобраться.
Спасибо.


 
Лесник ©   (2003-04-17 23:57) [1]

Извиняюсь за опечатку

procedure EditKeyPress(Sender:TObject;var Key:Char);
begin
if not (Key in["0".."9"]) then key:=#0;
end;


 
DJ_Sedoy ©   (2003-04-18 05:18) [2]

Насколько я понял, то обработчик события должен быть методом объекта, а не просто процедурой.


 
Palladin ©   (2003-04-18 07:07) [3]

type TKeyPressEvent = procedure (Sender: TObject; var Key: Char) of object;


 
malkolinge ©   (2003-04-18 13:07) [4]

Код компонента в студию..особено интересен диспечер события


 
Лесник ©   (2003-04-18 18:26) [5]

Все равно ошибка
[Error] MyDialogs.pas(79): Incompatible types: "method pointer and regular procedure"


 
VAleksey ©   (2003-04-18 18:28) [6]

Вынеси описание процедуры обработчика в модуль.


 
Лесник ©   (2003-04-18 18:52) [7]

если пишу
OnKeyPress(Form,EditKeyPress);
получаю ошибку
[Error] MyDialogs.pas(79): Types of actual and formal var parameters must be identical


 
Юрий Федоров ©   (2003-04-18 19:47) [8]

Такой вариант
Type
TMyObject = class
procedure EditKeyPress(Sender:TObject;var Key:Char);

end;{class TMyObject}
....
var Obj : TMyObject;
....
function InputQueryN
...
OnKeyPress:=Obj.EditKeyPress;
Obj нужно еще и создать


 
Лесник ©   (2003-04-19 00:20) [9]

Спасибо Юрий Федоров ©
наконец то получилось
Type
TMyObject = class
procedure EditKeyPress(Sender:TObject;var Key:Char);
end;
procedure TMyObject.EditKeyPress(Sender:TObject; var Key: Char);

begin
If not (Key in ["0".."9",Decimalseparator])then Key:=#0;
end;
...
function InputQueryN(const ACaption, APrompt: string;
var Value: string): Boolean;
var obj:TMyObject;
....
Edit := TEdit.Create(Form);
with Edit do
begin
Parent := Form;
Left := Prompt.Left;
Top := Prompt.Top + Prompt.Height + 5;
Width := MulDiv(164, DialogUnits.X, 4);
MaxLength := 255;
Font.Color:=clNavy;
Text := Value;
SelectAll;
OnKeyPress:=Obj.EditKeyPress;
end;
...

правда выдается
[Warning] MyDialogs.pas(92): Variable "Obj" might not have been initialized
но работает как надо.


 
Лесник ©   (2003-04-19 00:49) [10]

Мне еще посоветовали
With Edit Do SetWindowLong(Handle,GWL_STYLE,GetWindowLong(Handle,GWL_STYLE) or ES_NUMBER);
тоже работает но без децималсепаратора


 
LEON   (2003-04-19 20:07) [11]

чтобы убрать warning после бегина напиши obj := nil



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

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

Наверх




Память: 0.49 MB
Время: 0.01 c
14-701
NetBreaker666
2003-04-12 18:32
2003.05.01
test


6-658
Berzercer
2003-03-07 18:46
2003.05.01
E-mail!


1-559
alexvan
2003-04-18 08:49
2003.05.01
Помогите с типом


1-517
mixamixa
2003-04-20 20:24
2003.05.01
Как вставить картинку в ячейку StringGrid-a?


3-423
geg
2003-04-09 13:36
2003.05.01
Установка IB на сервер.