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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2024, 09:56   #1
killzone
 
Регистрация: 25.03.2010
Сообщений: 6
Вопрос FMX.Edit.TEdit Переопределение события

Здравствуйте уважаемые форумчане, столкнулся с такой проблемой.
Лирическое отступление: «Была у меня программа с VCL, работающая под Windows, всё хорошо. Но теперь мы на работе к моему великому сожалению переходим на ASTRA LINUX. Мне нужно переписать все мои наработки так, чтобы они работали и под вышеуказанный LINUX. Ну ок, начал смотреть в сторону FireMonkey, т.к. он кроссплатформенный. Сделал даже простенькую программку HelloWorld которая запустилась и под Windows и под ASTRA LINUX на виртуальной машине.»

В общем начал писать программу под FMX и тут же обфейлился с простой вещью, никак не могу переопределить событие OnChange у TEdit из пакета FMX. На VCL все решалось очень просто.

Код:
procedure TForm1.Create(Sender: TObject);
begin
    Edit1.OnChange := Edit_DateOnChange;
end;

procedure TForm1.Edit_DateOnChange(Sender: TObject);
begin
  showmessage('Changed!');
end;
Мне нужно после того как пользователь введет какой-нибудь текст или изменит существующий в TEdit, чтобы запускалась проверка текста на корректность ввода.
Если я делаю по аналогии в FMX для TEdit, то вылетает Access Violation. Уже часов 5 убил, не могу сделать. Может кто-то делал что-то подобное в FireMonkey?

Последний раз редактировалось killzone; 11.02.2024 в 10:02.
killzone вне форума Ответить с цитированием
Старый 11.02.2024, 13:29   #2
DIONISKA
Форумчанин
 
Регистрация: 07.11.2011
Сообщений: 161
По умолчанию

Вполне возможно что собака в вашем случае зарыта в:
Цитата:
Сообщение от killzone Посмотреть сообщение
showmessage('Changed!');
попробуйте использовать TDialogService.ShowMessage из модуля FMX.DialogService:
Код:
uses
//...,
FMX.DialogService;
//...
procedure TForm1.Edit_DateOnChange(Sender: TObject);
begin
  FMX.DialogService.TDialogService.ShowMessage('Changed!');
end;
А вообще firemonkey на linux пока ещё слишком сырой, почему-бы не использовать lazarus?
DIONISKA вне форума Ответить с цитированием
Старый 12.02.2024, 05:24   #3
killzone
 
Регистрация: 25.03.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от DIONISKA Посмотреть сообщение
Вполне возможно что собака в вашем случае зарыта в:

попробуйте использовать TDialogService.ShowMessage из модуля FMX.DialogService:
Код:
uses
//...,
FMX.DialogService;
//...
procedure TForm1.Edit_DateOnChange(Sender: TObject);
begin
  FMX.DialogService.TDialogService.ShowMessage('Changed!');
end;
А вообще firemonkey на linux пока ещё слишком сырой, почему-бы не использовать lazarus?
Здравствуйте, спасибо за ответ. Я разобрался с проблемой, пришлось копать глубже в родителя tedit, и в нем есть виртуальное событие процедура называется DoChange. Её переопределил по аналогии, приду после работы скину код.

По поводу lazarus, честно говоря для меня это тёмный лес. Никогда не работал с ней. Стоит думаете на lazarus
Для кодинга под линукс перейти?
killzone вне форума Ответить с цитированием
Старый 12.02.2024, 11:04   #4
DIONISKA
Форумчанин
 
Регистрация: 07.11.2011
Сообщений: 161
По умолчанию

Цитата:
Сообщение от killzone Посмотреть сообщение
процедура называется DoChange
Странно,там же вроде проверка родителя на nil, что событие назначено, вызов события и всё. Впрочем тот-же код нормально работает на других платформах, так что проблема выходит не в коде.

Цитата:
Сообщение от killzone Посмотреть сообщение
Стоит думаете на lazarus
Попробовать точно стоит, по крайней мере там таких проблем не замечено. Тот-же LCL практически идентичен VCL за некоторыми нюансами.
DIONISKA вне форума Ответить с цитированием
Старый 12.02.2024, 11:56   #5
DIONISKA
Форумчанин
 
Регистрация: 07.11.2011
Сообщений: 161
По умолчанию

И предвосхищая вопрос, в lazarus вместо:
Цитата:
Сообщение от killzone Посмотреть сообщение
Edit1.OnChange := Edit_DateOnChange;
Код:
Edit1.OnChange := @Edit_DateOnChange;
DIONISKA вне форума Ответить с цитированием
Старый 15.02.2024, 14:36   #6
killzone
 
Регистрация: 25.03.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от DIONISKA Посмотреть сообщение
Странно,там же вроде проверка родителя на nil, что событие назначено, вызов события и всё. Впрочем тот-же код нормально работает на других платформах, так что проблема выходит не в коде.
Вы абсолютно правы, я написал чушь. Моя проблема решалась также как и в VCL:
Код:
OnChange := Edit_DateOnChange;
Это я написал плохой код и ошибка Access Violation была связана с тем что я забыл в начале добавить строку inherited Create в инициализации моего класса. Долго не кодил.


Цитата:
Сообщение от DIONISKA Посмотреть сообщение
И предвосхищая вопрос, в lazarus вместо:

Код:
Edit1.OnChange := @Edit_DateOnChange;
Спасибо! Поставил бы вам палец вверх, но не вижу где кнопка.
killzone вне форума Ответить с цитированием
Старый 16.02.2024, 15:17   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Так кнопку Alar оторвал (вместе с пальцем) , разогнав тем самым некоторое количество участников.
digitalis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переопределение virtual события BadCats C# (си шарп) 0 03.08.2016 12:57
События для Edit edsjeka Общие вопросы Delphi 15 13.05.2016 20:49
Переопределение события OnMouseDown Aleksandr_59 Компоненты Delphi 4 23.05.2012 17:59
Переопределение события OnClick в динамическом объекте-компоненте CyberJohn Общие вопросы Delphi 8 06.01.2010 15:56
Переопределение реакции на события ByWatt Общие вопросы Delphi 1 20.12.2007 17:22