Программно вызвать OnKeyDown (Linux) [РЕШЕНО]

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

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

Программно вызвать OnKeyDown (Linux) [РЕШЕНО]

Сообщение Владимир » 19.04.2016 09:10:23

Господа-граждане, всем доброго! Туплю чего-то...
Пытаюсь программно сымитировать нажатие Enter на Edit
Код: Выделить всё
........
begin
Edit1KeyDown(self,13,NIL);
//ругань на 3-й параметр - требует TShiftState
end;

ладно
Код: Выделить всё
.......
var
shf:TShiftState;
begin
shf:=ssShift;
//ругань TShiftStateEnum  и TShiftState - несоответствие типов
Edit1KeyDown(self,13,shf);
end;

Туплю...
Последний раз редактировалось Владимир 19.04.2016 10:36:46, всего редактировалось 1 раз.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Программно вызвать OnKeyDown (Linux)

Сообщение Лекс Айрин » 19.04.2016 09:22:47

А для чего именно?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Программно вызвать OnKeyDown (Linux)

Сообщение pupsik » 19.04.2016 09:38:16

Код: Выделить всё
procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
  if (key = 13) and (ssShift in Shift) then
    ShowMessage('bo');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ss : TShiftState;
  t : Word;
begin
  ss := [ssShift];
  t := 13;
  Edit2KeyDown(sender, t, ss);
end; 
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Программно вызвать OnKeyDown (Linux)

Сообщение Владимир » 19.04.2016 10:14:29

Поясню - по событию происходит обработка текста в TEdit.
Ошибок при компиляции нет, а вот по исполнению получаю SigServ на файл Control.inc
Код: Выделить всё
function TControl.GetText: TCaption;
var
  len: Integer;
  GetTextMethod: TMethod;
begin
  // Check if GetTextBuf is overridden, otherwise we can call RealGetText directly
  Assert(Assigned(@Self.GetTextBuf), 'TControl.GetText: GetTextBuf Method is Nil');
  GetTextMethod := TMethod(@Self.GetTextBuf);//вот на этой строке
  if GetTextMethod.Code = Pointer(@TControl.GetTextBuf) then begin
    Result := RealGetText;
  end
  else begin 
.....
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Программно вызвать OnKeyDown (Linux)

Сообщение Лекс Айрин » 19.04.2016 10:18:03

Владимир, то есть, тебе надо перевести строку?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Программно вызвать OnKeyDown (Linux)

Сообщение Mikhail » 19.04.2016 10:23:26

Можно так
Код: Выделить всё
Edit1.Perform(WM_KEYDOWN, VkKeyScan(#13), 0);
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: Программно вызвать OnKeyDown (Linux) [РЕШЕНО]

Сообщение Владимир » 19.04.2016 10:30:12

pupsik, спасибо! На тестовом проекте все работает, это уж мои заморочки...

Добавлено спустя 47 секунд:
Re: Программно вызвать OnKeyDown (Linux)
Mikhail писал(а):Можно так
Код: Выделить всё
Edit1.Perform(WM_KEYDOWN, VkKeyScan(#13), 0);

Это Linux!

Добавлено спустя 2 минуты 46 секунд:
Re: Программно вызвать OnKeyDown (Linux)
Лекс Айрин писал(а):Владимир, то есть, тебе надо перевести строку?


Да нет, в Edit находится некое число, которое нужно обработать по KeyDown/
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Программно вызвать OnKeyDown (Linux)

Сообщение Лекс Айрин » 19.04.2016 10:34:10

Владимир, в линукс версии лазаруса добавлен слой эмуляции винподобного API.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Программно вызвать OnKeyDown (Linux) [РЕШЕНО]

Сообщение Владимир » 19.04.2016 10:48:03

Лекс Айрин писал(а):Владимир, в линукс версии лазаруса добавлен слой эмуляции винподобного API.

Спасибо, не знал, попробую.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Программно вызвать OnKeyDown (Linux) [РЕШЕНО]

Сообщение slyubez » 19.04.2016 12:43:06

Владимир, в линукс версии лазаруса добавлен слой эмуляции винподобного API.

Неужели во все виджеты?
slyubez
постоялец
 
Сообщения: 180
Зарегистрирован: 31.03.2015 08:44:07

Re: Программно вызвать OnKeyDown (Linux) [РЕШЕНО]

Сообщение Лекс Айрин » 19.04.2016 13:01:54

slyubez писал(а):Неужели во все виджеты?


Насколько я знаю... по возможности.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Программно вызвать OnKeyDown (Linux) [РЕШЕНО]

Сообщение pupsik » 19.04.2016 15:53:36

а потом выцепай что не работает...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Программно вызвать OnKeyDown (Linux) [РЕШЕНО]

Сообщение Лекс Айрин » 19.04.2016 17:40:47

pupsik, это да.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 238

Рейтинг@Mail.ru