Лучшая практика в отношении построения графических данных
Надеюсь, это понятно...
Я хочу знать, позволяет ли элемент управления 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), а затем перерисовать график, когда пользователь прокручивает в другое положение на графике.