Помощь - Поиск - Пользователи - Календарь
Полная версия: Последовательность
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Tauka
Дано n действительных чисел.
Как наиболее удобно реализовать ввод чисел последовательности, если вводить не из файла?
С помощью какой компоненты и как?

Спасибочки!
xds
Можно использовать TMemo или TEdit, в который пользователь должен вводить числа, разделенные запятыми, пробелами/табуляцией или т. п. IMHO, это будет достаточно удобно для пользователя и просто в реализации.
xds
Вот пример ввода с помощью 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;
xds
Пардон, невнимательно читал - реализовал все для целых. Для действительных будет аналогично, только 'Data: array[0..999] of Double', 'Data[i] = StrToFloat(s)' и 'Ожидается действительное число' :p2:
BlackShadow
Млжно несколько иначе. В насале программы на форму динамически кидается n Edit'ов, адреса которых хранятся в массиве. Потом, когда понадобится можно из них считать значения. Этот метод проще хотя бы тем, что не надо разбивать хранимое в TMemo на строки и т. д. А ещё проверку корректности чисел можно вставить в обработчик OnKeyDown например...
xds
Правда тогда неудобно будет копировать/вставлять все данные или их часть с помошью буфера обмена (например, вспомним ввод регистрационных номеров: как мешают несколько полей ввода вставить в один заход кусок текста из 'serial.txt' smile.gif)

Кстати, проверка корректности ввода по 'OnKeyDown' может сильно сковывать действия пользователя. IMHO, лучше проверять все данные при нажатии кнопки, переходе на другую вкладку, форму или т. п. и автоматически делать активным TEdit, в котором (первое) неправильное значение. А можно каким-либо образом помечать все некорректно заполненные поля. Да, и не забыть о TabOrder ;)

Еще подумал о TStringGrid...
BlackShadow
А ещё в каком из дельфей есть что-то типа ValueEdit или как его там... Короче растабаный на 2 части ListBox с возможностью ввода.

Вариантов короче много. Включай фантазию и вперёд smile.gif
trminator
StringGrid еще можно...
Или один Edit и кнопка "Добавить" smile.gif Для наглядности добавленное число можно пихать в ListBox
BlackShadow
Тогда уж и кнопку "Удалить" всунуть надо. На всякий...
xds
В случае кнопочной стратегии "Добавить/удалить" не мешало бы еще завести TLabel с количеством введённых элементов. И обязательно дублировать функции кнопок клавиатурой. Например, добавлять по нажатию "Enter", а удалять - по "Delete". Интерфейсы, в которых клавиатурный ввод в обязательном порядке сопровождается манипуляциями мышкой обычно утомляет более-менее опытного пользователя...smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.