[DELPHI] Звук при ограниченых символов в edit

Статус
В этой теме нельзя размещать новые ответы.
Ваш код.

Код:
var
  Form1: TForm1;
  MAX_LENGTH: Integer;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
begin
  if Length(Edit1.Text)>MAX_LENGTH then begin
    Edit1.ReadOnly := TRUE;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MAX_LENGTH:=Edit1.MaxLength;
  Edit1.MaxLength:=Edit1.MaxLength+1;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = chr(8) then
  Edit1.ReadOnly:=False;
end;

Конечно, кроме БекСпейс можна проверять еще и Делит
 
Виллен а потом если выделить весь текст и нажать любой символ то клавишы не пашут)))))))))
т.е. когда едит уже полный, символы не должны вбиваться,
и в тоже время когда есть выделение должны вбиваться с удалением старых символов.
Задачу понял пойду прогать :)


добавлено
вот так :
Код:
 if ( Edit1.SelText.Length() > 0  ) return;
 if(( Edit1.Text.Length() >= 3 ) && (Key <>  8))
         Key := 0;
код перевел с Cbuilder так что возможны небольшие глюки/ Забыл я уже паскаль :/



Ratko написал(а):
Конечно, кроме БекСпейс можна проверять еще и Делит
забавно но делит и стрелочки не вызывают KeyPress, только KeyDown
поэтому смысла ловить их (в keypress) нету.
 
Виллен код не паше)) но логически посмотрев на него, будет опять тупёж с кореткой)))
 
глянь готовый exe

так работает или нет?
ограничение на 3 символа
тупняжа с кареткой я не заметил, может я не то ищу?
 
глянь готовый exe
*** скрытое содержание ***
так работает или нет?
ограничение на 3 символа
тупняжа с кареткой я не заметил, может я не то ищу?

Во во то что надо) ток переведи его на дельфийский плз и то чудо которое определяло какую клавишу я нажал)
 
давай спросим у дельфийских гуру :)
я паскаль забыл
вот С++ код
Код:
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 switch(Key)
        {
        case 8:  Label2->Caption = "Backspace"; break;
        case 13:  Label2->Caption = "Enter"; break;
        case 37:  Label2->Caption = "Left"; break;
        case 38:  Label2->Caption = "Up";   break;
        case 39:  Label2->Caption = "Right"; break;
        case 40:  Label2->Caption = "Down"; break;
        case 46:  Label2->Caption = "Del"; break;
        default:
                   Label2->Caption =  IntToStr(Key);
        }

/* if( Edit1->Text.Length() > 3)
         Key = 0;
  */


}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
 Label1->Caption =  IntToStr(Key);
 if( Edit1->SelText.Length() !=0  ) return;
 if(( Edit1->Text.Length() >= 3 ) && (Key != 8))
         Key = 0;
}
//---------------------------------------------------------------------------
 
Поправил баг с курсором:
Код:
var
  Form1: TForm1;
  editOldStr: String;

const
  MAX_LENGTH: Integer = 4;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
var
   i: Integer;
begin
   if Length(Edit1.Text)>MAX_LENGTH then begin
      i := Edit1.SelStart;
      Edit1.Text := editOldStr;
      Edit1.SelStart := i-1;
   end
   else
      editOldStr := Edit1.Text;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   editOldStr := Edit1.Text;
end;

Вот экзешнег: Посмотреть вложение Project1.rar:


Виллен, я все-таки склоняюсь к обработке OnChange, потому что в Edit можно вставить текст правой кнопкой мышки, и KeyDown/KeyPress его не отловит.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху