Поиск по этому блогу

воскресенье, 9 сентября 2012 г.

Lazarus Ограничение длины вводимой строки

Сегодня моя логика разбилась в дребезги....

Понадобилось сделать ограничение на длину вводимой строки в TEdit. До этого было подобное в TStringGrid и всё отлично работало. Принцип работы такой создаем глобальную переменную, в неё, по событию изменения текста в объекте постоянно сохраняем текст из объекта, а когда длина текста превышает указанную, то нашему полю ввода присваиваем старое значение из глобальной переменной.

Начал делать такое на TEdit, кинул на форму, сделал событие OnChange и при тестировании приложения ловлю сигфолт, когда длина строки подходит к заданной. Делал много экспериментов, даже имена переменных менял...
Потом сделал отдельный проект для тестов. Но в нем ситуация оказалась аналогичная.



Собственно код:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, LCLProc;
type
  { TForm1 }
  TForm1 = class(TForm)
    edit: TEdit;
    procedure editChange(Sender: TObject);
  private
    { private declarations }
    fillAllLastVal:string;
  public
    { public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.editChange(Sender: TObject);
  //  ограничиваем количество символов
var
   value: string;
begin
  value := edit.text;
  if utf8length(Value) < 11 then
     begin
          fillAllLastVal:= edit.text;
      end
  else
     begin
       //  value:=fillAllLastVal;
         edit.text:=fillAllLastVal;
     end;
end;
end.   


Но этот пост заставило написать совсем другое, а именно, закомментированная строка         //  value:=fillAllLastVal;  Вставив которую(конечно раскомментировав), после кучи экспериментов, получил рабочий проект. ЭТО ПРОСТО ВЫНОС МОЗГА :) Почему так, понять не могу, а разбираться дальше времени нет.

Зато дальше сделал правильный метод ограничения длинны:

procedure TForm1.editChange(Sender: TObject);
begin
  if utf8length(edit.text) > MAX_SYMBOLS then
     begin
      edit.text := UTF8Copy(edit.text,1,MAX_SYMBOLS);
     end;
end; 

 Делалось под Kubuntu 12.04, Lazarus 1.0, fpc 2.60

Комментариев нет:

Отправить комментарий