Announcement

Collapse
No announcement yet.

Problem mit Textwidth

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

  • Problem mit Textwidth

    Hi!<p>
    Um ein Edit-Feld dynamisch an einen auszugebenden String anzupassen, verwende ich folgendes Programmkonstrukt:<p>
    Edit1.Width := Canvas.Textwidth(s);<p>
    Aber anscheinend funktioniert das so nicht ganz. Denn fast bei jedem Test ist es so, daß die angepaßte Breite des Edit-Feldes nicht
    ausreicht, den String s komplett anzuzeigen. Ausgegeben wird s allerdings vollständig, denn wenn ich ins Edit-Feld positioniere,
    kann ich mit den Cursortasten bis zum Stringende scrollen.<br>
    Laut Online-Hilfe definiert Edit1.Width Pixel und Canvas.Textwidth gibt Pixel zurück. Also, eigentlich sollte das doch funktionieren.<br>
    Weiß jemand, warum es nicht funktioniert?<p>
    Grüße, Reimund

  • #2
    Hallo Reimund,<p>
    das funktioniert auch, aber Du hast den Rahmen vergessen. Die Breite eines Edits ist nämlich Breite des Textes züzgl. links und rechts noch einen Rahmen dazu. Schau mal bei Hilfe zur Win32Api unter GetSystemMetrics nach. Zudem kommt zum Fensterrahmen meist in den Edits noch ein zusätzlicher Rahmen rum, in den nicht gezeichnet werden kann, so ca. 2 Pixel. Als nimm zur Textwidth so ca. 2x2 + 2x2 dazu, und es wird auf den meisten Systemen funktionieren.<p>
    Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Hi Mario,<p>
      vielen Dank für Deine Hilfe. Ich hab mir GetSystemMetrics mal angeschaut und dann mit verschiedenen Parametern und deren Kombinationen mal experimentiert: SM_CXBORDER, SM_CXEDGE, SM_CXFRAME, SM_CXDLGFRAME und SM_CXFIXEDFRAME. Leider liefern diese alle nur ein paar Pixel, was aber zur vollständigen Anzeige des Strings nicht ausreicht.<br>
      Ich multipliziere den Wert von Canvas.Textwidth jetzt einfach mit 1,15. Das ist zwar sicherlich nicht elegant, aber es funktioniert. Zumindest bis jetzt. Ich werd noch weiter in der Win-API-Hilfe schmökern. Vielleicht find ich ja noch etwas, das mir weiterhilft.<p>
      Nochmals danke und servus, Reimun

      Comment


      • #4
        Hi, <br><br>
        Falls du mit Canvas.Textwidth(s) auf das Formular-Zeichenfeld <br>
        zugreifst, könnte die Abweichung durch einen unterschidlichen <br>
        Font resultieren.
        <br>

        by

        Comment

        Working...
        X