• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом


  • Иллюстрированный самоучитель по Delphi 7 для начинающих

    Использование компонента StringGrid

    Если нужно ввести массив дробных чисел (a: array [1..5] of real), то процедура обработки события OnKeyPress несколько усложнится, т. к. помимо цифр допустимыми символами являются символ-разделитель (запятая или точка – зависит от настройки Windows) и минус. С целью обеспечения некоторой дружественности программы по отношению к пользователю можно применить трюк: подменить вводимый пользователем неверный разделитель верным. Определить, какой символ-разделитель допустим в текущей настройке Windows, можно, обратившись к глобальной переменной Decimaiseparator.

    В листинге 5.4 приведен текст модуля приложения ввода и обработки массива дробных чисел. Процедура обработки события OnKeyPress обеспечивает ввод в ячейку таблицы только допустимых при записи дробного числа символов.

    Листинг 5.4. Ввод и обработка массива дробных чисел.

    unit .getar_1; interface
    uses
    Windows, Messages, SysUtils, Variants, Classes,
    Graphics, Controls, Forms, Dialogs, Grids, StdCTRLs;
    type
    TForm1= class(TForm)
    Label1: TLabel;
    StringGrid1: TStringGrid;
    Button1: TButton;
    Label2: TLabel;
    procedure Button1ClicktSender: TObject);
    procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    var
    Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.ButtonlClick(Sender: TObject);
    var
    a: array[1..5] of real; // массив
    suram: real; // сумма элементов
    sr: real; // среднее арифметическое
    i: integer; // индекс
    begin
    // ввод массива
    // считаем, что если ячейка пустая, то соответствующий
    // ей элемент массива равен нулю
    for i: = 1 to 5 do
    if Length(StringGrid1.Cells[i-l,0])<>0
    then a[i]: = StrToFloat(StringGrid1.Cells[i-1, 0]) else a[i]: = 0;
    // обработка массива
    summ: = 0;
    for i: = 1 to 5 do
    summ: = summ + a[i]; sr: = summ / 5;
    // вывод результата
    Label2.Caption: =
    'Сумма элементов: ' + FloatToStr(summ)
    + #13+ 'Среднее арифметическое: ' + FloatToStr(sr); end;
    '/ Функция обеспечивает ввод в ячейку только допустимых символов
    procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
    case Key of
    #8,'0'..'9':; // цифры и <Backspace>
    #13: // клавиша Enter
    if StringGrid1.Col < StringGrid1.ColCount – 1
    then StringGrid1.Col: = StringGrid1.Col + 1; '.',',':
    // разделитель целой и дробной частей числа
    begin
    if Key <> DecimalSeparator then
    Key: = DecimalSeparator; // заменим разделитель
    // на допустимый
    if Pos(StringGrid1.Cells[StringGrid1.Col,0],
    DecimalSeparator) <> 0
    then Key: = Chr(O); // запрет ввода второго
    // разделителя end;
    ' – ': // минус можно ввести только первым символом,
    // т. е. когда ячейка пустая
    if Length(StringGrid1.Cells[StringGrid1.Col, 0]) <>0 then
    Key: = Chr(0);
    else // остальные символы запрещены
    key: = Chr(0);
    end;
    end;
    end.
    
    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.