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.