скрыть компонент по нажатии enter

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
NewUser
новенький
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

скрыть компонент по нажатии enter

Сообщение NewUser »

ввожу в поле текст, под Edit показывается DBGrid. нужно, чтобы по нажатии на enter DBGrid стал невидимым

использую код

Код: Выделить всё

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  {Unit1.pas(44,13) Error: Incompatible types: got "Char" expected "LongWord"}
  if Key <> #13 then
  begin
    DBGrid1.Visible := true;
  end;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  if Key = #13 then
  begin
    DBGrid1.Visible := false;
  end;
end;


но получается, что сначала KeyPress скрывает, а потом KeyUp показывает DBGrid

пытаюсь не реагировать на Enter в KeyUp

Код: Выделить всё

if Key <> #13 then

но вываливается ошибка {Unit1.pas(44,13) Error: Incompatible types: got "Char" expected "LongWord"}

подскажите как решить данную ситуацию
m_guest
постоялец
Сообщения: 193
Зарегистрирован: 14.08.2005 15:10:21

Сообщение m_guest »

Конечно будет ругаться.
В KeyUp параметр Key типа Word, а ты ему даешь #13
Нужно использовать вместо #13 константу VK_RETURN из модуля JwaWinUser.

А вообще, лучше использовать событие OnKeyDown у формы (не забыть у ней же поставить KeyPreview в True)
Примерно так:

Код: Выделить всё

//подключаем JwaWinUser для VK_RETURN

implementation
uses
  JwaWinUser;
//......................

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
  if Key=VK_RETURN then
     DBGrid1.Visible:=False;
end;
NewUser
новенький
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Сообщение NewUser »

тоже и происходит если использовать в форме

KeyDown скрывает, а KeyUp показывает.

сделал так

Код: Выделить всё

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_RETURN then
  begin
    DBGrid1.Visible := false;
  end
 else
 begin
    DBGrid1.Visible := true;
 end;
end;


а где можно взять все значения констант для клавиш?
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

зажать контл и кликнуть по VK_RETURN
NewUser
новенький
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Сообщение NewUser »

SAK
постоялец
Сообщения: 158
Зарегистрирован: 17.02.2006 23:45:14
Откуда: Тим
Контактная информация:

Сообщение SAK »

NewUser писал(а):тоже и происходит если использовать в форме

KeyDown скрывает, а KeyUp показывает.

сделал так
................

Что-то здесь не так. Для чего надо реагировать на отпускание клавишь? Если для включения DBGrid при вводе в данных, то мне кажется логичнее перехватывать событие onChange, ведь текст может быть не только введён с клавиатуры, но и вставлен мышью из буфера.
Ответить