canvas - lineto

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
moodle
Beiträge: 2
Registriert: So 3. Jun 2007, 16:55

canvas - lineto

Beitrag von moodle »

Hallo, ich hab für ein Program zur Berechnung des Wildbestandes folgenden Code getipst,
um ein Liniendiagramm in einer TPaintBox zu erstellen:

Code: Alles auswählen

factx:=Form2.pbxErgebnis.Width/Jahre;
  facty:=Form2.pbxErgebnis.Height/max;
  Form2.pbxErgebnis.Color:=clWhite;
  for i:=1 to jahre do begin
    Form2.pbxErgebnis.Canvas.Pen.Color:=clBlack;  // Tier 1
    Form2.pbxErgebnis.Canvas.MoveTo(Round(factx*i-1),Form2.pbxErgebnis.Height-Round(wildbestand[1,1,i]*facty));
    Form2.pbxErgebnis.Canvas.LineTo(Round(factx*i),Form2.pbxErgebnis.Height-Round(wildbestand[1,1,i+1]*facty));
    Form2.pbxErgebnis.Canvas.Pen.Color:=clRed;    // Tier 2
    Form2.pbxErgebnis.Canvas.MoveTo(Round(factx*i-1),Form2.pbxErgebnis.Height-Round(wildbestand[2,1,i]*facty));
    Form2.pbxErgebnis.Canvas.LineTo(Round(factx*i),Form2.pbxErgebnis.Height-Round(wildbestand[2,1,i+1]*facty));
    Form2.pbxErgebnis.Canvas.Pen.Color:=clGreen;  // Tier 3
    Form2.pbxErgebnis.Canvas.MoveTo(Round(factx*i-1),Form2.pbxErgebnis.Height-Round(wildbestand[5,1,i]*facty));
    Form2.pbxErgebnis.Canvas.LineTo(Round(factx*i),Form2.pbxErgebnis.Height-Round(wildbestand[5,1,i+1]*facty));
    Form2.pbxErgebnis.Canvas.Pen.Color:=clBlue;   // Tier 4
    Form2.pbxErgebnis.Canvas.MoveTo(Round(factx*i-1),Form2.pbxErgebnis.Height-Round(wildbestand[6,1,i]*facty));
    Form2.pbxErgebnis.Canvas.LineTo(Round(factx*i),Form2.pbxErgebnis.Height-Round(wildbestand[6,1,i+1]*facty));
  end; {for i}


Ich bekomme keine Fehlermeldung, aber Linien sehe ich auch keine, vielleicht weiss von euch wer Abhilfe? (die Werte in den Array stimmen und sind vorhanden). Fehlt da Repaint (hat auch nichts gebracht) oder was Anderes?

Zudem hab ich nch ein Probelm mit dem Drucken.
Ich hab den Code aus dem Forum zum Drucken eines StringGrids verwenden wollen, aber ich bekomme immer Fehlermeldungen wegen dem Befehl:

Code: Alles auswählen

getcapsdevice
, die Unit Printers habe ich eingebunden. Weiss vielleicht auch hier jemand Rat?

Danke im Vorraus für Antworten.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ich hab jetzt nicht näher nach deinem Code geschaut, aber warum nimmst du nicht einfach TChart oder eine der anderen Chartkomponenten die in der Wiki gelistet sind ?

Zum Drucken würde ich LazReport nehmen das funktioniert schon ganz gut.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: canvas - lineto

Beitrag von theo »

Hallo moodle.

Wie immer: man muss im OnPaint Ereignis zeichnen.

Frag bitte nicht als nächstes warum die Programmdatei so gross ist.... ;-)

moodle
Beiträge: 2
Registriert: So 3. Jun 2007, 16:55

Beitrag von moodle »

Ich hab jetzt nicht näher nach deinem Code geschaut, aber warum nimmst du nicht einfach TChart oder eine der anderen Chartkomponenten die in der Wiki gelistet sind ?

Zum Drucken würde ich LazReport nehmen das funktioniert schon ganz gut.


Danke für den Tip, Barchart arbeitet super.

LazReport muß ich mir mal angucken, kenn ich net :shock: keine Ahnung wie man dass einbindet.

Hallo moodle.

Wie immer: man muss im OnPaint Ereignis zeichnen.

Frag bitte nicht als nächstes warum die Programmdatei so gross ist....


Danke, hat sich mit Barchart erledigt. Ich weiss dass der Code nicht "optimal" ist, habs aber schon bereinigt mit Schleifen :D (konnte erst keine schleife nehmen da das ein 3D array war mit Zeilen die nicht ausgegeben werden sollten -> Neuanordnung :P )

Aber allen mal Danke für die Antwort, hat mir echt weitergeholfen

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Theo meinte: Du kannst die .exe-Datei mit den Programmen strip und upx auf Größen unter 1 MB bringen...

Antworten