Дано 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 и кнопка "Добавить" Для наглядности добавленное число можно пихать в ListBox -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
BlackShadow |
Сообщение
#9
|
Гость |
Тогда уж и кнопку "Удалить" всунуть надо. На всякий...
|
xds |
Сообщение
#10
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
В случае кнопочной стратегии "Добавить/удалить" не мешало бы еще завести TLabel с количеством введённых элементов. И обязательно дублировать функции кнопок клавиатурой. Например, добавлять по нажатию "Enter", а удалять - по "Delete". Интерфейсы, в которых клавиатурный ввод в обязательном порядке сопровождается манипуляциями мышкой обычно утомляет более-менее опытного пользователя...
-------------------- The idiots are winning.
|
Текстовая версия | 16.05.2024 15:49 |