Font Darstellung



  • Versuche die Fonthöhe von 8 auf 10 Punkte in 0,1 Schritten zu erhöhen.
    Das Ergebnis ist ein treppenförmiger Verlauf. Jedoch bei Änderung des
    lfEscapement von 0 auf 1(z.Bsp.) ist der Verlauf in Ordnung. Jedoch ist der
    Text dadurch etwas "schief". Hat jemand Erfahrung damit gemacht?

    void __fastcall TForm1::Button2Click(TObject *Sender){
    
       TEXTMETRIC tm;
       LOGFONT logfont;
       logfont.lfHeight = 0;
       logfont.lfWidth = 0;
       logfont.lfEscapement = 0;
       logfont.lfOrientation = 0;
       logfont.lfWeight = FW_NORMAL;
       logfont.lfItalic = FALSE;
       logfont.lfUnderline = FALSE;
       logfont.lfStrikeOut = FALSE;
       logfont.lfCharSet = DEFAULT_CHARSET;
       logfont.lfOutPrecision = OUT_PS_ONLY_PRECIS;
       logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
       logfont.lfQuality = PROOF_QUALITY;
       logfont.lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;
       StrCopy (logfont.lfFaceName, TEXT("Arial"));
       AnsiString Text= "TextTestTextTestTextTestTextTestTextTestTextTestTextTest";
       double pt;
       TCanvas *C =this->Canvas;
       int nWidth  = ::GetDeviceCaps( C->Handle, HORZRES),
           nHeight = ::GetDeviceCaps( C->Handle, VERTRES),
           nHDPI   = ::GetDeviceCaps( C->Handle, LOGPIXELSX),
           nVDPI   = ::GetDeviceCaps( C->Handle, LOGPIXELSY);
      ::SetMapMode( C->Handle, MM_ISOTROPIC );
      ::SetWindowExtEx( C->Handle,
                        nWidth   * 25400 / nHDPI,
                        -nHeight * 25400 / nVDPI,  // pos. y nach unten
                        0 );
       for( int i=0; i<=30; i++ ) {
          pt = 8.0 + ((double)i)/10.0; // um 0.1 erhöhen
          logfont.lfHeight =-pt2screen(pt);
          logfont.lfEscapement = 0;            // "gerader" Text
          C->Font->Handle=CreateFontIndirect (&logfont);
          C->TextOut( 10, 1000 + i * 5000, Text  );
          logfont.lfHeight =-pt2screen(pt);
          logfont.lfEscapement = 1;             // Schrägstellen
          C->Font->Handle=CreateFontIndirect (&logfont);
          C->TextOut( 150000, 1000 + i * 5000, Text  );
      }
    
    }
    // Font-Points in Screen-Einheiten umrechnen (1 pt = 1/72 inch = konst.!):
    int pt2screen( double pt ) {
      // 1 Screen-Unit = 1/1000stel mm:
      // 1 pt = 1/72 " = 25,4 / 72 mm
      return int(pt * 25400.0 / 72.0 + 0.5);    // Rundung
    }
    


  • Benutze doch bitte die Code-Tags. Das kann ja kein Mensch lesen.



  • Du musst bei "BBCode in diesem Beitrag deaktivieren" das Häkchen entfernen (hatte ich auch erst übersehen 😉 )


Anmelden zum Antworten