Results 1 to 9 of 9

Thread: Wraptext

  1. #1

    Wraptext

    Hallo,

    Om een lange tekst netjes over verschillende regels te verdelen maak ik gebruik van de Delphi functie wraptext.
    Ik weet de breedte van mijn textbox in pixels.
    Omdat je bij WrapText ook het aantal characters moet opgeven bepaal ik op de volgende manier het aantal tekens te bepalen

    Code:
      c := TBitmap.Create;
      c.Canvas.Font.Assign(FTextbox.Font); 
    
     TempText:='';
      i:=1;
      tempWidth:=0;
    
      while  tempWidth<FTextbox.Position.width do
      begin
       TempText:= TempText+FScribtureText[i];
       Tempwidth:=c.Canvas.TextWidth(temptext);
       i:=i+1
      end;
    Deze functie is echter veels te conservatief en het aantal tekens waarop ik moet afbreken is dan ook veels te klein.

    Wat doe ik hier verkeerd?

    Zowel de Font als de width van de textbox komen overeen met de instellingen die ik heb opgegeven

  2. #2
    Een wilde suggestie:
    Moet het
    tempWidth < FTextbox.Position.width
    zijn, of
    tempWidth < FTextbox.width?

  3. #3
    FTextbox is een eigen object waarbij de width in de Positie zit.
    Deze width geeft ook de juiste waarde door.

  4. #4
    Wat ik weet dat de karakterbreedte meestal zo wordt berekend:
    Tempwidth:=c.Canvas.TextWidth('w');
    He is maar een idee.

    edit:
    Oeps, denk fout zit met jouw source.
    Last edited by DragonFly; 12-Dec-22 at 11:35.

  5. #5
    Quote Originally Posted by cpri View Post
    Deze functie is echter veels te conservatief en het aantal tekens waarop ik moet afbreken is dan ook veels te klein.
    Wat doe ik hier verkeerd?
    Je rekent hier de precieze breedte van de tekst en zet vervolgens de Textbox op die breedte.
    Maar heb je ook rekening gehouden met de marges in die Textbox?

    Hoeveel mis je elke keer? Is dat een vast aantal pixels of verschilt dat ook per regel?

    Mijn vermoeden is dat je elke keer 2x 5 pixels o.i.d. mist = bijvoorbeeld marges aan beide kanten.
    En als het hier gaat om tekst naast elkaar (wat mij zo lijkt omdat je elke keer ScribtureText achter temptext plakt en dan weer de tempwidth bepaald) dan moet je ook de marge TUSSEN de teksten tellen.

    Anders moet je het volledige component laten zien en zeggen wat het moet doen.

    (Je kunt ook kijken of DrawTextEx en DT_CALCRECT met een betere waarde komt)

  6. #6
    Het gaat hierbij niet om een aantal pixels maar echt om meerdere woorden die volgens mijn routine niet meer op de regel passen terwijl er nog ruimte genoeg is.
    Mijn Textbox object bevat enkel maar de settings.
    De textbox zelf wordt op basis van deze settings aangemaakt in Powerpoint.
    In powerpoint zie ik dus dat de breedte van de textbox (in pixels) overeenkomt met de settings die ik opgeef.
    Ook de fontsettings wordt netjes overgenomen echter het aantal karakters wat in de tekstbox past is dus in werkelijkheid groter dan wat ik bereken.
    Hierdoor bevat de tekstbox dus eigenlijk te weinig tekst.

    Ik heb nu even een factor toegevoegd (1.32) hiermee wordt de tekstbox redelijk gevuld.
    Echter als ik nu een zin heb met een hoop M - en dan loopt deze dus buiten de tekstbox heb ik daarin tegen een zin met veel I dan kapt het weer te vroeg af.

  7. #7
    Quote Originally Posted by cpri View Post
    De textbox zelf wordt op basis van deze settings aangemaakt in Powerpoint.
    O, wacht even. Jij wilt dus niet de breedte van tekst op een TCanvas maar de breedte van tekst in Powerpoint?
    Dat is even heel wat anders.

    Wat weet je over de fontsetting in Powerpoint? Hoe zit het daar met de font-kerning.
    Die zou wel eens heeeeel anders kunnen zijn dan de TCanvas.

    https://en.wikipedia.org/wiki/Kerning
    https://www.brightcarbon.com/blog/ad...-how-to-guide/

    Dat hoeft dus echt niet 1:1 te zijn.

  8. #8
    Powerpoint werkt toch sowieso niet met pixels maar met punten?
    1+1=b

  9. #9
    Bedankt voor het artikel overKerning.
    Weer wat geleerd.

    Wat betreft de pixels versus punten
    De resolutie is 1920x1080, echter om een textbox op de juiste plaats te krijgen moest ik alle coordinaten delen door 2.
    Intern word er dus idd al iets omgerekend van pixels naar points.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •