Главная страница
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.013 c
3-480
Dick
2003-04-14 16:30
2003.05.01
Access и blobs


3-393
Patrick
2003-04-11 10:24
2003.05.01
Использование GetCurrentRecord


14-731
Fenix_
2003-04-14 04:10
2003.05.01
Передвигать обьект мышкой


3-418
Брат
2003-04-11 15:45
2003.05.01
Как сделать чтобы программа ждала пока выполнится запрос?


14-756
Soft
2003-04-13 01:24
2003.05.01
Мы славяне. Других таких нет.