Aufruf einer Zeichnenfunktion
-
Hallo Leute,
ich habe folgendes Problem. Ich habe eine Funktion geschrieben, mit der ich bestimmte Messwerte in einem bestimmten Canvas anzeigen lassen kann. Bei der Funktion wird auch ein Raster im Canvas erstellt mit den Abständen von der Anzahl der Zahlen für die x-Achse und die jeweiligen Werte für y-Achse. Dieses Raster soll sich größenmässig beim ändern des Fensters auch mit Verändern. Mein Problem ist nun daß ich die Funktion in meiner FormCanResize Ereigniss aufrufen möchte oder muss damit das Raster immer neu berechnet wird. Dies gibt aber einen Fehler aus, da ich in der Funktion mit dem Array und mit der Zahlenanzahl arbeiten muss und diese beiden Variablen und Zeiger erst in meinem OnClick Ereigniss aus den Editfelder eingelesen werden. Wie oder wo kann ich diese Funktion aufrufen, sodass sich die Größe des Fensters( Formular) verändern lässt und es keinen Fehler gibt.Danke
yellow1void __fastcall TForm1::Button1Click(TObject *Sender) { Form1->pbZeichnen->Repaint(); } void __fastcall TForm1::FormCanResize(TObject *Sender, int &NewWidth, int &NewHeight, bool &Resize) { Form1->paZeichnen->Left = 40; Form1->paZeichnen->Width = (Form1->Width)-80; Form1->paZeichnen->Top = 300; Form1->paZeichnen->Height = (Form1->Height)-360; pbhoehe = Form1->pbZeichnen->Height; pbweite = Form1->pbZeichnen->Width; zeichnen(pbZeichnen->Canvas,werte,zahlenanzahl,pbhoehe,pbweite); } void zeichnen(TCanvas * zfeld, double * values, int count, int rahmenhoehe, int rahmenbreite) { zfeld->Pen->Color = clBlack; zfeld->Pen->Style = psSolid; zfeld->MoveTo(20,10); zfeld->LineTo(20,(rahmenhoehe-20)); zfeld->MoveTo(20,(rahmenhoehe-20)); zfeld->LineTo((rahmenbreite-20),(rahmenhoehe-20)); double xstep = (rahmenbreite-20)/count; double ystep = (rahmenhoehe-20)/values[count-1]; double xstepmax = rahmenbreite/xstep; double ystepmax = rahmenhoehe/ystep; for (int i = 1; i <= xstepmax; i++) { zfeld->Pen->Color = clGray; zfeld->Pen->Style = psDot; zfeld->MoveTo((i*xstep),0); zfeld->LineTo((i*xstep),rahmenhoehe-20); } for (int i = 1; i <=ystepmax; i++) { zfeld->MoveTo(0,(i*ystep)); zfeld->LineTo(rahmenbreite-20,(i*ystep)); } }
-
Spontan würde mir einfallen, den Canvas mit 'nem TImage zu verlinken und bei diesem Align = alClient sowie Strech = true zu stellen.
-
Die Funktion Zeichnen sollte doch vielmehr in OnPaint Ereignis liegen.
Ansonsten -> bestimme Varaiblen als Klassenvariablen definieren (in der *.h Datei unter private), dann sind sie in der ganzen Klasse sichtbar