Форум Magic Team


 

Новости:

01.01.2017: Релиз испанской версии Naruto - Ninja Council (GBA)
02.12.2016: Добавлена документация по Kruptar 7
09.10.2015: Обновление перевода игры Battletoads (NES) [версия 1.3]
22.01.2015: Kruptar Open Source
18.10.2014: Релиз обновлённой русской версии Castlevania - Dawn of Sorrow (GBA) от Owls Group
01.05.2014: Релиз русской версии Taiyou no Yuusha Firebird (NES)
24.06.2012: Добавлена доработанная документация и инструкция
26.05.2012: Обновление ORITON [версия 2.050]
11.05.2012: Обновление ORITON [версия 2.048]
11.03.2012: Обновление Kruptar 7 [версия 7.1.1.17]
29.01.2012: Обновление LZ77Restructor 2 [версия 1.02]
01.01.2012: Релиз русской версии Drill Dozer (GBA)

Подробнее на страничке новостей.
Ознакомьтесь с правилами нашего форума.


  • Форум
  • Поиск
  • Вход
  • Регистрация

  • Форум Magic Team »
  • Профиль пользователя BlueHairLady »
  • Просмотр сообщений »
  • Темы
  • Профиль пользователя
    • Основная информация
    • Статистика
    • Просмотр сообщений...
      • Сообщения
      • Темы
      • Вложения

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.

  • Сообщения
  • Темы
  • Вложения

Темы - BlueHairLady

Страницы: [1]
1
Программирование / Помощь по Delphi
« : 27 Февраля 2009, 11:09:59 »
На старом форуме находилась очень полезная тема: http://magicteam.mybb.ru/viewtopic.php?id=4&p=6 . Думаю, её стоит продолжить. Тем более, что у меня появилось затруднение. Постараюсь сформулировать попонятнее.


Хочу наконец научиться создавать собственные компоненты. А конкретнее, собираюсь создать небольшой простенький компонент (HexEasy), который бы позволял работать с числом как в десятичном, так и в шестнадцатеричном представлениях. Не мудрствуя, в качестве базового взяла Edit. Сочла наиболее удобным создать отдельное поле (FValue: Integer), непосредственно содержащее число, десятичное или шестнадцатеричное изображение которого выведено на монитор. По моей задумке, когда фокус находится на данном компоненте, любое нажатие клавиши должно либо игнорироваться, либо приводить к изменению данной переменной. Т.е. обработка события KeyPress должна состоять как бы из трёх этапов:
1. Предварительный анализ введённого символа на его допустимость.
2. Изменение свойства Text элемента.
3. Анализ изменённого свойства Text: преобразование его в значение FValue и в случае необходимости дальнейшая корректировка.

Я пыталась это сделать примерно таким образом:

procedure THexEasy.KeyPress (var key: Char);
begin
 
  . . . . . . . . . . . .            //предварительная обработка символа key
 
  inherited KeyPress(key);
 
  If Text='' then begin
                      FValue := 0;
                      EXIT;
                      end;
  FValue := StrToInt(Text);
  If FValue>FValueMax then begin  //если число больше максимально допустимого...
                                      FValue := FValueMax;
                                      Text := IntToStr(FValue);
                                      end;  //всё это упрощённо, когда работа идёт с десятичным числом

end;


Но в результате вставки в программу примерно такого кода обнаружилось, что свойство Text компонента изменяется лишь после того, как данная процедура полностью закончит свою работу. Т.е. анализируемое в последней части свойство Text имеет содержание, которое было до того, как пользователь нажал клавишу, а мне нужно обработать именно последствия нажатия. Можно ли как-то форсировать изменение свойства Text?

Никогда не создавала компоненты и даже классы, не ругайтесь сильно, если где-то глуплю.

Страницы: [1]
  • SMF 2.0.12 | SMF © 2011, Simple Machines
  • XHTML
  • RSS
  • Мобильная версия

  • GreenUP by Neekiinh0.

Размер занимаемой памяти: 2.25 мегабайта.
Страница сгенерирована за 0.054 секунд. Запросов: 24.