Как сделать квадрат в делфи

Обновлено: 06.07.2024

Я пытаюсь создать программу для латинского квадрата, которая принимает введенный пользователем размер квадрата (например, при вводе 5 будет получен латинский квадрат 5x5), а затем выводит форматированный квадрат пользователю.

Если вы не знаете, что такое латинский квадрат, или хотите увидеть реальную задачу, которую мне поставили, не ищите больше .

Я немного закодировал некоторые из них, но я терплю неудачу на первом препятствии. Учителя не помогают, вы - моя единственная надежда.

После последней строки кода (setlength) я хочу установить для ВСЕХ значений в моем новом 2D-массиве введенное пользователем число. Думаю.

Кроме этого, я понятия не имею, что я делаю.

Если вы хотите мне помочь, пожалуйста, постарайтесь сделать это как можно проще, чтобы я мог понять это?

Извините за любые ошибки, сделанные в этом, впервые на переполнении стека.

2 ответа

ссылка также дает ответ, см. Код ниже.

Как говорится в ссылке: начните с 1 2 3 4 5 6 , затем на следующей строке, сдвиньте на единицу, чтобы получилось 2 3 4 5 6 1 и т. Д. . Это первая часть (с X , Y циклы) делает: он заполняет квадрат.

Конечно, Y + X может превысить предел 0..5 (я добавлю 1 позже), поэтому вы используете mod для переноса значений вокруг, поэтому > становится 0 , 7 становится 1 и т. д. В действительности:

Затем вы добавляете 1, так что вместо 0 1 2 3 4 5 вы получаете 1 2 3 4 5 6 .

Вторая часть процедуры просто печатает массив Square .

Если вам не нужно сохранять квадрат, это можно сделать в одной части:

Предполагая, что вы в моей школе, учитывая, что это точное домашнее задание, которое я сделал из одной и той же книги слово в слово. Принимая во внимание приведенный выше код, я добавлю одну точку, размер латинских квадратов должен быть введен пользователем, поэтому в последнем блоке кода измените его следующим образом:

Подписаться на RSS рассылку

В данном уроке научимся работать с Canvas. Что это такое? Если перевести это слова на русский язык то получится, что это холст, канва. Canvas представляет из себя область компонента, на которой можно создавать, хранить и модифицировать графическое изображение.

Вы наверно не раз видели что у формы есть свойство Canvas. Такое же свойство есть и у TImage. Что на ней можно рисовать? Можно нарисовать начиная от простой точки до овала и вывода текста. Давайте попробуем нарисовать прямую линию из точки А в точку Б. Выложите на форму кнопку и в обработчике onClick пишем:

Что есть что? MoveTo - это из каких координат начинать рисовать линию, можно сказать это начало линии. А LineTo соответственно конец линии.

Линия нарисовалась черная, а нам охото красную! Перед тем как начинать рисовать напишем:

У канвы есть свойство Pen. С его помощю можно поменять толщину (Width), цвет (Color), стиль (Style) и многое другое.

Теперь нарисуем прямоугольник:

Координаты думаю понятны. Первые две указывают левый верхний угол, еще две - правый нижний угол прямоугольника.

Нарисовать-то нарисовали, цвет рамки поменять сможем (pen), а вот как поменять цвет заливки фигуры - свойство Brush (заливка). Поменяем цвет заливки квадрата на зеленый, для этого перед тем как рисуем сам прямоугольник напишем:

Помимо этого можно сделать чтобы заливка была не сплошной а узором. Для этого перед рисованием прямоугольника делаем:

Чтобы было проще разобраться с Pen и Brush выложите на форму TShape и у него найдите эти свойства. Поэкспериментируйте и поглядите как меняется компонент. И уже исходя из этих знаний можно все это сделать программно, просто в коде обратиться к изменяемым свойствам.

Помимо прямоугольников можно рисвоать элипсы:

Ну и напоследок как один пиксель сделать определенного цвета:

В данном случае цвет красный.

Помимо этого можно вывести на канву картинку. Например в компоненте TImage есть картинка и ее нужно вывести на канву формы или другого TImage. Выложите на форму TImage и загрузите в него какой-нибудь BMP файл. В обработчике события на нажатие по кнопке пишем:

После выполнения кода в координаты 0,0 выведется вся графика хранящаяся в Image1.

Естественно это не все возможности которые я описал в этом уроке. Постарайтесь сделать что-то большее. Какой-нибудь маленький проект. И напоследок скажу, что отображает на канву очень медленно, тоесть для быстрого вывода графики (например игр) это не подойдет. Для этого самым простым является компонент DelphiX. С его помощю можно достаточно быстро и легко выводить графику. Вот пара ссылок чтобы ознакомиться с DelphiX: DelphiX: Описание и установка; DelphiX: Загрузка и вывод спрайтов

Из данной лекции Вы узнаете о том, какие возможности есть в Delphi для создания приложений, использующих графику; как использовать компоненты для отображения картинок; какие средства есть в Delphi для оформления программы. Кроме того, познакомитесь с важным свойством Canvas, которое предоставляет доступ к графическому образу объекта на экране.

Графические компоненты

В стандартную библиотеку визуальных компонент Delphi входит несколько объектов, с помощью которых можно придать своей программе совершенно оригинальный вид. Это - TImage (TDBImage), TShape, TBevel.

TImage позволяет поместить графическое изображение в любое место на форме. Этот объект очень прост в использовании - выберите его на странице Additional и поместите в нужное место формы. Собственно картинку можно загрузить во время дизайна в редакторе свойства Picture (Инспектор Объектов). Картинка должна храниться в файле в формате BMP ( bitmap ), WMF (Windows Meta File ) или ICO ( icon ). (TDBImage отображает картинку, хранящуюся в таблице в поле типа BLOB. При этом доступен только формат BMP.)

Как известно, форматов хранения изображений гораздо больше трех вышеназванных (например, наиболее известны PCX, GIF, TIFF, JPEG). Для включения в программу изображений в этих форматах нужно либо перевести их в формат BMP, либо найти библиотеки третьих фирм, в которых есть аналог TImage, “понимающий” данные форматы (есть как VBX объекты, так и “родные” объекты для Delphi).

При проектировании следует помнить, что изображение, помещенное на форму во время дизайна, включается в файл .DPR и затем прикомпилируется к EXE файлу. Поэтому такой EXE файл может получиться достаточно большой. Как альтернативу можно рассмотреть загрузку картинки во время выполнения программы, для этого у свойства Picture (которое является объектом со своим набором свойств и методов) есть специальный метод LoadFromFile. Это делается, например, так:

if OpenDialog1.Execute then

Важными являются свойства объекта Center и Stretch - оба имеют булевский тип. Если Center установлено в True, то центр изображения будет совмещаться с центром объекта TImage. Если Stretch установлено в True, то изображение будет сжиматься или растягиваться таким образом, чтобы заполнить весь объект TImage.

TShape - простейшие графические объекты на форме типа круг, квадрат и т.п. Вид объекта указывается в свойстве Shape. Свойство Pen определяет цвет и вид границы объекта. Brush задает цвет и вид заполнения объекта. Эти свойства можно менять как во время дизайна, так и во время выполнения программы.

TBevel - объект для украшения программы, может принимать вид рамки или линии. Объект предоставляет меньше возможностей по сравнению с TPanel, но не занимает ресурсов. Внешний вид указывается с помощью свойств Shape и Style.

Свойство объектов Canvas

У ряда объектов из библиотеки визуальных компонент есть свойство Canvas (канва), которое предоставляет простой путь для рисования на них. Эти объекты - TBitmap, TComboBox, TDBComboBox, TDBGrid, TDBListBox, TDirectoryListBox, TDrawGrid, TFileListBox, TForm , TImage, TListBox, TOutline, TPaintBox, TPrinter, TSt ringGrid. Canvas является в свою очередь объектом, объединяющим в себе поле для рисования, карандаш (Pen), кисть (Brush) и шрифт (Font). Canvas обладает также рядом графических методов : Draw, TextOut, Arc, Rectangle и др. Используя Canvas, Вы можете воспроизводить на форме любые графические объекты - картинки, многоугольники, текст и т.п. без использования компонент TImage,TShape и TLabel (т.е. без использования дополнительных ресурсов), однако при этом Вы должны обрабатывать событие OnPaint того объекта, на канве которого Вы рисуете. Рассмотрим подробнее свойства и методы объекта Canvas.

Brush - кисть, является объектом со своим набором свойств:

Bitmap - картинка размером строго 8x8, используется для заполнения (заливки) области на экране.

Color - цвет заливки.

Style - предопределенный стиль заливки; это свойство конкурирует со свойством Bitmap - какое свойство Вы определили последним, то и будет определять вид заливки.

Handle - данное свойство дает возможность использовать кисть в прямых вызовах процедур Windows API .

ClipRect - (только чтение) прямоугольник, на котором происходит графический вывод.

CopyMode - свойство определяет, каким образом будет происходить копирование (метод CopyRect) на данную канву изображения из другого места: один к одному, с инверсией изображения и др.

Font - шрифт, которым выводится текст (метод TextOut).

Handle - данное свойство используется для прямых вызовов Windows API.

Pen - карандаш, определяет вид линий; как и кисть (Brush) является объектом с набором свойств:

Color - цвет линии

Handle - для прямых вызовов Windows API

Mode - режим вывода: простая линия, с инвертированием, с

выполнением исключающего или и др.

Style - стиль вывода: линия, пунктир и др.

Width - ширина линии в точках

PenPos - текущая позиция карандаша, карандаш рекомендуется перемещать с помощью метода MoveTo, а не прямой установкой данного свойства.

Pixels - двухмерный массив элементов изображения (pixel), с его помощью Вы получаете доступ к каждой отдельной точке изображения (см. пример к данному уроку).

Методы для рисования простейшей графики - Arc , Chord, LineTo, Pie, Polygon, PolyLine, Rectangle, RoundRect . При прорисовке линий в этих методах используются карандаш (Pen) канвы, а для заполнения внутренних областей - кисть (Brush).

Методы для вывода картинок на канву - Draw и StretchDraw , В качестве параметров указываются прямоугольник и графический объект для вывода (это может быть TBitmap, TIcon или TMetafile). StretchDraw отличается тем, что растягивает или сжимает картинку так, чтобы она заполнила весь указанный прямоугольник (см. пример к данному уроку).

Методы для вывода текста - TextOut и TextRect. При выводе текста используется шрифт (Font) канвы. При использовании TextRect текст выводится только внутри указанного прямоугольника. Длину и высоту текста можно узнать с помощью функций TextWidth и TextHeight.

Объект TPaintBox

На странице System Палитры Компонент есть объект TPaintBox, который можно использовать для построения приложений типа графического редактора или, например, в качестве места построения графиков (если, конечно, у Вас нет для этого специальных компонент третьих фирм). Никаких ключевых свойств, кроме Canvas, TPaintBox не имеет, собственно, этот объект является просто канвой для рисования. Важно, что координаты указателя мыши, передаваемые в обработчики соответствующих событий (OnMouseMove и др.), являются относительными, т.е. это смещение мыши относительно левого верхнего угла объекта TPaintBox, а не относительно левого верхнего угла формы.

Примеры

В первом примере (проект SHAPE.DPR, рис.1) показано, как во время выполнения программы можно изменять свойства объекта TShape. Изменение цвета объекта (событие OnChange для ColorGrid1): procedure TForm1.ColorGrid1Change(Sender: TObject);
begin
Shape1.Brush.Color:=ColorGrid1.ForeGroundColor;
end;

Во втором примере (проект PIXELS.DPR, рис.2) показано, как осуществить доступ к отдельной точке на изображении (на канве). По нажатию кнопки “Fill” всем точкам изображения присваивается свой цвет:

procedure TForm1.Button1Click(Sender: TObject);
var
i, j : Longint;
begin
Button1.Enabled:=False;
with Canvas do
for i:=1 to Width do begin
Application.ProcessMessages;
for j:=1 to Height do
Pixels[i,j]:=i*j;
end;
Button1.Enabled:=True;
end;

В третьей программе (проект DRAW.DPR, рис.3) приведен пример использования методов, выводящих изображение - Draw и StretchDraw:

Прорисовка изображений происходит в обработчике события OnPaint для формы:

procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do begin
Draw(0,0, Image1.Picture.BitMap);
StretchDraw(Rect(250,0,350,50),Image1.Picture.BitMap)
end;
end;

Знаете ли Вы, что класс, Class - Класс в программировании - это множество объектов, которые обладают одинаковой структурой, поведением и отношением с объектами из других классов.

Глава 10. Графические возможности Delphi

Delphi позволяет программисту разрабатывать программы, которые могут выводить графику: схемы, чертежи, иллюстрации.

Программа выводит графику на поверхность объекта (формы или компонента Image). Поверхности объекта соответствует свойство canvas. Для того чтобы вывести на поверхность объекта графический элемент (прямую линию, окружность, прямоугольник и т. д.), необходимо применить к свойству canvas этого объекта соответствующий метод. Например, инструкция Form1.Canvas.Rectangle (10,10,100,100) вычерчивает в окне программы прямоугольник.

Как было сказано ранее, поверхности, на которую программа может выводить графику, соответствует свойство Canvas. В свою очередь, свойство canvas — это объект типа TCanvas. Методы этого типа обеспечивают вывод графических примитивов (точек, линий, окружностей, прямоугольников и т. д.), а свойства позволяют задать характеристики выводимых графических примитивов: цвет, толщину и стиль линий; цвет и вид заполнения областей; характеристики шрифта при выводе текстовой информации.

Методы вывода графических примитивов рассматривают свойство Canvas как некоторый абстрактный холст, на котором они могут рисовать (canvas переводится как "поверхность", "холст для рисования"). Холст состоит из отдельных точек — пикселов. Положение пиксела характеризуется его горизонтальной (X) и вертикальной (Y) координатами. Левый верхний пиксел имеет координаты (0, 0). Координаты возрастают сверху вниз и слева направо (рис. 10.1). Значения координат правой нижней точки холста зависят от размера холста.



Рис. 10.1. Координаты точек холста

Размер холста можно получить, обратившись к свойствам Height и width области иллюстрации (image) или к свойствам формы: ClientHeight и Clientwidth.

Карандаш и кисть

Художник в своей работе использует карандаши и кисти. Методы, обеспечивающие вычерчивание на поверхности холста графических примитивов, тоже используют карандаш и кисть. Карандаш применяется для вычерчивания линий и контуров, а кисть — для закрашивания областей, ограниченных контурами.

Карандашу и кисти, используемым для вывода графики на холсте, соответствуют свойства Реn (карандаш) и Brush (кисть), которые представляют собой объекты типа треп и TBrush, соответственно. Значения свойств этих объектов определяют вид выводимых графических элементов.

Карандаш используется для вычерчивания точек, линий, контуров геометрических фигур: прямоугольников, окружностей, эллипсов, дуг и др. Вид линии, которую оставляет карандаш на поверхности холста, определяют свойства объекта треп, которые перечислены в табл. 10.1.

Читайте также: