Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi truefontwidth + TWebBrowser (https://www.delphipraxis.net/86164-truefontwidth-twebbrowser.html)

jokerfacehro 10. Feb 2007 10:10


truefontwidth + TWebBrowser
 
Liste der Anhänge anzeigen (Anzahl: 1)
halli hallo :)

ich benutze die TrueFontWidth funktion :
Delphi-Quellcode:
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;
um mir die textlänge ausgeben zu lassen ;)
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:
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;
der text wird nie wirklich direkt am ende des fenster umgebrochen, sondern früher und immer unterschiedlich je nachdem welches zeichen ich benutze

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:
<div style="font-size:16px"> //das benutze ich

<div style="font-size:16pt"> // --> das pt
liegt es vielleicht daran ? ^^

Edit: pt und px kann ich nicht mit angeben:
Delphi-Quellcode:
WebBrowser1.OleObject.Document.Body.Style.fontsize:=StrToInt(textattr[1]);
da delphi nur einen integer verlangt :-(

viel spaß beim antowrten ;)

jokerfacehro 10. Feb 2007 10:34

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:
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;
diese prozedur funktioniert einwandfrei :D
danke für eure postings lol :mrgreen: :mrgreen: :zwinker: :drunken: :!:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz