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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: Название темы должно адекватно отражать суть решаемой задачи/проблемы.
Старый 16.05.2012, 14:45   #1
Federer
Пользователь
 
Регистрация: 28.03.2012
Сообщений: 18
По умолчанию ошибка в програмие построения графика на Delphi

програма работает но затем появляется ошибка


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    pnlControls: TPanel;
    btnRefiresh: TButton;
    btnStop: TButton;
    pnlInputs: TPanel;
    edtStart: TEdit;
    edtEnd: TEdit;
    lbl1: TLabel;
    lbl2: TLabel;
    imgGraphic: TImage;
    procedure btnRefireshClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
  private
    fInRender: Boolean;
    Function MyFn(arg:Double) : Double;
    procedure
    clearContent;
    procedure CalcGraphic (aStart, aEnd: Double; var values: array of Double;
    var aMaxFn, aMinFn:Double);
    procedure RenderGraphic(aStart, aEnd:Double);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.CalcGraphic(aStart, aEnd: Double;
  var values: array of Double; var aMaxFn, aMinFn: Double);
var
argStep:Double;
i:Integer;
begin
  values [0]:=MyFn(aStart);
  aMaxFn:=values[0];
  aMinFn:=values[0];
  argStep:=(aEnd-aStart)/(High(values)+1);
  for i:=1 to High (values) do
  begin
    values[i]:=MyFn(i*argStep);
    if values[i]>aMaxFn then aMaxFn:=values[i];
    if values [i]<aMinFn then aMinFn:=values[i];
    Application.ProcessMessages;
    if not fInRender then Break;
  end;
end;

procedure TForm1.clearContent;
begin
   imgGraphic.Picture.Graphic.Width:=imgGraphic.Width;
   imgGraphic.Picture.Graphic.Height:=imgGraphic.Height;
 imgGraphic.Canvas.FillRect(imgGraphic.ClientRect);
 end;

function TForm1.MyFn(arg: Double): Double;
begin
   result:=Sin(arg);
end;

procedure TForm1.RenderGraphic(aStart, aEnd: Double);
var
  MaxFn,
  MinFn,
  fScale:double;
  i:Integer;
  values:array of Double;
  begin
    clearContent;
    imgGraphic.Canvas.TextOut(0,0, ' Обчислення...');
    SetLength(values,imgGraphic.Width);
    CalcGraphic(aStart, aEnd, values, MaxFn, MinFn);
    clearContent;
    imgGraphic.Canvas.TextOut(0, 0, 'Max= ' +FloatToStr(MaxFn));
    imgGraphic.Canvas.TextOut(0, imgGraphic.Height- imgGraphic.Canvas.TextHeight('Q'), 'Min='+FloatToStr(MinFn));

    fScale:=(MaxFn-MinFn)/imgGraphic.Height;
    imgGraphic.Canvas.MoveTo (0,trunc((MaxFn-values[0])/fScale));
    imgGraphic.Canvas.Pen.Color:=clRed;
    for i:=1 to imgGraphic.Width-1 do
    imgGraphic.Canvas.LineTo(i, Trunc((MaxFn-values[i])/fScale));
  end;
procedure TForm1.btnRefireshClick(Sender: TObject);
var
  err:Integer;
  fStartArg, fendArg:Double;
  begin
    Val(edtStart.Text,fStartArg,err);
    if err>0 then
    begin
      MessageDlg('Введіть коректне початкове значення аргументу.', mtError,[mbOK],0);
      edtStart.SetFocus;
      Exit;
      end;
      Val(edtEnd.Text, fendArg,err);
      if err>0 then
      begin
        MessageDlg('Введіть коректне кінцеве значення аргументу.',mtError,[mbOK],0);
        edtEnd.SetFocus;
        Exit;
        end;
        if fStartArg=fendArg then
        begin
          MessageDlg('Початкове і кінцеве значення аргуменів однакові. ',mtError,[mbOk],0);
          edtEnd.SetFocus;
          Exit;
          end;
          pnlInputs.Enabled:=False;
          btnStop.Enabled:=True;
          fInRender:=True;
          RenderGraphic(fStartArg, fendArg);
          fInRender:=False;
          btnStop.Enabled:=False;
          pnlInputs.Enabled:=True;

        end;

procedure TForm1.btnStopClick(Sender: TObject);
begin
imgGraphic.Picture.Graphic:=TBitmap.Create;
clearContent;
end;

end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.
Изображения
Тип файла: jpg 16.05.jpg (32.1 Кб, 127 просмотров)
Тип файла: jpg 2.jpg (19.6 Кб, 117 просмотров)

Последний раз редактировалось Serge_Bliznykov; 16.05.2012 в 15:59.
Federer вне форума Ответить с цитированием
Старый 16.05.2012, 14:56   #2
Federer
Пользователь
 
Регистрация: 28.03.2012
Сообщений: 18
По умолчанию должно получиться такое

результат такой:
Изображения
Тип файла: jpg DSC02867.jpg (60.8 Кб, 127 просмотров)
Federer вне форума Ответить с цитированием
Старый 16.05.2012, 16:43   #3
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Вот скажи мне, на кой черт ты делаешь вот это:
Код:
   imgGraphic.Picture.Graphic.Width:=imgGraphic.Width;
   imgGraphic.Picture.Graphic.Height:=imgGraphic.Height;
Если все и так за тебя сделали? Удали эти строки.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 16.05.2012, 17:32   #4
Federer
Пользователь
 
Регистрация: 28.03.2012
Сообщений: 18
Вопрос

Спасиба, но ето не помогает - опять ошибка после введения значений.
Federer вне форума Ответить с цитированием
Старый 16.05.2012, 19:10   #5
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Смотря как вводите. Если вводите вещественные, то ставьте запятую, а не точку. Я проверял, у меня в TurboDelphi работает.
А ещё я бы сделал "защиту от дурака" для каждого поля ввода.
Ах, да, хоть ошибку то напишите, а если скрин, то только сообщение ошибки, а то черт ногу сломит разглядывать буквы в изображении, скинутом вами выше.
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 16.05.2012 в 19:24.
Rin вне форума Ответить с цитированием
Старый 16.05.2012, 19:32   #6
Federer
Пользователь
 
Регистрация: 28.03.2012
Сообщений: 18
По умолчанию

Я питался вводить любие комбинации чисел но все равно ошибка
Federer вне форума Ответить с цитированием
Старый 16.05.2012, 19:37   #7
Federer
Пользователь
 
Регистрация: 28.03.2012
Сообщений: 18
По умолчанию

Ура, все вдруг заработало. Спасиба большое за помощь.
Federer вне форума Ответить с цитированием
Старый 16.05.2012, 20:44   #8
Federer
Пользователь
 
Регистрация: 28.03.2012
Сообщений: 18
По умолчанию

А как сделать чтоби после виполнения програми при увеличения окна изображения графика увеличивалось.
Federer вне форума Ответить с цитированием
Старый 19.05.2012, 02:12   #9
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Если ещё актуально, то увеличивать размеры imgGraphic, стирать нарисованное и заново все просчитывать с выводом результата.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка программы построения графика на Delphi BuzzLighter Помощь студентам 1 19.11.2011 22:09
Построения степенного графика в EXECL2007 Figaro2119950 Помощь студентам 0 31.03.2011 13:38
Ошибка построения графика (TChart) IliaIT Общие вопросы Delphi 0 25.05.2010 15:10
Компонент для построения графика Rusl92 Общие вопросы Delphi 2 07.09.2008 22:18
Программа построения графика KpeHDeJIb Помощь студентам 3 07.07.2008 08:05