Delphi World - Исправление DBEdit MaxLength
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Исправление DBEdit MaxLength

Автор: Reinhard Kalinke

Аксиомы:
1. Купи Pentium IV и увидишь, что REBOOT там намного быстрее.
2. У программ нет глюков. Они просто содержат неизвестные тебе функции.
3. Лучший метод сжатия файлов: DEL *.* - 100% сжатие.
4. Пентиум III - это такая новая модель процессоров, делающая ошибки в 10 раз быстрее.
5. Секрет Windows: Запусти на Пентиуме эмулятор PC XT.
6. Компьютер - это устройство, созданное для скоростного создания и автоматизации ошибок.
7. E-mail, возвращенный отправителю, означает несоответствие напряжений в Сети.
8. Компьютеры делают очень быстро и аккуратно стандартные ошибки.

Я, кажется, не могу получить свойство MaxLength, чтобы работать с компонентами TDBEdit. В TEdit это работает как положено, но при попытке задать максимальную длину текста в TDBEdit это не срабатывает, и я все еще могу набрать текст сверх установленного ограничения.

По-моему, это является следствием этого кода в TDBEdit.DataChange (DBCTRLS.PAS):


if FDataLink.Field <> nil then
begin
...
  if FDataLink.Field.DataType = ftString then
    MaxLength := FDataLink.Field.Size 
  else
    MaxLength := 0;
  ...
  end else
  begin
  ...
    MaxLength := 0;
  ...
end;

т.к. иногда значение устанавливается на ноль...

Похоже все будет работать, если вы измените строку


MaxLength := 0;

на


MaxLength := inherited MaxLength;

Для того, чтобы изменения вступили в силу, вам необходимо перекомпилировать ваш complib с измененным DBCTRLS.PAS, находящимся в пути lib.

Если вы хотите использовать MaxLength с StringField, изменений необходимо сделать немного больше:


...
if (FDataLink.Field.DataType = ftString)
  and (inherited MaxLength = 0) then
    MaxLength := FDataLink.Field.Size 
  else
    MaxLength := inherited MaxLength;
...

Или использовать что-то типа EditMask...

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования