2016-10-11 4 views
0

Я использую TPlotGrid, потому что я хочу попробовать поместить в него несколько строк. Посмотрите на этот простой код:Delphi рисовать линии в PlotGrid с холстом

procedure TForm1.Button1Click(Sender: TObject); 
var a,b: TPointF; 
begin 
a.X := 0; 
a.Y := 0; 
b.X := 1; 
b.Y := 5; 
PlotGrid.Canvas.DrawLine(a,b,1); 
end; 

Как вы можете видеть here у меня есть PlotGrid на TAB2 и кнопку на Tab1. Почему этот код не добавляет строку в PlotGrid? Строка должна появиться , когда я нажимаю кнопку (переход от (0; 0) до (1; 5)).

Я новичок в холсте и, в частности, с TPlotGrid, но последний не очень популярен в Google и документации мало (только 1 страница с простым примером).

+0

Вы посмотрели пример в документации? http://docwiki.embarcadero.com/CodeExamples/en/FMXTPlotGrid_(Delphi) Обратите внимание, что вся картина должна выполняться в событии 'OnPaint'. Существует даже учебник по youtube: https://www.youtube.com/watch?v=8oM1F9r_i9Q. –

+0

Я думаю, что в вопросе он говорил об этом примере (на доке). Я нашел эти 2 источника и статью, но на самом деле их не так много –

ответ

4

TPlotGrid обеспечивает холст сеткой, но у него нет средств для хранения ваших элементов чертежа (линий, прямоугольников и т. Д.). Первое, что вам нужно сделать, - это организовать хранение данных. В вашем примере переместите пункты a и b в частную часть вашей формы, чтобы они были доступны в любое время.

В реальном приложении вы сохраните элементы в некоторой структуре данных в другом месте.

В вашей кнопки OnClick набор событий значений в этих точках и вызвать PlotGrid.Repaint;:

procedure TForm4.Button1Click(Sender: TObject); 
begin 
    a.X := 0; 
    a.Y := 0; 
    b.X := 300; 
    b.Y := 100; 
    PlotGrid1.Repaint; 
end; 

Создать OnPaint событие для TPlotGrid, здесь вы делаете фактический чертеж:

procedure TForm4.PlotGrid1Paint(Sender: TObject; Canvas: TCanvas; 
    const ARect: TRectF); 
begin 
    Canvas.Stroke.Color := TAlphaColors.Chocolate; 
    Canvas.DrawLine(a,b,1); 
end; 

Пример изображения с предыдущий код:

enter image description here