Zobrazování html snad naposledy

vložil Radek Červinka 26. října 2011 22:15

Myslím, že jsem už zde uvedl několik způsobů jak zobrazit HTML (přes webbrowser, chrome, gecko, nativní ThtmlLite). Každé řešení má něco do sebe, ale já jsem stále hledal "light" řešení pro krátké html texty.

HTMLLITE.DLL

Nejdříve jsem pokukoval po použití knihovny HTMLLITE.DLL, která je součástí některých MS produktů (jako např. instalace VS), ale nejasná licence, nejasné použití (které se později vyjasnilo) a nutnost DLL mne nakonec odradilo. Ale pro úplnost: htmllite a C#, použití je celkem jednoduché, takže se lze inspirovat.

V podstatě zobrazení je v principu nějak takto (více na tom odkazu):

CreateWindowEx(WS_EX_CONTROLPARENT, 'HTMLLITE', 
   'TODO: HTML goes here…', WS_CHILD | WS_VISIBLE, 
   10, 10, 500, 500, hWnd, 0, 0, 0);

Výsledkem je mini html renderování základních tagů a možnost odchycení kliknutí na link, což by mi stačilo.

HTMLLITE

(ukázka možnosti zobrazení)

Mini HTML

Ale v té době naše firma začala používat některé komponenty od TMS a hodně jejich komponent používá Mini HTML (na odkazu podporované tagy) a není problém ho použít.

Není to nic moc, rozhraní je trochu drsnější, ale stačí tomu Canvas a celkem se mi to líbí. Mezi zajímavosti, které jsou ale pro mne důležité, je např. možnost zobrazování obrázků z předaného ImageListu, možnost tabulátorů (a tím jednoduše formátovat do sloupců), podpora odkazů atd. (viz reference).

Mini Html

(ukázka výstupu s předaným ImageListem a za pomocí TVirtualDrawTree, s gradientem jako podklad)

Klíčová funkce je HTMLDrawEx, která má tunu parametrů. Je používána jednak pro kreslení a druhak pro kontrolu odkazů, kdy se předá pozice X, Y a nastaví se {Kontrola odkazu} a pokud je návratová hodnota True, je v proměnné a vrácen odkaz. Dá se použít i na další, ale toto je základ.


procedure mDrawText(oCanvas:TCanvas; ARect:TRect; const sText:string);
var
  a,sa,fa:string;
  XS, YS, ml, hl: Integer;
  cr,hr: TRect;
  CID,CV,CT:string;

begin
  HTMLDrawEx(oCanvas, sText, ARect, imlMain {ImageList}, 0 {X}, 0{Y}, -1, -1, 1, 
            False {Kontrola odkazu}, False,
            False, False, True, False, True
            ,False
            , 1.0, clBlue{URLColor}, clNone, clNone, clGray, a, sa, fa, 
            XS, YS, ml, hl, hr
            , cr, CID, CV, CT, nil, nil, Self.Handle
            );
end;

Ano je to škaredé, ale pro mé účely do stačí a má to minimální nároky a závislosti.

TScrollBox, TPaintBox a kolečko myši

Určitě to znáte: pokud vrazíte TPaintBox na TScrollBox je vhodné v TPaintBox.OnMouseDown (nebo i jinde) udělat

  pb:= TPaintBox(Sender);
  ActiveControl := pb.Parent;

a tím nastavíte focus při kliknutí na scrollbox a všechno bude v pořádku. Jinak totiž nefunguje kolečko myši.


Nabízíme Delphi školení na různá témata, primárně ve Vaší firmě.

Tagy: ,

Komentáře

28.10.2011 17:23:58 #

Radim

Vyzera zaujimavo - http://fileforum.betanews.com/detail/Microsoft-Research-Accelerator/1277497422/1
...este dokoncit OpenCL.

Radim

31.10.2011 18:41:00 #

Radim

Pekná zbierka užitočných tipov - http://theroadtodelphi.wordpress.com/

Radim

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS