Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > RichEdit "глючит"


Автор: Delvish 4.11.2011, 11:27
всем день добрый!
при обработке нажатых клавиш в определенный момент RichEdit перестает записывать символы, однако действия нажатых клавиш все же происходят. описание немного прояснит код:
Код

procedure TForm5.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #9 then
  begin
  Key := #0;
  {небольшой алгоритм действий}
  end;
if Key <> #13 then comm := comm + Key;
if Key = #13 then
  begin
  comm := '';
  Key := #0;
  {небольшой алгоритм действий}
  end;

end;


и все бы ничего, поначалу все работает замечательно. много раз нажимаешь и Tab, и Enter и другие кнопки - происходит то, что нужно. но в определенный момент в RichEdit'е перестают отображаться символы, хотя действия происходят и дальше и переменная comm записывает в себя нажатые клавиши... то ли из-за объема текста такое происходит (всякий раз объем разный), то ли на Tab в какой-то момент RichEdit криво реагирует - непонятно. странное поведение, в общем.
есть мысли в чем же может быть проблема?
{код сырой, надо в case переделать}

Автор: Delvish 9.11.2011, 11:40
UP темке... ни у кого так и не появилось идей?

Автор: Yanis 9.11.2011, 12:37
Не совсем понятна ваша проблема. Ваш код (то, что вы представили) делает то, что он должен.
Аномалии могут быть в том случае, когда вы хотите чтобы программа выполняла одно, а запрограммировали (по ошибке или незнанию) другое.

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

Автор: Delvish 9.11.2011, 15:12
код там не слишком уж и замысловат... вот он весь, если это сыграет какое-то значение. и, как я уже написал раньше, работает до поры - до времени. сначала RichEdit прекрасно записывает в себя нажатые символы, а потом загадочным образом перестает это делать, хотя нажатые кнопки в переменную Key попадают и обрабатываются по алгоритму

Код

procedure TForm5.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #9 then
  begin
  Key := #0;
  SSH.PostCommand(comm + #9);
  comm := '';
  RichEdit1.Text := (SSH.ReceiveData);
  RichEdit1.SelStart := RichEdit1.GetTextLen;
  RichEdit1.Perform(EM_SCROLLCARET, 0, 0);
  end;
if Key <> #13 then comm := comm + Key;
if Key = #13 then
  begin
  SSH.SendCommand(comm);
  comm := '';
  Key := #0;
  RichEdit1.Text := (SSH.ReceiveData);
  RichEdit1.SelStart := RichEdit1.GetTextLen;
  RichEdit1.Perform(EM_SCROLLCARET, 0, 0);
  end;

end;


перепроверил не один раз - причина "глюка" неизвестна

Автор: EvgeniL 15.2.2012, 06:54
аналогично, только у меня С++
динамически создаваемый (на время работы с ним) в CView CRichEditCtrl стабильно и сразу съезжает после вывода и закрытия print preview
хотя нажатия Space и BackSpace контрол продолжает отлавливать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)