2016-10-11 3 views
0

Ich benutze eine TPlotGrid, weil ich versuchen möchte, einige Zeilen darin zu setzen. Schauen Sie sich diese einfachen Code:Delphi Zeichnen von Linien in einem PlotGrid mit Leinwand

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; 

Wie Sie here sehen kann ich die PlotGrid auf Tab2 und die Taste auf Tab1 haben. Warum fügt dieser Code keine Zeile zum PlotGrid hinzu? Eine Zeile sollte erscheinen , wenn ich auf die Schaltfläche (von (0; 0) bis (1; 5)) klicken.

Ich bin neu mit Canvas und insbesondere mit der TPlotGrid aber letzteres ist nicht sehr beliebt bei Google und es gibt nicht viel auf der Dokumentation (nur 1 Seite mit einem einfachen Beispiel).

+0

Haben Sie sich das Beispiel in der Dokumentation angesehen? http://docwiki.embarcadero.com/CodeExamples/de/FMXTPlotGrid_(Delphi) Beachten Sie, dass das gesamte Malen im OnPaint-Ereignis durchgeführt werden muss. Es gibt sogar ein Youtube-Tutorial: https://www.youtube.com/watch?v=8oM1F9r_i9Q. –

+0

Ich vermute, dass in der Frage er über dieses Beispiel (auf dem Dokument) sprach. Ich habe diese 2 Quellen und einen Artikel gefunden, aber eigentlich gibt es nicht viel –

Antwort

4

TPlotGrid bietet eine Leinwand mit den Gitterlinien, aber es hat keine Möglichkeit, Ihre Zeichenelemente (Linien, Rechtecke usw.) zu speichern. Das erste, was Sie tun müssen, ist für die Speicherung von Daten arrangieren. In Ihrem Beispiel verschieben Sie die Punkte a und b in den privaten Bereich Ihres Formulars, damit sie jederzeit verfügbar sind.

In einer realen Anwendung würden Sie die Elemente in einer Datenstruktur an anderer Stelle speichern.

In Ihrem Taste OnClick Ereignis Sollwerte auf die Punkte und rufen PlotGrid.Repaint;:

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

Eine OnPaint Ereignis für die TPlotGrid, hier gibt es die aktuelle Zeichnung tun:

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

Beispielbild mit der vorherige Code:

enter image description here