![]() |
truefontwidth + TWebBrowser
Liste der Anhänge anzeigen (Anzahl: 1)
halli hallo :)
ich benutze die TrueFontWidth funktion :
Delphi-Quellcode:
um mir die textlänge ausgeben zu lassen ;)
function TForm1.TrueFontWidth(fnt: TFont; const text:string): Integer;
var dc: hdc; tsize : Windows.TSize; begin dc := GetDC(0); SelectObject(DC, fnt.Handle); GetTextExtentPoint32(dc, PChar(text), Length(text), tsize); ReleaseDC(0, DC); Result := tsize.cx; end; ich nutze diese funktion für ein autowrap, damit man nicht scrollen braucht. doch diese funktioniert nicht optimal. wenn ich das auf den webbrowser anwende klappt das nicht mehr so ganz. anscheinend ist die darstellung im webbrowser mit gleicher FontName und FontSize eine andere als in delphi. hier ist meine autowrapfunktion:
Delphi-Quellcode:
der text wird nie wirklich direkt am ende des fenster umgebrochen, sondern früher und immer unterschiedlich je nachdem welches zeichen ich benutze
procedure TForm1.autowrap(var str:string;maxwidth,fontsize:integer;fontfamiliy:string);
var i,j,linewidth,linecount:integer; tempstr:string; begin font1:=TFont.Create; font1.Size:=fontsize; font1.Name:=fontfamiliy; linewidth:=TrueFontWidth(font1,str); linecount:=linewidth DIV maxwidth; if (linewidth - maxwidth)>0 then begin i:=1; j:=1; tempstr:=str[1]; repeat inc(i); tempstr:=tempstr+str[i]; if (TrueFontWidth(font1,tempstr)>=(maxwidth*j)) then begin inc(j); tempstr[Length(tempstr)]:=' '; i:=i-1; end; until i>=Length(str); str:=tempstr; end; str:=str+' '; font1.Free; end; ich hänge noch paar screenshots ran zum verständnis ;) hoffentlich kennt sich jemand damit aus ^^ kann es vielleicht sein, dass ich statt px, pt im WebBrowser verwenden muss ?
Delphi-Quellcode:
liegt es vielleicht daran ? ^^
<div style="font-size:16px"> //das benutze ich
<div style="font-size:16pt"> // --> das pt Edit: pt und px kann ich nicht mit angeben:
Delphi-Quellcode:
da delphi nur einen integer verlangt :-(
WebBrowser1.OleObject.Document.Body.Style.fontsize:=StrToInt(textattr[1]);
viel spaß beim antowrten ;) |
Re: truefontwidth + TWebBrowser
Liste der Anhänge anzeigen (Anzahl: 1)
hahaha ich bin so gut :D:D:D
ich hab es selber rausbekommen ^^ also zuerst muss man wissen dass 16px = 12pt sind ^^ der webbrowser nimmt das als pt an. und 16 pt ist größer als 16px ^^ ich hab meine schrift immer auf fsBold dann muss man wissen, dass Font.Style:=[fsBold] eine erhebliche verbreiterung der schrift nach sich zieht, wodurch sich meine autowrap funktion dahingehen verändetr hat : Edit: funktion überarbeitet
Delphi-Quellcode:
diese prozedur funktioniert einwandfrei :D
procedure TForm1.autowrap(var str:string;maxwidth,fontsize:integer;fontfamiliy:string)
var i,j,linewidth,linecount:integer; tempstr,wrapstr:string; font1:TFont; begin font1:=TFont.Create; font1.Size:=fontsize-4; // wichtig font1.Name:=fontfamiliy; font1.Style:=[fsBold]; // wichtig FontStyle solltet ihr mit übergeben, ich brauch das nicht ^^ linewidth:=TrueFontWidth(font1,str); linecount:=linewidth DIV maxwidth; if (linewidth - maxwidth)>0 then begin i:=1; j:=1; tempstr:=str[1]; wrapstr:=str[1]; repeat inc(i); if (str[i]=#13) then wrapstr:=''; wrapstr:=wrapstr+str[i]; tempstr:=tempstr+str[i]; if (TrueFontWidth(font1,wrapstr)>(maxwidth*j)) then begin inc(j); tempstr:=tempstr+' '; end; until i>=Length(str); str:=tempstr; end; str:=str+' '; font1.Free; end; danke für eure postings lol :mrgreen: :mrgreen: :zwinker: :drunken: :!: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz