Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2007, 12:32   #1
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию графический вывод значений массива

Как мне организовать графический вывод значений массива с помощью Tchart или Paintbox.
Тоесть надо посторить диаграмму значений массива!!
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 21.10.2007, 12:56   #2
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

Код:
constructor TGistogram.Create;
begin
  inherited Create(gcanv);
end;

procedure TGistogram.CompCoords;
var i: integer;
begin
  if number = 0 then exit;
  SetLength(Koords, Number);
  Cx := Width / number;
  CY := Height / (max - min);
  for i := 0 to number - 1 do
  begin
      //Paraml[i]:= Paraml[i]-min;
    Koords[i].X := Left + round(cx * i);
    Koords[i].Y := Top + Height - round(cy * (Paraml[i]));
  end;
end;

procedure TGistogram.UpdateSize(w, h: integer);
begin
  inherited UpdateSize(w, h);
  Self.CompCoords;
end;

procedure TGistogram.SetParams(strs: Tstringlist; var prm: Tparamlist);
begin
  inherited SetParams(strs, prm);
  Self.CompCoords;
end;

procedure TGistogram.Draw;
var i, icx: integer;
  str: string;
  fs, lng: byte;
begin
  with (Canv as Tcanvas) do
  begin
    Summ := Max; // На Max-ном столбце будет написано "100%"
                     // т.к. Summ влияет на func. ValueStr()
    Brush.Color := bk_clr;
    FillRect(Rect(Left, Top, Left + Width, Top + Height));

    lng := length(ValueStr(0)); // Надпись на 0 столбце
    for i := 1 to Number - 1 do
    begin
      str := ValueStr(i);
      if length(str) > lng then lng := length(str);
    end; // нашли надпись наибольшей длины

    fs := Font.Size; // запоминаем размер шрифта, каким он был
    lng := lng + 1;
    Font.Size := round(cx / lng); // чтобы все надписи входили по ширине
    icx := round(cy * min); // ...и по высоте!
    if Font.Size > icx then Font.Size := icx;

    Pen := Self.Pen;
    icx := round(cx); // размер столбца на экране

    for i := 0 to Number - 1 do
    begin
      Brush.Color := FromTsvet(Tsvets[i]);
      Brush.Style := bsSolid; // закрашенный прямоугольник-столбец
      FillRect(Rect(Koords[i].X, Koords[i].Y, Koords[i].X + icx, Top + Height));
      Pen.Color := FromTsvet(Lite(Tsvets[i], 30)); // светлое его обрамление
      Pen.Width := 4;
      Rectangle(Rect(Koords[i].X + 1, Koords[i].Y + 1, Koords[i].X + icx - 1, Top + Height - 1));

      if text then
      begin
        Brush.Style := bsClear; // Выводим надпись
        Font.Color := Vidno(Tsvets[i]); // "видимым" на фоне столбца цветом
        str := ValueStr(i);
        TextOut(Koords[i].X + icx div 2 - TextWidth(Str) div 2,
          Koords[i].Y + (Height + Top - Koords[i].Y - TextHeight(Str)) div 2, Str);
      end;
    end;
    Font.Size := fs; // восстанавливаем размер шрифта
    Font.Color := Vidno(ToTsvet(bk_clr));
    TextOut(Left + width - TextWidth(Caption), 4, Caption);
  end;
end;

function TGistogram.MouseOn(x, y: integer): integer;
var i: integer;
begin
  for i := 0 to Number - 1 do
    if (Koords[i].X <= x) and (Koords[i].X + round(cx) > x)
      and (y < top + height) and (y >= Koords[i].y)
      then
    begin
      result := i; // если мышь сидит в прямоугольнике
      exit;
    end;
  result := Number
end;
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 21.10.2007, 13:00   #3
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

Код:
Type
TDiagram = class(TObject) // Родитель всех диаграмм
  private
    Paraml: Tparamlist; // Элементs-данные
    Stringl: Tstringlist; // Подписи для легенды


    procedure UpdateSize(w, h: integer); // 'Размеряемся'
    procedure Circle(x, y, r: longint; cl: Tcolor);
       // procedure AxesNet(cx, cy: integer);

  protected
    Canv: TCanvas; // Где мы показываемся
    
    Tsvets: TTsvetList; // Случайные цвета столбцов, секторов и тд.
    
  public
    Caption: string; // Заголовок
    bk_clr: Tcolor; // Цвет фона
    fnt_clr: Tcolor; // Цвет
    Number: Word; // Кол-во элементов-данных
    Max, Min, Summ: Real;

    Left, Top: integer; // Коорд-ты и
    Width, Height: integer; // Размер поля вывода
    Pen: Tpen;
    percent: boolean; // Надписи в '%'
    text: boolean;
    precision: byte;

    constructor Create(cnv: Tcanvas); // !!!
    function GetParam(n: word): real;
    function GetCaptStr(n: word): string;
    function Valuestr(i: word): string; //Надпись для i-столбца
    procedure SetParams(strs: Tstringlist; var prm: Tparamlist);
  end;

  TGistogram = class(TDiagram) // Гистограмма
  private
    Koords: Tpoints; // Коорд-ты верх.левых углов всех столбов

    Cx, Cy: Real; // Размерные множители
  public

    constructor Create(gcanv: Tcanvas);
    procedure Draw;

    procedure SetParams(strs: Tstringlist; var prm: Tparamlist);
    procedure CompCoords; // Пересчет координат
    procedure UpdateSize(w, h: integer);
    function MouseOn(x, y: integer): integer; // аналогично -^
  end;
...
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 21.10.2007, 13:03   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Наберите в Гугле Tchart. Найдете много интересного, в том числе и по созданию графика из массива, заодно обогатитесь теоретически.
puporev вне форума Ответить с цитированием
Старый 21.10.2007, 13:09   #5
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

это все делается логически (вручную) : рисуется на листе бумаги и придумавается алгоритм ..

P.S.
Код:
    Tsvet = record
                r, g, b: byte;
                a: byte;
             end;
    TParamList = array of float;
    TStringList = array of string[20];
    TColorlist = array of Tcolor;
    TTsvetlist = array of Tsvet;
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 21.10.2007, 13:44   #6
kommunist
C# developer
Форумчанин
 
Аватар для kommunist
 
Регистрация: 03.10.2007
Сообщений: 393
По умолчанию

вот мой вариант
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart;
type
TForm1 = class(TForm)
Chart1: TChart;
Series1: TFastLineSeries;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i,j:byte;
x:byte;
matr: array [1..i,1..j] of integer;

begin
randomize;
for i:= 1 to i do
begin
for j:= 1 to j do
matr[i,j]:=random(100);
begin
for x:= 1 to 50 do
series1.AddXY(x,matr[i,j]);
end;
end;
end;
end.
I like WPF
kommunist вне форума Ответить с цитированием
Старый 21.10.2007, 20:34   #7
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию

Virtson Пришли исходник пожалуйста!!! на mailto:vital-programmer@mail.ru
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод двумерного массива Kocapb Общие вопросы C/C++ 4 11.10.2012 11:05
Вывод элементов массива.Изменение элементов массива. Vesnushka18 Помощь студентам 6 09.06.2011 13:05
выборка нужных значений, вывод AZaharov Microsoft Office Excel 19 17.10.2008 12:22
вывод массива на экран Неясыть Общие вопросы Delphi 9 20.01.2008 20:18