Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/40: Рейтинг темы: голосов - 40, средняя оценка - 4.53
1 / 1 / 1
Регистрация: 11.08.2014
Сообщений: 33
1

Смена фокуса ввода между двумя компонентами по нажатию Enter

21.08.2014, 11:00. Показов 8134. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
доброго времени суток.
теперь к вопросу у меня есть программа которая состоит из listbox и edit. и мне нужно чтоб по нажатию на ентер фокус ввода менялся со строки listbox на edit. буду очень благодарен за помощь.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2014, 11:00
Ответы с готовыми решениями:

Смена фокуса между TextView
Доброго времени суток. У меня есть несколько таблиц на одном view, они имитируют одну таблицу со...

Нарисовать линии между двумя компонентами
Требуется по клику на один из компонентов(image или label),а потом клику на другом(label или image)...

Неверный переход курсора между компонентами по нажатию TAB
Добрый день! Создал форму JDialog. По нажатию кнопки TAB на клавиатуре должен осуществляться...

Переход курсора между Edit по нажатию Enter
Как сделать что при заполнение поля Edit1 и нажатием клавиши Enter курсор переходил на Edit2

10
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
21.08.2014, 11:15 2
Pascal
1
2
3
4
5
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=13 then Edit1.Setfocus;
end;
1
1 / 1 / 1
Регистрация: 11.08.2014
Сообщений: 33
21.08.2014, 11:21  [ТС] 3
так же нужно чтоб по нажатию на ентер фокус менялся наобород.

Добавлено через 2 минуты
всё огромное спасибо теперь всё работает как надо
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32990 / 21296 / 8180
Регистрация: 22.10.2011
Сообщений: 36,589
Записей в блоге: 8
21.08.2014, 11:41 4
kudzey, и что, будешь на 2 компонента один и тот же код проверки нажатия Enter-а вешать? Может,

Pascal
1
2
3
4
5
6
7
8
9
10
// KeyPreview = True не забудь выставить форме
 
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
  if Key = #13 then
  begin
    Key := #0;
    SelectNext(ActiveControl, ActiveControl.TabOrder = 0, True);
  end;
end;
2
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
21.08.2014, 11:45 5
UI, А почему у меня не срабатывает
Pascal
1
2
3
4
5
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=VK_RETURN  then Edit1.Setfocus;
end;
Вообще не признает VK_RETURN
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32990 / 21296 / 8180
Регистрация: 22.10.2011
Сообщений: 36,589
Записей в блоге: 8
21.08.2014, 11:48 6
Pascal
1
Uses Windows;
есть в проекте? По умолчанию Лазарус это не добавляет, кроссплатформенность, мать ее...
2
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
21.08.2014, 11:50 7
Спасибо, конечно нету, и не заглядывал в список модулей...
1
1 / 1 / 1
Регистрация: 11.08.2014
Сообщений: 33
21.08.2014, 12:09  [ТС] 8
опять не работает как надо, помоему я допустил ошибку где то в коде.
не могли бы вы помочь ещё раз.
вот код программы. компелятор ошибки не выдаёт, но сама программа не работает как надо.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Menus,  StrUtils;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Edit1: TEdit;
    ListBox1: TListBox;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure Edit1KeyPress(Sender: TObject; var Key: char);
    procedure FormCreate(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure ListBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
      );
    procedure MenuItem3Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
    procedure MenuItem5Click(Sender: TObject);
    procedure MenuItem6Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  s1,s2,s3:string;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.MenuItem3Click(Sender: TObject);
begin
  if OpenDialog1.Execute then begin
   ListBox1.Items.LoadFromFile(OpenDialog1.FileName);
   end;
end;
 
procedure TForm1.ListBox1Click(Sender: TObject);
begin
 { s1:= Trim(ExtractWord(1, ListBox1.Items[ListBox1.ItemIndex], [';']));
  s2:=Trim(ExtractWord(2, ListBox1.Items[ListBox1.ItemIndex], [';']));
  s3:= Trim(ExtractWord(3, ListBox1.Items[ListBox1.ItemIndex], [';']));
Edit1.Text:=s3; }
end;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  with ListBox1 do
  if (key=#13)and(ItemIndex<>-1) then begin
 
    Items[ItemIndex]:=TEdit(Sender).Text;
 
    Items[ItemIndex]:=s1+';'+s2+';'+TEdit(Sender).Text
end;
  end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  SaveDialog1.Filter:=
'текстовые файлы|*.txt|Все файлы|*.*';
end;
 
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if key=13 then Edit1.Setfocus;
   begin
  s1:= Trim(ExtractWord(1, ListBox1.Items[ListBox1.ItemIndex], [';']));
  s2:=Trim(ExtractWord(2, ListBox1.Items[ListBox1.ItemIndex], [';']));
  s3:= Trim(ExtractWord(3, ListBox1.Items[ListBox1.ItemIndex], [';']));
Edit1.Text:=s3;
end;
end;
 
procedure TForm1.MenuItem4Click(Sender: TObject);
begin
    if SaveDialog1.Execute then begin
   ListBox1.Items.SaveToFile(SaveDialog1.FileName);
   end;
end;
 
procedure TForm1.MenuItem5Click(Sender: TObject);
begin
  if MessageDlg('Вставить строку выше выделенной?', mtInformation, [mbOk,mbCancel],0) = mrOK
  then
  begin
    ListBox1.Items.Insert(ListBox1.ItemIndex, Edit1.text);
    ListBox1.Items.SaveToFile('FileName');
end;
end;
 
procedure TForm1.MenuItem6Click(Sender: TObject);
begin
  if MessageDlg('Удалить строку?', mtInformation,
  [mbOk,mbCancel],0) = mrOK
  then
  begin
    ListBox1.Items.delete(ListBox1.ItemIndex);
    ListBox1.Items.SaveToFile('FileName');
  end;
 
end;
 
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32990 / 21296 / 8180
Регистрация: 22.10.2011
Сообщений: 36,589
Записей в блоге: 8
21.08.2014, 12:27 9
Лучший ответ Сообщение было отмечено kudzey как решение

Решение

1)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  with ListBox1 do
    if (key = #13) and (ItemIndex <> -1) then
    begin
 
      Items[ItemIndex] := TEdit(Sender).Text;
 
      Items[ItemIndex] := s1 + ';' + s2 + ';' + TEdit(Sender).Text;
      ListBox1.SetFocus; // <--- Вот это надо добавить
    end;
end;
2)
Pascal
1
2
3
4
5
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
begin
  if key = 13 then
    Edit1.SetFocus; // Здесь только эта строка
end;
3) добавляешь обработчик OnSelectionChange для ListBox-а, и пишешь в нем:
Pascal
1
2
3
4
5
6
7
procedure TForm1.ListBox1SelectionChange(Sender: TObject; User: boolean);
begin
  s1 := Trim(ExtractWord(1, ListBox1.Items[ListBox1.ItemIndex], [';']));
  s2 := Trim(ExtractWord(2, ListBox1.Items[ListBox1.ItemIndex], [';']));
  s3 := Trim(ExtractWord(3, ListBox1.Items[ListBox1.ItemIndex], [';']));
  Edit1.Text := s3;
end;
Теперь будет работать как надо...
1
1 / 1 / 1
Регистрация: 11.08.2014
Сообщений: 33
21.08.2014, 13:17  [ТС] 10
у меня собственно последний вопрос. есть кнопка отвечающая за вставить строку, она вставляет строку выше выделенной, как сделать так чтоб строка вставлялась ниже выделенной.
Pascal
1
2
3
4
5
6
7
8
9
procedure TForm1.MenuItem5Click(Sender: TObject);
begin
  if MessageDlg('Вставить строку выше выделенной?', mtInformation, [mbOk,mbCancel],0) = mrOK
  then
  begin
    ListBox1.Items.Insert(ListBox1.ItemIndex, Edit1.text);
    ListBox1.Items.SaveToFile('FileName');
end;
end;
когда я пишу ItemIndex-1 оно на две строки выше вставляет.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32990 / 21296 / 8180
Регистрация: 22.10.2011
Сообщений: 36,589
Записей в блоге: 8
21.08.2014, 13:22 11
Цитата Сообщение от kudzey Посмотреть сообщение
когда я пишу ItemIndex-1
Почему "минус", когда надо "плюс"?
1
21.08.2014, 13:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2014, 13:22
Помогаю со студенческими работами здесь

Переключение между ячейками TStringGrid по нажатию Enter
Здравствуйте. Есть динамически создаваемые таблицы. Нужно сделать так, чтобы при вводе данных в...

Пожалуйсто обясниту разницу на пример между TImage и TDBImage и т.д между обичнами компонентами и DB компонентами
Здарова люди ;) Пожалуйсто обясниту разницу на пример между TImage и TDBImage и т.д между обичнами...

Провести прямую линию между двумя объектами по нажатию кнопки
Добрый вечер. Есть вопрос: есть два объекта panel2 и panel4, которые находятся в panel1. Как по...

Сделать так чтобы корреляция между двумя столбцами высчитывалось по нажатию синий кнопки
Как сделать так чтобы корреляция между двумя столбцами высчитывалось по нажатию синий кнопки ...

Проверка введенных данных при потере фокуса компонентами
Здравствуйте. На некоторых формах ввел проверку верности введенных данных при потере фокуса...

Смена фокуса
Привет всем! Используя WinApi создаю главное окно hWnd, а на нем несколько окошек типа &quot;edit&quot;. Хочу...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru