Лучшая практика в отношении построения графических данных - PullRequest
0 голосов
/ 24 апреля 2019

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

Я хочу знать, может ли элемент управления 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 Ответ

1 голос
/ 24 апреля 2019

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

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

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

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

...