|
Вопрос # 5 672/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Не так давно начал изучать Делфи, но вот с канвой вообще понятия не имею как работать.
Поэтому прошу у вас помощи, надеюсь поможете.
"Написать программу для построения графиков функции y=f(t), где f(t) задана произвольным массивом данных, хранимого во внешнем файле, оси графика должны иметь разметку в виде сетки, цвет и толщина линии графика настраивается опционально."
Заранее очень благодарен.
 |
Вопрос задал: Halls (статус: Посетитель)
Вопрос отправлен: 11 октября 2011, 00:39
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Drinkenz
Здравствуйте, Halls!
Примерно так рисуется на канве.
procedure DriveLines;
var I: Integer;
begin
with Form1.Canvas do
begin
Pen.Width := 1;
Pen.Color := clWhite;
Brush.Color := clWhite;
Rectangle ( 0, 0, Form1.ClientWidth, Form1.ClientHeight );
I := 0;
Pen.Color := clNavy;
while I < ( Form1.ClientWidth ) do
begin
MoveTo ( I, 0 );
LineTo ( I, Form1.ClientHeight );
I := I + 25;
end;
I := 0;
while I < ( Form1.ClientHeight ) do
begin
MoveTo ( 0, I );
LineTo ( Form1.ClientWidth, I );
I := I + 25;
end;
case Form1.RadioGroup1.ItemIndex of
0: Pen.Color := clRed;
1: Pen.Color := clGreen;
2: Pen.Color := clBlue;
end;
Pen.Width := GraphWidth;
LineTo ( 0, MassivDannih [0] );
for I := 0 to 10 do
begin
Moveto ( I * 32, MassivDannih [I] );
end;
end;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
GraphWidth := TrackBar1.Position;
DriveLines;
end;
procedure TForm1.FormCreate(Sender: TObject);
var I: Integer;
begin
for I := 0 to 10 do
begin
MassivDannih [I] := random ( 24 );
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
DriveLines;
end;
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
DriveLines;
end;
 |
Ответ отправил: Drinkenz (статус: 1-ый класс)
Время отправки: 11 октября 2011, 01:56
Оценка за ответ: 5
Комментарий к оценке: Спасибо. Но всё-равно мало что понятно. :)
|
Ответ #2. Отвечает эксперт: min@y™
Угробил 1,5 рабочих смены!
Ну-ка зацени-ка.

Саму прогу прицепляю к ответу. Поиграйся.
Обрати внимание на подпапку "files". Там 3 готовых файла с графиками. К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 18 октября 2011, 16:56
Оценка за ответ: 5
Комментарий к оценке: ЗДОРОВО!
|
Мини-форум вопроса
Всего сообщений: 10; последнее сообщение — 19 октября 2011, 12:50; участников в обсуждении: 3.
|
bugmenot (статус: 3-ий класс), 11 октября 2011, 01:20 [#1]:
Помощь заключается в выполнение Вашего домашнего задания за Вас?
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
min@y™ (статус: Доктор наук), 11 октября 2011, 08:15 [#2]:
В чём заключается вопрос? "Напишите за меня лабу"?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
11 октября 2011, 08:15: Вопрос перемещён из тематического раздела Delphi » Прочее в раздел Лабораторный практикум » Delphi модератором min@y™
|
Halls (статус: Посетитель), 11 октября 2011, 08:48 [#3]:
С одной стороны можно сказать и так, потому что даже из кода сверху половины не понял .
С другой стороны охота, да и нужно научиться работать с канвой, а начинать решил с данной лабораторной, перед этим конечно почитал в общем виде про канву, рисовал фигуры, цвета изменял и т.д., но вот с графиками как то понятия не имею, что да как.
|
|
min@y™ (статус: Доктор наук), 11 октября 2011, 09:20 [#4]:
Ну, так, чего ж ты хочешь-то? Определись уже.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Halls (статус: Посетитель), 11 октября 2011, 09:38 [#5]:
В данном случае "Напишите за меня лабу".
И если возможно, то с комментами где что, для чего и т.п....
|
|
min@y™ (статус: Доктор наук), 11 октября 2011, 09:55 [#6]:
Цитата (Halls):
В данном случае "Напишите за меня лабу". И если возможно, то с комментами где что, для чего и т.п....
Это я могу. Осталось определиться с ценой вопроса. Сколько пива ставишь?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Halls (статус: Посетитель), 11 октября 2011, 22:51 [#7]:
вот код, на что меня хватило
procedure TForm1.Button2Click(Sender: TObject);
begin
with canvas do
begin
moveto (10,10);
pen.color:=clblack;
lineto (10,400);
moveto (10,400);
lineto (400,400);
pen.Style:=psDot;
i:=10;
while i<400 do
begin
moveto(i,10);
lineto(i,400);
moveto(10,i);
lineto(400,i);
i:=i+30;
end;
end;
a:=strtoint(listbox1.items[0])*30;
b:=strtoint(listbox1.items[1])*30;
edit1.text:=listbox1.Items[0];
edit2.Text:=listbox1.Items[1];
listbox1.Items.Delete(0);
listbox1.Items.Delete(0);
with canvas do
begin
pen.Style:=psSolid;
moveto(x,y);
lineto(10+a, 400- b);
x:=10+a;
y:=400-b;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
x:=10;
y:=400;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
with canvas do
begin
pen.Style:=psSolid;
moveto(x,y);
lineto(10+a, 400- b);
x:=10+a;
y:=400-b;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
button2.Enabled:=true;
listbox1.items.LoadFromFile(filelistbox1.FileName);
end;
и сам исходник
http://zalil.ru/31851596
вроде как правильно, но вот у меня тока 1 четверть получилась, а хотелось бы полностью кардинатную ось
|
|
min@y™ (статус: Доктор наук), 18 октября 2011, 21:31 [#8]:
Кто-то явно не хочет, чтобы мой ответ стал ответом месяца. Самаритянин, отзовись! Где комменты?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Halls (статус: Посетитель), 19 октября 2011, 12:12 [#9]:
Всё конечно очень круто.
Но Очень много лишнего, достаточно было нарисовать граффик и выбирать фаил с ПК. Да и разрешения файлов, тоже необязательно своё, можно обычный txt.
А на чём строиться сам граффик? В Images?
|
|
min@y™ (статус: Доктор наук), 19 октября 2011, 12:50 [#10]:
Цитата (Halls):
Всё конечно очень круто. Но Очень много лишнего, достаточно было нарисовать граффик и выбирать фаил с ПК.
Что лишнее-то? Ты всё это сам просил сделать, когда по аське с тобой общались.
Цитата (Halls):
Да и разрешения файлов, тоже необязательно своё, можно обычный txt.
А что такое "разрешения файлов"? Может "расширение"? Получишь исходники - будешь иметь полное право поменять в них всё, что захочешь.
Цитата (Halls):
А на чём строиться сам граффик? В Images?
Что такое "Images", я не знаю. График строится на любой канве (ACanvas), в заданной прямоугольной области (ARect), которые передаются как параметры в метод Draw класса, отвечающего за отрисовку графика, хранение, загрузку и сохранение данных. Вот описание класса:
type
// Тип данных - точка на плоскости
TPoint2D = class
private
FX, FY: Single;
public
property X: Single read FX write FX;
property Y: Single read FY write FY;
end;
PPoint2D = ^TPoint2D;
// Класс-контейнер графика
TPointChart = class
private
// Поля
FPoints: TObjectList; // список точек
FBorderColor: TColor; // цвет рамки
FBorderWidth: Integer; // толщина рамки
FGridColor: TColor; // цвет сетки
FGridWidth: Integer; // толщина сетки
FGridSizeX: Integer; // кол-во горизонтальных шагов сетки
FGridSizeY: Integer; // кол-во вертикальных шагов сетки
FShowGrid: Boolean; // показывать/скрыть сетку
FAxisColor: TColor; // цвет осей
FAxisWidth: Integer; // толщина осей
FLineColor: TColor; // цвет линии графика
FLineWidth: Integer; // толщина линии графика
FMarginX: Integer; // ширина левого и правого полей
FMarginY: Integer; // высота верхнего и нижнего полей
FFont: TFont; // шрифт граничных меток
FGridFont: TFont; // шрифт отсечек сетки
// Функции доступа к полям/свойствам
function GetCount: Integer;
function GetPoint(const Index: Integer): TPoint2D;
function GetRootsExists: Boolean;
procedure SetFont(ANewFont: TFont);
procedure SetGridFont(ANewFont: TFont);
// Технологические функции
public
// Конструктор и деструктор
constructor Create;
destructor Destroy; override;
// Методы
procedure Clear;
function AddPoint(const X, Y: Single): TPoint2D;
procedure DeletePoint(const Index: Integer);
procedure Draw(ACanvas: TCanvas; const ARect: TRect);
function SaveToFile(const FileName: string): Boolean;
function LoadFromFile(const FileName: string): Boolean;
// Свойства
property Count: Integer read GetCount;
property Points[const Index: Integer]: TPoint2D read GetPoint; default;
property RootsExists: Boolean read GetRootsExists;
property AxisColor: TColor read FAxisColor write FAxisColor;
property AxisWidth: Integer read FAxisWidth write FAxisWidth;
property BorderColor: TColor read FBorderColor write FBorderColor;
property BorderWidth: Integer read FBorderWidth write FBorderWidth;
property GridColor: TColor read FGridColor write FGridColor;
property GridWidth: Integer read FGridWidth write FGridWidth;
property GridSizeX: Integer read FGridSizeX write FGridSizeX;
property GridSizeY: Integer read FGridSizeY write FGridSizeY;
property ShowGrid: Boolean read FShowGrid write FShowGrid;
property LineColor: TColor read FLineColor write FLineColor;
property LineWidth: Integer read FLineWidth write FLineWidth;
property MarginX: Integer read FMarginX write FMarginX;
property MarginY: Integer read FMarginY write FMarginY;
property Font: TFont read FFont write SetFont;
property GridFont: TFont read FGridFont write SetGridFont;
end;
З.Ы. Как же меня вымораживают ошибки в написании "...тся" и "...ться"!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|