На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Тестирование компонента , для рисования графика
    Предлагаю для тестирования компонент для рисования графика. Конструктивная критика приветствуется. Компонент для Delphi 2006 (2005).

    Нашел небольшую ошибку. Файл для скачивания обновил.
    Сообщение отредактировано: Angel_19 -

    Прикреплённый файлПрикреплённый файлGrafik.rar (24.48 Кбайт, скачиваний: 806)
      Компонент работает хоть?
        У меня работает :)
          Цитата Rouse_ @
          У меня работает :)

          И на том спасибо. :)
            Вот картинка с примером компонента.
            Прикреплённый файлПрикреплённый файлGrafik.png (4.33 Кбайт, скачиваний: 1355)
              Delphi6, мелочь а неприятно
              ExpandedWrap disabled
                procedure TGrafik.CalcDelta;
                begin
                     FTempCanvas.SetSize(Width-FOgrVertUp-FOgrVertDown, Height-FOgrGorUp-FOgrGorDown);
                     FTempCanvas2.SetSize(Width, Height);
                     FDelta := FTempCanvas.Height/(Max-Min);
                end;
                 
                [Error] UnitGrafik.pas(199): Undeclared identifier: 'SetSize'


              ExpandedWrap disabled
                               Point := CalcCursorPos;
                               if MouseInClient then
                                  if (Point.X>(FOgrVertUp-1)) and
                                     (Point.X<(Width-FOgrVertDown))  then
                [Error] UnitGrafik.pas(382): Undeclared identifier: 'MouseInClient'

              ExpandedWrap disabled
                procedure TGrafik.ReadMax(Reader: TReader);
                begin
                     FMax := Reader.ReadDouble;
                end;
                [Error] UnitGrafik.pas(586): Undeclared identifier: 'ReadDouble'

              ExpandedWrap disabled
                procedure TGrafik.WriteMax(Writer: TWriter);
                begin
                     Writer.WriteDouble(FMax);
                end;
                [Error] UnitGrafik.pas(700): Undeclared identifier: 'WriteDouble'
                Дак написано, что компонент для Delphi 2006 (2005).
                  Минимальная переделка и работает для более младших братьев.

                  Добавлено
                  1. При перемещении мыши над компонентом жизнь останавливается. Предлагаю сделать замену
                  ExpandedWrap disabled
                    procedure TGrafik.MouseMove(Shift: TShiftState; X, Y: Integer);
                    begin
                         inherited;
                    //     Paint;
                        Invalidate;
                    end;


                  2. не совсем ясна концепция добавления данных, метод AddValue(Value : TTData; ValueTime : TDateTime); не помешал бы.
                  В пояснении опечатка
                  (" Для передачи данных в график используем вызов
                  Grafik1.DataIn(TGrafik.Create(Данные,Time));")
                  а нужно Grafik1.DataIn(TDataInOb.Create(Данные,Time));

                  3. Нет смысла каждый раз рисовать сетку, можно хранить и пересоздавать при Resize

                  Добавлено
                  А вообще, я за две минуты написал вот такой код, который делает все тоже самое но возможностей по оформлению графика в тысячу раз больше
                  ExpandedWrap disabled
                    const Count = 50;
                     
                    procedure TForm1.FormCreate(Sender: TObject);
                    var i: integer;
                    begin
                      Series1.Clear;
                      for i := 0 to Count do
                        Series1.Add(Random(100));
                    end;
                     
                    procedure TForm1.Timer1Timer(Sender: TObject);
                    var i: integer;
                    begin // эффект перемещения
                      for i := 0 to Count-1 do
                        Series1.ValuesList.ValueList[1].Value[i] := Series1.ValuesList.ValueList[1].Value[i+1];
                      Series1.ValuesList.ValueList[1].Value[Count] := Random(100);
                      Chart1.Invalidate;
                    end;
                    Цитата DimaBr @
                    Минимальная переделка и работает для более младших братьев.

                    Это я сделаю, просто времени пока нет.

                    По 1 пункту - учту.

                    Цитата DimaBr @
                    2. не совсем ясна концепция добавления данных, метод AddValue(Value : TTData; ValueTime : TDateTime); не помешал бы.
                    В пояснении опечатка
                    (" Для передачи данных в график используем вызов
                    Grafik1.DataIn(TGrafik.Create(Данные,Time));")
                    а нужно Grafik1.DataIn(TDataInOb.Create(Данные,Time));

                    Испрвлю, метод AddValue добавлю.


                    Цитата DimaBr @
                    А вообще, я за две минуты написал вот такой код, который делает все тоже самое но возможностей по оформлению графика в тысячу раз больше
                    ExpandedWrap disabled
                      const Count = 50;
                       
                      procedure TForm1.FormCreate(Sender: TObject);
                      var i: integer;
                      begin
                        Series1.Clear;
                        for i := 0 to Count do
                          Series1.Add(Random(100));
                      end;
                       
                      procedure TForm1.Timer1Timer(Sender: TObject);
                      var i: integer;
                      begin // эффект перемещения
                        for i := 0 to Count-1 do
                          Series1.ValuesList.ValueList[1].Value[i] := Series1.ValuesList.ValueList[1].Value[i+1];
                        Series1.ValuesList.ValueList[1].Value[Count] := Random(100);
                        Chart1.Invalidate;
                      end;

                    А я по возможностям оформления не с кем и не соревнуюсь :whistle:
                      Пробывал, но так и не получилось сделать статичную картинку из трёх значений - начало дня, середина и конец. Ожидал график в виде /\, ан нет - только три значения в конце графика.
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0311 ]   [ 17 queries used ]   [ Generated: 19.03.24, 07:41 GMT ]