![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Друзья помогите кто может. Горю просто. Нужно нарисовать фигуры используя Динамический массив. Собственно вот задание. Незнаю даже с чего начать. Помоги с кодом.
Пользуясь средствами Borland Delphi, разработать Windows-приложение c графическим интерфейсом пользователя (окно Windows) для выполнения следующих операций с объектами: • ввод данных об объектах предметной области; • хранение данных в оперативной памяти; • просмотр данных об объектах в экранной форме в виде списка (с помощью компонента TListBox, TMemo или TStringGrid) или дерева (TTreeView); • редактирование выбранного объекта; • удаление выбранного объекта; • сортировка заданного набора объектов по общим атрибутам; • поиск объекта по общим атрибутам. Доступ к атрибутам объектов осуществлять только с помощью свойств классов. Операции реализовать только в виде методов классов. Характеристики объектов: Предметная область : Графические фигуры Список типов объектов : Линия, треугольник, прямоугольник, окружность Атрибуты : Общие - название, длина контура. Индивид. - размеры, координаты |
|
#2
|
|||
|
|||
|
Например нашёл процедуру создания треугольника.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var a, b, c : integer;
t1, t2, t3 : TPoint;
ugol : double;
begin
a := 200;
b := 200;
c := 350;
if (a+b>c) and (b+c>a) and (a+c>b) then begin
Memo1.Lines.Append('может быть такой!');
t1.x := 0;
t1.y := 0;
t2.x := a;
t2.y := 0;
ugol := arccos( (sqr(b) - sqr(a) - sqr(c)) / (2*a*c) );
t3.x := - trunc(c* cos(ugol));
if t3.x < 0 then begin
// сдвигаем весь треугольник по оси X
t1.x := t1.x - t3.x;
t2.x := t2.x - t3.x;
t3.x := t3.x - t3.x; // кстати, тут должен ноль получится...
end;
t3.y := trunc(c* sin(ugol));
Canvas.Polygon([t1, t2, t3]);
Memo1.Lines.Append('X1, Y1 = '+IntToStr(t1.x)+' , '+IntToStr(t1.y));
Memo1.Lines.Append('X2, Y2 = '+IntToStr(t2.x)+' , '+IntToStr(t2.y));
Memo1.Lines.Append('X3, Y3 = '+IntToStr(t3.x)+' , '+IntToStr(t3.y));
end
else
Memo1.Lines.Append('НЕ Может Быть!');
end; |
|
#3
|
|||
|
|||
|
Примерный код создания прямоугольника и окружности.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x1, y1: integer;
Down: BOOL;
implementation
{$R *.dfm}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Down := True;
x1 := x;
y1 := y;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Down := False;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Down then
begin
if ssShift in Shift then
begin
Form1.Repaint;
Canvas.Rectangle(x1,y1,x,y);
end else
begin
Form1.Repaint;
Canvas.Ellipse(x1,y1,x,y);
end;
end;
end;
end. |
|
#4
|
|||
|
|||
|
Ну для начала
Код:
type
TFigura=class
private
FName : String;
public
procedure DrawTo(Canvas:TCanvas);//процедура рисования
virtual;//сама процедура будет определена в наследниках
procedure ToListItem(Item:TListItem);virtual;// процедура записи своих параметров в элемент TListView
function ToString:String;virtual;
function Verirification:Boolean;Virtual;//проверка правильности
function Perimetr:Double;virtual; //периметр фигуры
constructor Create(AName:String);//конструктор;
property Name:String read FName;
end;
procedure TFigura.DrawTo(Canvas:TCanvas);
begin
end;
procedure TFigura.ToListItem(Item:TListItem);
begin
Item.Caption:=Name;
Item.SubItems.Clear;
Item.SubItems.Add('Фигура');
if Verirification then
Item.SubItems.Add('может быть такой!')
else
Item.SubItems.Add('Не может быть');
Item.SubItems.Add(Format('%F',[Perimetr]));
end;
function TFigura.ToString:String;
begin
Result:=Name + ' Фигура ';
if Verirification then
Result:=Result+'может быть такой!'
else
Result:=Result+'Не может быть';
Result:=Result+Format('%F',[Perimetr]);
end;
function TFigura.Verirification:Boolean;
begin
Result:=true;
end;
function TFigura.Perimetr:Double;
begin
Result:=0;
end;
constructor TFigura.Create(AName:String);
begin
inherited;
FName:=AName;
end;
TFigurs = Array of TFigura;
Код:
procedure DrawAllTo(Canvas:TCanvas;A:TFigurs);
var i:Integer;
begin
for I:=low(A) to high(A) do
A[i].DrawTo(Canvas);
end;
procedure FigursToStrings(List:TStings;A:TFigurs);
var i:Integer;
begin
List.Clear;
for I:=low(A) to high(A) do
List.Add(A[i].ToString);
end;
procedure FigursToListView(List:TListView;A:TFigurs);
begin
//напиши сам
end;Кроме того, нужны будут процедуры добавления фигур в массив, удаления из него, поиск(По имени) |
| Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
Zmeo (15.06.2015)
| ||
|
#5
|
|||
|
|||
|
Например Окружность
Код:
type
TCircle=class(TFigura)
private
FO:TPoint;
FR:Double;
public
procedure DrawTo(Canvas:TCanvas);override;
procedure ToListItem(Item:TListItem);override;
function ToString:String;override;
function Verirification:Boolean;override;
function Perimetr:Double;override;
constructor Create(AName:String);
property Radius:Double read FR write FR;
property center:TPoint read FO write FO;
end;
procedure TCircle.DrawTo(Canvas:TCanvas);
var R:integer;
begin
R:=Round(FR);
Canvas.Ellipce(FO.X-R,FO.Y-R,FO.X+R,FO.Y+R);
end;
procedure TCircle.ToListItem(Item:TListItem);
begin
Item.Caption:=Name;
Item.SubItems.Clear;
Item.SubItems.Add('Круг');
if Verirification then
Item.SubItems.Add('может быть такой!')
else
Item.SubItems.Add('Не может быть');
Item.SubItems.Add(Format('%F',[Perimetr]));
Item.SubItems.Add(Format('%F',[Radius]));
Item.SubItems.Add(Format('%d:%d',[FO.X,FO.Y]));
end;
function TCircle.ToString:String;
begin
Result:=Name + ' Круг ';
if Verirification then
Result:=Result+'может быть такой!'
else
Result:=Result+'Не может быть';
Result:=Result+Format('%F',[Perimetr]);
Result:=Result+Format('%F',[Radius]));
Result:=Result+Format('%d:%d',[FO.X,FO.Y]);
end;
function TCircle.Verirification:Boolean;
begin
Result:=FR>0;
end;
function TCircle.Perimetr:Double;
begin
Result:=Radius*2*Pi;
end;
constructor TCircle.Create(AName:String);
begin
inherited(AName);
end; |
| Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
Zmeo (15.06.2015)
| ||
|
#6
|
|||
|
|||
|
Для редактирования
Завести на форме несколько панелек(Можно использовать TPageControl) и процедур типа таких Код:
type TForm1=class(TForm)
....
private
CurrentCircle:TCircle;
....
end;
Procedure TForm1.EditFigure(F:TFigure);
Begin
if Figure Is TCircle then begin
// спрятать все панели, кроме панели для окружности,
// или, если TPageControl, переключиться на нужную страницу
CurrentCircle:=Figure As TCircle;
ShowCircle();
end
End;
Procedure TForm1.ShowCircle();
Begin
EditCircleRadius.Text:=Format('%f',[CurrentCircle.Radius]);
EditCircleX.Text:=Format('%d',CurrentCircle.Center.X]);
EditCircleY.Text:=Format('%d',CurrentCircle.Center.Y]);
end;При выборе фигуры в списке Вызвать EditFigure. Соответственно на панельке для работы с окружностями нужны Едиты EditCircleRadius,EditCircleX и EditCircleY, а так же кнопки ButtonCircleSave и ButtonCircleCancel. Код:
Procedure TForm1.ButtonCircleSave (Sender :TObject); var O:TPoint; begin CurrentCircle.Radius:=StrToFloat(EditCircleRadius.Text); O.X:=StrToInt(EditCircleX.Text); O.Y:=StrToInt(EditCircleY.Text); CurrentCircle.Center:=O; end; Procedure TForm1.ButtonCircleCancel (Sender :TObject); begin ShowCircle(); end; Остальное сам |
| Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
Zmeo (15.06.2015)
| ||
|
#7
|
|||
|
|||
|
Спасибо тебе добрый человек. Выручил просто. Теперь буду разбираться что к чему. А то сам даже не знал с чего начать. Ценю за твой большой труд,что бы объяснить всё это мне.
|
|
#8
|
||||
|
||||
|
что-то подобное я делал. не тебе ли?
![]() |