Text undurchsichtig auf Canvas mit TextRect() oder DrawText()
-
Hallo,
ich schreibe Text auf einen Canvas und habe aber diesen immer durchsichtig,
obwohl lt. Hilfe mit ETO_OPAQUE dieser undurchsichtig ausgegeben werden soll:if(Form1->oSNumm==true && zID.Length()>0) { // PORTNUMMERIERUNG Grid->Canvas->TextFlags=ETO_OPAQUE; // undurchsichtigen HG setzen Grid->Brush->Color=clWhite; // Farbe HG festlegen Grid->Canvas->Font->Color=clSilver; // Farbe VG festlegen ARect=Rect(dxL+2,dyO+2,dxR-1,dyU-1); i2=1 | 4; // Rechteck innen festlegen (i2=DT_CENTER = 1 + 4 = DT_VCENTER) Grid->Canvas->TextRect(ARect,ARect.Left+2,(ARect.Top+ARect.Bottom-Grid->Canvas->TextHeight(zID))/2,zID); //DrawText(Grid->Canvas->Handle,zID.c_str(),-1,&ARect,DT_SINGLELINE | i2 ); // Nummmerierung einschreiben } // ende if(Form1
Dabei ist es egal, ob ich den Text mit TextRect() oder mit DrawText() ausgebe.
Wäre für einen Tip echt dankbar, da ich einige Zeit schon darüber grübel
und den Wurm nicht findeGruss Stefan
-
Ich bin mir nicht sicher, ob ich das Problem richtig verstehe. Wenn es darum geht, dass der Hintergrund nicht weiß gezeichnet wird, liegt es daran, dass Du diesen nicht zeichnest:
if(Form1->oSNumm==true && zID.Length()>0) { // PORTNUMMERIERUNG Grid->Canvas->TextFlags=ETO_OPAQUE; // undurchsichtigen HG setzen Grid->Brush->Color=clWhite; // Farbe HG festlegen Grid->Canvas->Font->Color=clSilver; // Farbe VG festlegen ARect=Rect(dxL+2,dyO+2,dxR-1,dyU-1); i2=1 | 4; // Rechteck innen festlegen (i2=DT_CENTER = 1 + 4 = DT_VCENTER) Grid->Canvas->FillRect(Rect); // <-- Hintergrund zeichnen Grid->Canvas->TextRect(ARect,ARect.Left+2,(ARect.Top+ARect.Bottom-Grid->Canvas->TextHeight(zID))/2,zID); //DrawText(Grid->Canvas->Handle,zID.c_str(),-1,&ARect,DT_SINGLELINE | i2 ); // Nummmerierung einschreiben } // ende if(Form1
-
...wird mit
Grid->Canvas->FillRect(Rect);
aber komplett als Viereck gezeichnet. Es soll aber
ja nur der Texthintergrund selbst (also die einzelnen Buchstaben)
weiss hinterlegt sein. Ich war bis jetzt davon ausgegangen, daß
dies mit den beiden Farbangaben:Grid->Brush->Color=clWhite; // Farbe HG festlegen Grid->Canvas->Font->Color=clSilver; // Farbe VG festlegen
erfolgt. Leider scheint nur bei der Textausgabe der Font->Color Befehl zu greifen.
Es muss aber doch möglich sein, z.B. ein gelbes Viereck zu zeichnen und in der
Mitte davon den Text "1234" mit weissem Hintergrund auszugeben (ohne vorher die
Abmessungen des Textes zu kennen; dann könnte ich ja in der Tat ein weisses
Viereck dahinterlegen)Grüsse Stefan
-
Zumindest mit den Funktionen, die mir bekannt sind (bin da nicht so die Leuchte), muß der Hintergrund 'von Hand' gezeichnet werden.
Über Canvas::TextExtent lassen sich die Dimensionen des Textes einfach ermitteln.
-
Hallo, Joe
habe jetzt nochmal einiges probiert und bin auf etwas interessantes gestossen:
Bei einigen Farbhintergründen klappt es, bei einigen nicht?
Da scheint mir die Verknüpfung der einzelnen Bildpunkte eine Rolle zu spielen;
verstehe dann aber beim besten Willen denn Sinn vonGrid->Canvas->TextFlags=ETO_OPAQUE; // undurchsichtigen HG setzen
nicht. Wenn ich den HG immer malen muss, brauche ich auch keinen Textstil mehr!?
Also wenn noch jemand eine Idee hat, irgendwie habe ich das Gefühl eine Kleinigkeit zu übersehen... grübel..
Stefan
-
Hei, peinlich peinlich,
aber an anderer Stelle ist das Programm in einer andere Routine gehüpft
und dort fehlte dasGrid->Canvas->Brush->Color=clWhite
Danke aber für die Unterstützung.
Gruss Stefan
-
... und ich glaube, anstatt
Grid->Canvas->TextFlags=ETO_OPAQUE;
benutzt Du besser:
Grid->Canvas->Brush->Style = bsSolid; // oder bsClear