Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.007 c
1-539
Djvirus
2003-04-17 08:20
2003.05.01
Как убрать полосу прокрутки


1-491
BBCHa
2003-04-16 15:51
2003.05.01
Чтение Bitmap из ресурсов


14-703
SergeySh
2003-04-11 21:02
2003.05.01
Нахождегние минимального пути.


3-473
galexis
2003-04-14 15:43
2003.05.01
Правила добавления записей в БД


3-458
Пубертанец
2003-04-14 11:27
2003.05.01
Как программно вызвать окно свойств для ConnectionString (ADO)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский