![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Tauka |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 28 Репутация: ![]() ![]() ![]() |
Дано n действительных чисел.
Как наиболее удобно реализовать ввод чисел последовательности, если вводить не из файла? С помощью какой компоненты и как? Спасибочки! -------------------- С уважением,
Таука. |
xds |
![]()
Сообщение
#2
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Можно использовать TMemo или TEdit, в который пользователь должен вводить числа, разделенные запятыми, пробелами/табуляцией или т. п. IMHO, это будет достаточно удобно для пользователя и просто в реализации.
-------------------- The idiots are winning.
|
xds |
![]()
Сообщение
#3
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот пример ввода с помощью TMemo, для случая, когда числа должны разделяться пробельными символами (пробелы, табуляция, переводы строк):
Код procedure TForm1.Button1Click(Sender: TObject); var Data: array[0..999] of Integer; s: String; i, p: Integer; begin i := 0; p := 1; repeat if i >= 1000 then begin Application.MessageBox('Количество элементов не должно превышать 1000', 'Ошибка', MB_OK or MB_ICONERROR); Exit; end; while (p <= Length(Memo1.Text)) and (Memo1.Text[p] <= ' ') do Inc(p); s := ''; while (p <= Length(Memo1.Text)) and (Memo1.Text[p] > ' ') do begin s := s + Memo1.Text[p]; Inc(p); end; if s = '' then Break; try Data[i] := StrToInt(s); except Application.MessageBox('Ожидается целое', 'Ошибка', MB_OK or MB_ICONERROR); Memo1.SelStart := p - Length(s) - 1; Memo1.SelLength := Length(s); Memo1.SetFocus; Exit; end; Inc(i); until p >= Length(Memo1.Text); { Сделать что-нибудь полезное с Data (i - кол-во элементов) } end; -------------------- The idiots are winning.
|
xds |
![]()
Сообщение
#4
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Пардон, невнимательно читал - реализовал все для целых. Для действительных будет аналогично, только 'Data: array[0..999] of Double', 'Data[i] = StrToFloat(s)' и 'Ожидается действительное число' :p2:
-------------------- The idiots are winning.
|
BlackShadow |
![]()
Сообщение
#5
|
Гость ![]() |
Млжно несколько иначе. В насале программы на форму динамически кидается n Edit'ов, адреса которых хранятся в массиве. Потом, когда понадобится можно из них считать значения. Этот метод проще хотя бы тем, что не надо разбивать хранимое в TMemo на строки и т. д. А ещё проверку корректности чисел можно вставить в обработчик OnKeyDown например...
|
xds |
![]()
Сообщение
#6
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Правда тогда неудобно будет копировать/вставлять все данные или их часть с помошью буфера обмена (например, вспомним ввод регистрационных номеров: как мешают несколько полей ввода вставить в один заход кусок текста из 'serial.txt'
![]() Кстати, проверка корректности ввода по 'OnKeyDown' может сильно сковывать действия пользователя. IMHO, лучше проверять все данные при нажатии кнопки, переходе на другую вкладку, форму или т. п. и автоматически делать активным TEdit, в котором (первое) неправильное значение. А можно каким-либо образом помечать все некорректно заполненные поля. Да, и не забыть о TabOrder ;) Еще подумал о TStringGrid... -------------------- The idiots are winning.
|
BlackShadow |
![]()
Сообщение
#7
|
Гость ![]() |
А ещё в каком из дельфей есть что-то типа ValueEdit или как его там... Короче растабаный на 2 части ListBox с возможностью ввода.
Вариантов короче много. Включай фантазию и вперёд ![]() |
trminator |
![]()
Сообщение
#8
|
Четыре квадратика ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: ![]() ![]() ![]() |
StringGrid еще можно...
Или один Edit и кнопка "Добавить" ![]() -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
BlackShadow |
![]()
Сообщение
#9
|
Гость ![]() |
Тогда уж и кнопку "Удалить" всунуть надо. На всякий...
|
xds |
![]()
Сообщение
#10
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
В случае кнопочной стратегии "Добавить/удалить" не мешало бы еще завести TLabel с количеством введённых элементов. И обязательно дублировать функции кнопок клавиатурой. Например, добавлять по нажатию "Enter", а удалять - по "Delete". Интерфейсы, в которых клавиатурный ввод в обязательном порядке сопровождается манипуляциями мышкой обычно утомляет более-менее опытного пользователя...
![]() -------------------- The idiots are winning.
|
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 21:03 |