Лучшая практика в отношении построения графических данных

Надеюсь, это понятно...

Я хочу знать, позволяет ли элемент управления PaintBox прокручивать данные слева направо? Представьте себе это как дисплей осциллографа, где один снимок позволяет изменять масштаб изображения и прокручивать его. В этом случае мне не нужно масштабирование. Итак, мой Paintbox имеет размер 800x600, а мой набор данных - 16000x600.

Я могу построить график в области 800x600, как показано ниже, без проблем, и могу применить масштабирование, чтобы получить все данные, но я хочу, чтобы ось Y была масштабирована до 1 и иметь возможность прокручивать / перетаскивать влево / вправо и просмотреть данные.

    for J := 1 to ((Form1.Memo1.Lines.count)-1) do
    begin
      MyTorques[J] := StrToInt(Form1.Memo1.Lines[J]);
      Tqmult := ((StrToInt(Label6.Caption) + 500) Div 600);
      Ycalc[J] := ((MyTorques[J]) Div Tqmult);
      InvY[J] := (600 - (Ycalc[J]));
      X1 := (J-1);
      Y1 := InvY[J-1];
      X2 := (J);
      Y2 := InvY[J];
        with PaintBox1.Canvas do
        begin
          pen.Style := psSolid;
          pen.Color := clBlack;
          pen.Width := 1;
          moveto(X1, Y1);
          Lineto(X2, Y2);
          Label51.Caption := IntToStr(X1);
          Label52.Caption := IntToStr(Y1);
          Label28.Caption := IntToStr(X2);
          Label29.Caption := IntToStr(Y2);
          Label35.Caption := IntToStr(Tqmult);
          Label37.Caption := IntToStr(Ycalc[J]);
          Label39.Caption := IntToStr(InvY[J]);
          Label41.Caption := IntToStr(MyTorques[J]);
        end;
      if MyTorques[J] < Smallest Then
      Begin
        Smallest := MyTorques[J];
        SmallestIndex := J;
      end;
      if MyTorques[J] > Largest Then
      begin
        Largest := MyTorques[J];
        LargestIndex := J;
      end;
      Label30.Caption := IntToStr(Smallest);
      Label31.Caption := IntToStr(SmallestIndex);
      Label32.Caption := IntToStr(Largest);
      Label33.Caption := IntToStr(LargestIndex);
    end;

Итак, должен ли мой paintbox.canvas иметь размер 16000x600 с "окном" поверх верхнего размера 800x600, а элемент управления paintbox можно перетаскивать с вертикальными и горизонтальными ограничениями?

1 ответ

Решение

PaintBox по умолчанию не имеет встроенной поддержки прокрутки.

Поэтому, если вы хотите иметь возможности прокрутки, вам нужно будет поместить ваш PaintBox в другой прокручиваемый элемент управления, например ScrollBox, и задать размер вашего PaintBox, достаточный для отображения всего графика.

Но это плохая практика. Зачем? Таким образом, вы потратите много времени на рисование своего сюжета, даже если только одна его часть видна пользователю одновременно.

Вместо этого вам следует подумать о рисовании только части вашего графика, которая может быть фактически видна вашему пользователю во время сима (вписывается в PaintBox), а затем перерисовать график, когда пользователь прокручивает в другое положение на графике.

Другие вопросы по тегам