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 finde 😕

    Gruss 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 von

    Grid->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 das

    Grid->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
    

Log in to reply