Bestimmung der Textlänge in einem TPanel



  • Hallo zusammen,

    wie kann ich die Breite eines Textes in Pixels bestimmen der in einem TPanel ausgegeben werden soll ???

    Anders gesagt:
    Ich habe ein TPanel in dem ein Text ausgegeben weren soll. Der Text soll allerdings "schön" abgeschnitten werden, wenn er nicht ganz in das TPanel passt. Hierzu muss ich die "potentielle" Länge des Textes bestimmen und mit der Länge des Panels vergleichen. Nur, wie bekomme ich die Länge des Textes??

    Jemand eine Idee ??

    Besten Dank vorab

    Michael





  • @Jansen: Danke für den Hinweis .... den Link hatte ich allerdings schon... (über die Suchfunktion ;;-))

    Das Problem ist nur, dass es bei TLabel kein Canvas gibt (bzw. man nicht darauf zugreifen kann) und somit fällt der Hinweis hinten runter.....

    Noch weitere Ideen ?



  • Könntest ja notfalls ein Label oder Image (oder was auch immer) aufs Panel drauf setzen...

    Oder irgendwie ne Komponente von TPanel erben lassen... keine Ahnung, ob das geht.


  • Mod

    Hallo

    wieso sollte man auf Label->Canvas nicht zugreifen koennen
    (ein lesender Zugriff ist jederzeit moeglich)
    dh du kannst die Breite auslesen

    MfG
    Klaus



  • Ich will nicht die Breite des Feldes auslesen.... das geht. Sondern bestimmen wie viele Pixels der Text benötigt.

    Mein Ansatz war:

    String szText = "Hallo";
    TCanvas* test = new TCanvas;
    test->Font = Panel1->Font;
    int len = test->TextWidth(szText); <--- Exception



  • M_kuenzler schrieb:

    den Link hatte ich allerdings schon

    Warum erwähnst du das dann nicht in deiner Frage?

    Ein Beipiel für den Zugriff auf den Canvas nahezu jedes Controls findest du u.a. im FAQ-Beitrag "MinimizeName ...".



  • Danke



  • Meine Lösung:

    String szInfo = "Dieser Text muss evtl. angeschnitten werden";
          TCanvas* hCanvas = new TCanvas;
          hCanvas->Handle = GetDC(LhWbb->Panel3->Handle);
          hCanvas->Font->Assign(LhWbb->Panel1->Font);
    
          if (LhWbb->Panel1->Width < hCanvas->TextWidth(szInfo))          // Text zu lang ?
          {                                                               // Ja
            int iWidth = ((LhWbb->Panel1->BorderWidth) * 2) + ((LhWbb->Panel1->BevelWidth) * 2);
            iWidth = LhWbb->Panel1->Width - iWidth;                       // Max. Anzahl der darstellbaren Punkte im Panel
    
            while (hCanvas->TextWidth(szInfo + "...") >= iWidth)          // Passt der Text jetzt ?
              szInfo = szInfo.SubString(1, szInfo.Length()-1);            // Nein, einen Buchstaben abschneiden
    
            LhWbb->Panel1->Caption = szInfo + "...";
            LhWbb->Panel1->Update();
          }
    
          ReleaseDC(LhWbb->Panel1->Handle, hCanvas->Handle);
          delete hCanvas;
    

Anmelden zum Antworten