Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2016, 10:53   #1
ParAlexandr
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 11
По умолчанию Прошу помощи в написании события OnSetText

Добрый день.
В принципе вопрос в теме. Не могу правильно написать обработку события OnSetText. Понимаю что вопрос для кого-то банальный, однако бьюсь уже не один день.

Вот что есть:

Код:
type
  { TForm3 }
.......................................
procedure SetText(Sender: TField; const AText: string);
procedure OpenPageControl;
.......................................

implementation

{$R *.lfm}
{ TForm3 }

procedure SetText(Sender: TField; const AText: string);
begin
  try
    Sender.AsFloat := StrToFloat(AText);
  except
    ShowMessage('Введено неверное число');
    Abort;      // Запрещаем очистку ячейки и выход из неё
  end;
end;
..................................

procedure TForm3.OpenPageControl;
var
c:integer;
begin
for c:=2 to 10 do
    begin
      Form3.DBGrid1.Columns[c].Field.OnSetText:=SetText;
end;

При компиляции Lazarus выдает след ошибки:

unit3.pas(159,49) Error: Wrong number of parameters specified for call to "SetText"

unit3.pas(76,18) Error: Found declaration: SetText(TField;const AnsiString);

Код должен обрабатывать набранный текст пользователем в DBGrid. Если пользователь ввел число не правильно, выводится соответствующее сообщение с Абортом ).
Прошу помочь кто чем может... Или навести на мысль.
ParAlexandr вне форума Ответить с цитированием
Старый 19.05.2016, 10:57   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы перед реализацией TForm3. не забыли?
p51x вне форума Ответить с цитированием
Старый 19.05.2016, 11:01   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

проиллюстрирую ответ p51x
Код:
procedure TForm3.SetText(Sender: TField; const AText: string);
begin
  try
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.05.2016, 11:04   #4
ParAlexandr
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы перед реализацией TForm3. не забыли?
procedure TForm3.SetText(Sender: TField; const AText: string);

Да конечно, так и описываю процедуру. Просто эксперементировал и назад забыл изменения вернуть.
ParAlexandr вне форума Ответить с цитированием
Старый 19.05.2016, 11:05   #5
ParAlexandr
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
проиллюстрирую ответ p51x
Код:
procedure TForm3.SetText(Sender: TField; const AText: string);
begin
  try
Именно так и пишу. При такой конструкции не работает.
ParAlexandr вне форума Ответить с цитированием
Старый 19.05.2016, 11:06   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А декларацию процедуры в Private формы. Процедура должна быть of object
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.05.2016, 11:08   #7
ParAlexandr
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 11
По умолчанию

Код:
private
    { private declarations }
Тут ничего не описывал... Подскажите что нужно тут написать или примерчик.
ParAlexandr вне форума Ответить с цитированием
Старый 19.05.2016, 11:50   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

если я правильно Вас понял, то вам нужно сделать так, как описано в примере:
http://docwiki.embarcadero.com/CodeE...etText_(Delphi)

p.s. вы в DesignTime на форме открываете датасет, редактор полей, выбираете нужное поле и ему назначаете обработчик события?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.05.2016, 11:51   #9
ParAlexandr
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 11
По умолчанию

Прописал следующее
Код:
private
    { private declarations }
    SetText : procedure(Sender: TField; const AText: string) of object;
Закомментировав
Код:
//procedure SetText(Sender: TField; const AText: string);
Теперь проект компилируется, однако проверка ввода не выполняется:
Код:
procedure SetText(Sender: TField; const AText: string);
begin
  try
    Sender.AsFloat := StrToFloat(AText);
  except
    ShowMessage('Введено неверное число');
    Abort;      // Запрещаем очистку ячейки и выход из неё
  end;
end;
Есть еще у кого-нибудь мысли?
ParAlexandr вне форума Ответить с цитированием
Старый 19.05.2016, 11:56   #10
ParAlexandr
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
если я правильно Вас понял, то вам нужно сделать так, как описано в примере:
http://docwiki.embarcadero.com/CodeE...etText_(Delphi)
Ваша ссылка открывается со следующим сообщением: There is currently no text in this page. You can search for this page title in other pages, or search the related logs, but you do not have permission to create this page.

Цитата:
p.s. вы в DesignTime на форме открываете датасет, редактор полей, выбираете нужное поле и ему назначаете обработчик события?
Да. Идея такая.
ParAlexandr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу помощи в написании ramota3 Помощь студентам 1 30.03.2016 12:40
прошу помощи в написании действий в AS 3.0 Flash eNOT_86 Общие вопросы Web 1 12.03.2016 18:00
Прошу помощи в написании программ для работы с текстовыми файлами Никита757 Паскаль, Turbo Pascal, PascalABC.NET 1 15.12.2015 21:35
прошу квалифицированной поддержки в написании макроса Leeroy Microsoft Office Excel 4 20.02.2013 19:21
Прошу помощи в написании программы на языке СИ. PontiyPilat Общие вопросы C/C++ 0 12.10.2008 20:22