Ниже приведен обработчик нажатия на кнопку «Сгенерировать».
- 1. procedure TForm1. genClick (Sender: TObject);
- 2. var
- 3. i: Integer;
- 4. begin
- 5. Randomize;
- 6. if not field. is_digit (n_gen.Text)
- 7. then
- 8. begin
- 9. ShowMessage ('Неподходящие координаты');
- 10. Exit;
- 11. end;
- 12. for i := 1 to StrToInt (n_gen.Text) do
- 13. field. add_point_int (Random (img1.Width), Random (img1.Height));
- 14. field. update_list;
- 15. end;
В строке 5 происходит инициализация генератора случайных чисел процедурой Randomize. Если пользователь ввел некорректное числовое значение, то программа сообщает об ошибке и выходит из процедры (строки 6−11). В случае, если пользователь ввел корректное числовое значение N, программа генерирует 2*N случайных числа, с условием, что они могут быть корректными координатами точек. Сгенерированные координаты добавляются в список методом add_point_int объекта tfield (строки 12−13), после чего происходит обновление списка методом update_list.
Листинг метода add_point_int приведен ниже.
- 1. procedure tfield. add_point_int (x, y: integer);
- 2. begin
- 3. if (x > form1. img1.Width) or (y > Form1. img1.Height) or (x < 0) or (y < 0)
- 4. then
- 5. begin
- 6. ShowMessage ('Неподходящие координаты');
- 7. Exit;
- 8. end;
- 9. points[cnt]. x := x;
- 10. points[cnt]. y := y;
- 11. Inc (cnt);
- 12. end;
Эта процедура добавляет в список точек точку с координатами (x, y), после чего увеличивает на 1 счетчик точек.
Листинг процедуры update_list приведен ниже.
- 1. procedure tfield. update_list ();
- 2. var i: integer;
- 3. canvas: tcanvas;
- 4. begin
- 5. Form1. lst1.Clear;
- 6. canvas := Form1. img1.Canvas;
- 7. canvas.Brush.Color:=clWhite;
- 8. canvas. Rectangle (0, 0, Form1. img1.Width, Form1. img1.Height);
- 9. canvas.Brush.Color:=clBlack;
- 10. for i := 0 to cnt-1 do
- 11. begin
- 12. Form1. lst1.Items.add (IntToStr (points[i]. x)+ ', '+IntToStr (points[i]. y));
- 13. canvas. Ellipse (points[i]. x-2, Form1. img1.Height — points[i]. y-2, points[i]. x+2, Form1. img1.Height — points[i]. y+2);
- 14. end;
- 15. end;
В строке 5 очищается список точек.
В строке 6 ссылка на canvas поля для вывода результата сохраняется в локальную переменную для быстрого доступа в дальнейшем.
В строках 6−7 фон поля для вывода результата меняется на белый.
В строках 8−12 рисуются и добавляются в список точек сами точки.