Форум программистов, компьютерный форум CyberForum.ru

Lazarus

Войти
Регистрация
Восстановить пароль
 
shyub
211 / 96 / 21
Регистрация: 11.07.2013
Сообщений: 562
#1

Как узнать, какой компонент вызвал форму? - Lazarus

07.01.2017, 13:28. Просмотров 162. Ответов 2
Метки нет (Все метки)

Программа будет использоваться на компьютере с сенсорным монитором (мышки и клавиатуры не будет). Пользователю в процессе работы на 1-й и 2-й формах необходимо будет вводить в Edit-ы свои данные. Для этого есть два варианта:
1. По событию onClick соответствующего Edit-а вызывать экранную клавиатуру
Delphi
1
ShellExecute(0,nil,'osk.exe',nil,nil,SW_SHOW);
Но она может закрыть сам Edit и её придётся сдвигать, а так же мне нужны только цифры.
2. Создать свою 3-ю форму с клавиатурой, местоположение которой можно задавать при её вызове. Но как программно определить в какой Edit и на какой форме необходимо вводить эти данные. Есть, конечно, вариант типа флагов (при нажатии на Edit устанавливается какой-то номер или флаг, определяющий источник вызова), но это будет как-то “криво”. Можно ли эту задачу решить через Sender или Self и как?

Добавлено через 2 часа 13 минут
В Qt решение такой задачи заложено изначально. Хотелось бы решить так же красиво и в Lazarus-е.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2017, 13:28     Как узнать, какой компонент вызвал форму?
Посмотрите здесь:

Lazarus Ошибка: project1 вызвал класс исключения 'external: SIGFPE'
Lazarus Ошибка: Проект вызвал класс исключения External:SIGSEGV
Как создать компонент на форме? Lazarus
Проект вызвал класс исключений 'External: SIGSEGV' Lazarus
Проект вызвал класс исключения External: SIGSEGV Lazarus
Ошибка: проект вызвал класс исключения 'EConvertError' с сообщением is an invalid integer Lazarus
Как установить компонент Lazarus
Lazarus Проект вызвал класс исключения SIGSEGV. на строке 55
Lazarus Reset вызвал класс исключений "RunError2"
Проект project1 вызвал класс исключения 'External: SIGSEGV' Lazarus
Lazarus Как подключить компонент DBGrid в Lazarus?
Проект вызвал класс исключения "External:SIGSEGV" Lazarus

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
22466 / 14643 / 4171
Регистрация: 22.10.2011
Сообщений: 25,944
Записей в блоге: 4
07.01.2017, 14:04     Как узнать, какой компонент вызвал форму? #2
Создать свою клавиатуру, и добавить к ней:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TFormOsk = class(TForm)
// ...
  private
    e : TEdit;
  public
    procedure ShowFrom(ed : TEdit);
  end;
 
// 
procedure TFormOsk.ShowFrom(ed: TEdit);
begin
  e := ed; // с E будет работать клавиатура
  Show;
  // тут же можно позаботиться, чтобы ed не оказался перекрыт формой
end;
, теперь достаточно при необходимости показа формы передать нужный контрол:
Pascal
1
2
3
4
procedure TForm1.Edit1Enter(Sender: TObject);
begin
  FormOsk.ShowFrom(sender as tedit);
end;
northener
2996 / 2075 / 426
Регистрация: 15.07.2013
Сообщений: 12,002
08.01.2017, 02:50     Как узнать, какой компонент вызвал форму? #3
Цитата Сообщение от volvo Посмотреть сообщение
Создать свою клавиатуру
И лучше как отдельный процесс. Головной боли меньше будет.
Yandex
Объявления
08.01.2017, 02:50     Как узнать, какой компонент вызвал форму?
Ответ Создать тему
Опции темы

Текущее время: 16:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru