Дано n действительных чисел.
Как наиболее удобно реализовать ввод чисел последовательности, если вводить не из файла?
С помощью какой компоненты и как?
Спасибочки!
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
![]() ![]() |
| Tauka |
Сообщение
#1
|
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Репутация: 0 |
Дано n действительных чисел.
Как наиболее удобно реализовать ввод чисел последовательности, если вводить не из файла? С помощью какой компоненты и как? Спасибочки! -------------------- С уважением,
Таука. |
| xds |
Сообщение
#2
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Можно использовать TMemo или TEdit, в который пользователь должен вводить числа, разделенные запятыми, пробелами/табуляцией или т. п. IMHO, это будет достаточно удобно для пользователя и просто в реализации.
-------------------- The idiots are winning.
|
| xds |
Сообщение
#3
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Вот пример ввода с помощью 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 Пол: Мужской Репутация: 26 |
Пардон, невнимательно читал - реализовал все для целых. Для действительных будет аналогично, только '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 Пол: Мужской Репутация: 26 |
Правда тогда неудобно будет копировать/вставлять все данные или их часть с помошью буфера обмена (например, вспомним ввод регистрационных номеров: как мешают несколько полей ввода вставить в один заход кусок текста из 'serial.txt'
Кстати, проверка корректности ввода по 'OnKeyDown' может сильно сковывать действия пользователя. IMHO, лучше проверять все данные при нажатии кнопки, переходе на другую вкладку, форму или т. п. и автоматически делать активным TEdit, в котором (первое) неправильное значение. А можно каким-либо образом помечать все некорректно заполненные поля. Да, и не забыть о TabOrder ;) Еще подумал о TStringGrid... -------------------- The idiots are winning.
|
| BlackShadow |
Сообщение
#7
|
|
Гость |
А ещё в каком из дельфей есть что-то типа ValueEdit или как его там... Короче растабаный на 2 части ListBox с возможностью ввода.
Вариантов короче много. Включай фантазию и вперёд |
| trminator |
Сообщение
#8
|
|
Четыре квадратика ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: 4 |
StringGrid еще можно...
Или один Edit и кнопка "Добавить" -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
| BlackShadow |
Сообщение
#9
|
|
Гость |
Тогда уж и кнопку "Удалить" всунуть надо. На всякий...
|
| xds |
Сообщение
#10
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
В случае кнопочной стратегии "Добавить/удалить" не мешало бы еще завести TLabel с количеством введённых элементов. И обязательно дублировать функции кнопок клавиатурой. Например, добавлять по нажатию "Enter", а удалять - по "Delete". Интерфейсы, в которых клавиатурный ввод в обязательном порядке сопровождается манипуляциями мышкой обычно утомляет более-менее опытного пользователя...
-------------------- The idiots are winning.
|
![]() ![]() |
|
Текстовая версия | 5.11.2025 19:06 |