Wie arbeitet dein Parser? Baut er einen Baum auf? Dann koenntest du dir ueberlegen, einfach den Zeichenkontext (das Bitmap, Zeichenkoordinaten und evtl. noch Schriftgroesse (Exponenten kleiner)) durchzureichen und jeden Knoten sich selbst
zeichnen zu lassen.
Wuerde ich in zwei Methoden aufteilen: Eine, die die Groesse des benoetigten Zeichenbereiches zurueckgibt und eine, die tatsaechlich zeichnet.
In Pseudocode koennte die Additions-Zeichen-Methode z.B. so aussehen:
Code:
Additionsknoten::zeichne(ACanvas: TCanvas, AStartpunkt: Koordinate, ASchriftgroesse: Zahl)
{
ErsterBereich: Rechteck := ErsterUnterbaum->zeichen_groesse(ASchriftgroesse);
ZweiterBereich: Rechteck := ZweiterUnterbaum->zeichen_groesse(ASchriftgroesse);
OperatorBereich: Rechteck := ermittle_text_groesse("+", ASchriftgroesse);
ErsterBereich->zeichne(ACanvas, AStartpunkt, ASchriftgroesse);
AStartpunkt->verschiebe(ErsterBereich->X, 0);
Canvas->zeichne_text("+", ASchriftgroesse, AStartpunkt);
AStartpunkt->verschiebe(OperatorBereich->X, 0);
ZweiterBereich->zeichne(ACanvas, AStartpunkt, ASchriftgroesse);
}
Bei Zahlen-Knoten musst du eben nur die enthaltene Zahl
zeichnen, bei Bruch-Knoten musst du Bruchstriche
zeichnen etc., aber alles nach gleichem Schema.