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

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

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

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

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

Сообщение Владимир »

Господа-граждане, всем доброго! Туплю чего-то...
Пытаюсь программно сымитировать нажатие 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 09:36:46, всего редактировалось 1 раз.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

А для чего именно?
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

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

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; 
Владимир
постоялец
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Сообщение Владимир »

Поясню - по событию происходит обработка текста в 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 
.....
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Владимир, то есть, тебе надо перевести строку?
Mikhail
энтузиаст
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Сообщение Mikhail »

Можно так

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

Edit1.Perform(WM_KEYDOWN, VkKeyScan(#13), 0);
Владимир
постоялец
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Сообщение Владимир »

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

Добавлено спустя 47 секунд:
Re: Программно вызвать OnKeyDown (Linux)
Mikhail писал(а):Можно так

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

Edit1.Perform(WM_KEYDOWN, VkKeyScan(#13), 0);

Это Linux!

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


Да нет, в Edit находится некое число, которое нужно обработать по KeyDown/
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

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

Сообщение Владимир »

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

Спасибо, не знал, попробую.
slyubez
постоялец
Сообщения: 186
Зарегистрирован: 31.03.2015 07:44:07

Сообщение slyubez »

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

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

Сообщение Лекс Айрин »

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


Насколько я знаю... по возможности.
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

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

Сообщение Лекс Айрин »

pupsik, это да.
Ответить