Форум: "Основная";
Текущий архив: 2003.05.01;
Скачать: [xml.tar.bz2];
ВнизКак к функции прикрепить процедуру Найти похожие ветки
← →
Лесник (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c