Announcement

Collapse
No announcement yet.

Zeichen umdrehen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zeichen umdrehen?

    Hallo,
    gibt es die Möglichkeit (u.U. auch mit Fremdkomponenten) Zeichen "auf dem Kopf" auszugeben, bspw. in einem StringGrid? Wahrscheinlich nicht, würde mir aber sehr helfen...

    Vielen Dank!

  • #2
    Hi Thomas!<br>

    Benutze in OnPaint die Canvas-Funktion TextOut mit<br>
    umgedrehten Koordinaten.<br>
    Wenn Du Dir TChart anschaust, siehst Du wie es gemacht wird.<br>

    MfG

    Fre

    Comment


    • #3
      Danke für die schnelle Antwort, Fred!

      Allerdings bin ich mir noch nicht ganz sicher wie das funktionieren soll. Mit TextOut kann ich doch nur die Position bestimmen, oder?
      Die Koordinaten geben doch nur den Startpunkt an, oder seh ich den Wald vor lauter Bäumen wieder nicht

      Comment


      • #4
        Hi Tom!<br>

        wenn nicht so, dann definierst Du eben erst das Ausgaberechteck<br>
        und dann TextOut.<br>

        gruß fre

        Comment


        • #5
          Mit Hilfe der Win32 API kann man mittels CreateFontIndirect über eine LOGFONT Struktur, und dort speziell über den Parameter lfOrientation mit den meisten Schriftarten die Texte um einen beliebigen Winkel verdreht, also auch "auf dem Kopf" ausgeben. Bezogen auf ein StringGrid im C++ Builder wird man die Methode StringGrid->Canvas->TextOut entsprechend überschreiben müssen. Gemacht hab ich so etwas aber noch nie, und deshalb ist meine Hilfe hier am Ende.

          Gruß - Günthe
          Günther

          Comment


          • #6
            Hi,

            ich habe hier ein Beispiel. Das Programm hatte ich mal für irgend einen Test gebraucht, weis daher nicht mehr genau ob alles funktioniert. Meines Wissens funktioniert winkelabhängige Ausgabe von Text nur mit TrueType-Schriften.

            <pre>
            //---------------------------------------------------------------------------
            void __fastcall TAngleLabel::Paint()
            {
            int x;
            int y;
            LOGFONT lfStruct;

            ::GetObject(Font->Handle, sizeof(lfStruct), &lfStruct);
            lfStruct.lfEscapement = FAngle * 900;
            strcpy(lfStruct.lfFaceName, "Times New Roman");

            //Canvas->MoveTo(ClientRect.Left,ClientRect.Top);
            //Canvas->LineTo(ClientRect.Right, ClientRect.Bottom);
            Canvas->FrameRect(ClientRect);
            Canvas->Font->Handle = ::CreateFontIndirect(&lfStruct);
            Canvas->Brush->Color = Color;
            switch(FAngle) {
            case al0:
            x = ClientRect.Left;
            y = ClientRect.Top;
            break;
            case al90:
            x = ClientRect.Left;
            y = ClientRect.Bottom;
            break;
            case al180:
            x = ClientRect.Right;
            y = ClientRect.Bottom;
            break;
            case al270:
            x = ClientRect.Right;
            y = ClientRect.Top;
            break;
            }
            Canvas->TextOut(x, y, Caption);
            }
            //---------------------------------------------------------------------------

            </pre>

            Viel Erfolg

            Heik

            Comment

            Working...
            X