Results 1 to 7 of 7

Thread: Emoticons via Webbroser.

  1. #1
    Hobby fröbelaar
    Join Date
    Nov 2002
    Location
    Goes
    Posts
    458

    Emoticons via Webbroser.

    Hoi allemaal,

    Ik heb een misschien wel intressante Procedure geschreven die de Msn Emoticons via een webbrowser op je ChatForm kan laten zien.
    En het meest verbazende eraan is (vind ikzelf) het werkt.
    En ik wil het de geintresseerden niet onthouden dus hier komt ie:

    Code:
    Procedure TForm1.ChatToHtml(memo:TMemo; Webbrowser:TWebBrowser);
    var StringList:Tstringlist; text:string;
    begin
    Stringlist := TStringList.Create;
    try
    Stringlist.Text := memo.Lines.GetText;
    Stringlist.Text := StringReplace(Stringlist.Text,':)','<img src=Emoticons/regular_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,';)','<img src=Emoticons/wink_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-)','<img src=Emoticons/regular_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,';-)','<img src=Emoticons/wink_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-O','<img src=Emoticons/omg_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':o','<img src=Emoticons/omg_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-S','<img src=Emoticons/confused_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':S','<img src=Emoticons/confused_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':''(','<img src=Emoticons/cry_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(H)','<img src=Emoticons/shades_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(h)','<img src=Emoticons/shades_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(a)','<img src=Emoticons/angel_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(A)','<img src=Emoticons/angel_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-#','<img src=Emoticons/47_47_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'8-|','<img src=Emoticons/49_49_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-*','<img src=Emoticons/51_51_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':^)','<img src=Emoticons/71_71_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-o)','<img src=Emoticons/74_74_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'|-)','<img src=Emoticons/77_77_smile.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(Y)','<img src=Emoticons/thumps_up.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(y)','<img src=Emoticons/thumps_up.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(B)','<img src=Emoticons/beer.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(b)','<img src=Emoticons/beer.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(X)','<img src=Emoticons/girl.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(x)','<img src=Emoticons/girl.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'({)','<img src=Emoticons/guy_hug.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-[','<img src=Emoticons/bat.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':[','<img src=Emoticons/bat.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(l)','<img src=Emoticons/heart.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(L)','<img src=Emoticons/heart.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(K)','<img src=Emoticons/kiss.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(k)','<img src=Emoticons/kiss.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(F)','<img src=Emoticons/rose.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(f)','<img src=Emoticons/rose.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(P)','<img src=Emoticons/camera.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(p)','<img src=Emoticons/camera.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(@)','<img src=Emoticons/cat.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(t)','<img src=Emoticons/phone.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(T)','<img src=Emoticons/phone.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(8)','<img src=Emoticons/note.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(*)','<img src=Emoticons/star.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(O)','<img src=Emoticons/clock.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(0)','<img src=Emoticons/clock.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(sn)','<img src=Emoticons/53_53.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(pl)','<img src=Emoticons/55_55.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(pi)','<img src=Emoticons/57_57.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(au)','<img src=Emoticons/59_59.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(um)','<img src=Emoticons/61_61.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(co)','<img src=Emoticons/63_63.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(st)','<img src=Emoticons/66_66.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(mo)','<img src=Emoticons/69_69.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(li)','<img src=Emoticons/73_73.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(mp)','<img src=Emoticons/64_64.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(ip)','<img src=Emoticons/62_62.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(ap)','<img src=Emoticons/60_60.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(so)','<img src=Emoticons/58_58.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(||)','<img src=Emoticons/56_56.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(bah)','<img src=Emoticons/70_70.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(M)','<img src=Emoticons/messenger.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(m)','<img src=Emoticons/messenger.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(E)','<img src=Emoticons/envelope.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(e)','<img src=Emoticons/envelope.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(S)','<img src=Emoticons/moon.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(I)','<img src=Emoticons/lightbulp.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(i)','<img src=Emoticons/lightbulp.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(&)','<img src=Emoticons/dog.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(~)','<img src=Emoticons/film.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(W)','<img src=Emoticons/wilted_rose.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(w)','<img src=Emoticons/wilted_rose.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(g)','<img src=Emoticons/present.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(G)','<img src=Emoticons/present.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(u)','<img src=Emoticons/broken_heart.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(U)','<img src=Emoticons/broken_heart.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(^)','<img src=Emoticons/cake.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(})','<img src=Emoticons/girl_hug.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(z)','<img src=Emoticons/guy.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(Z)','<img src=Emoticons/guy.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(D)','<img src=Emoticons/martini.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(d)','<img src=Emoticons/martini.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(N)','<img src=Emoticons/thumbs_down.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(n)','<img src=Emoticons/thumbs_down.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(C)','<img src=Emoticons/coffee.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(c)','<img src=Emoticons/coffee.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'8-)','<img src=Emoticons/75_75.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'*-)','<img src=Emoticons/72_72.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'+o(','<img src=Emoticons/52_52.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'^o)','<img src=Emoticons/50_50.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'8o|','<img src=Emoticons/48_48.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,'(6)','<img src=Emoticons/devil.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-@','<img src=Emoticons/angry.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':@','<img src=Emoticons/angry.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-$','<img src=Emoticons/red.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':$','<img src=Emoticons/red.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-|','<img src=Emoticons/what.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':|','<img src=Emoticons/what.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-(','<img src=Emoticons/sad.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':(','<img src=Emoticons/sad.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-P','<img src=Emoticons/tong.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':P','<img src=Emoticons/tong.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':-D','<img src=Emoticons/teeth.gif>',[rfReplaceAll, rfIgnoreCase]);
    Stringlist.Text := StringReplace(Stringlist.Text,':D','<img src=Emoticons/teeth.gif>',[rfReplaceAll, rfIgnoreCase]);
    // Alle emoticon codes worden in een stringlist vervangen door een HTML ImgSrc code overeenkomstig met de gifjes. :)
    Stringlist.Add('</html>');
    // HTMLCode sluiten.
    Stringlist.SaveToFile('Chat.html');
    //Opslaan als HTMLFile.
    finally
    Stringlist.Free;
    End;
    WebBrowser.Navigate(ExtractFilePath(Application.ExeName)+'Chat.html');
    //De Webbrowser het zojuist opgeslagen Html bestand laten navigeren.
    end;
    En om het in je ChatForm aan te roepen het volgende:

    Code:
    procedure TForm1.msnIncomingMessage(Sender: TObject; Session: TMSNSession;
      FromUser: TMSNUser; Text: String; Font: TFont);
      var
      bFound:   Boolean;
      iForm:    Integer;
      sFind:    String;
    
      begin
      sFind  := FromUser.Displayname + ' gesprek';
      bFound := False;
    
      for iForm := Screen.FormCount - 1 downto 0 do
        if Screen.Forms[iForm].Caption = sFind then
        begin
          Screen.Forms[iForm].BringToFront();
          bFound := True;
          form2.chatlog.Lines.Add(TimeToStr(now)+' '+Fromuser.Displayname+' zegt: '+text+'<br>');
          break;
          end;
    
    if not bfound [COLOR=red]then
    //Thnxx to PsychoMark :)
    
    begin
     Application.CreateForm(TForm2,Form2);
     Form2.Caption:= FromUser.Displayname+' gesprek';
     Form2.Show;
     Form2.Adres.Text:=Fromuser.Passport;
     form2.chatlog.Lines.Add(TimeToStr(now)+' '+Fromuser.Displayname+' zegt: '+text+'<br>');
     end;
     ChatToHtml(form2.chatlog,form2.WebBrowser1);
    [COLOR=darkbleu]//Chatlog is een TMemo , maar dat moge duidelijk zijn.
    end;
    En als je een Message verzend:

    Code:
    begin
    form1.msn.SendMessage(adres.Text,ChatLine.Text);
    chatlog.Lines.Add(TimeToStr(now)+' '+Form1.msn.Displayname+' zegt: '+Chatline.Text+'<br>');
    Chatline.Text:='';
    Form1.ChatToHtml(chatlog,webbrowser1);
    end;
    Omdat je ook een HTML Tag moet openen en ik niet wist hoe ik dat in code moest doen heb ik in de memo de volgende lines geplaatst:

    <html>
    <body bgcolor=white>
    BGColor = white staat er omdat ik door mijn XPTheme niet standaard een witte achtergrond heb en zodoende witte vakjes om mijn gifs krijg.


    Ik hoop dat jullie er iets aan hebben.
    Het is niet moeilijk te programeren, maar wel veel werk om al die emoticons op te slaan en die procedure te schrijven, dus als jullie het willen gebruiken bespaart het veel werk. :)

    Emoticons.zip zijn de gifjes het mapje in dezelfde dir zetten als je project en klaar is Kees ( of hoe je ook heten mag).
    Attached Files Attached Files
    Last edited by PsychoMark; 24-Sep-04 at 08:30.
    Greetzz Jacco

  2. #2
    Hobby fröbelaar
    Join Date
    Nov 2002
    Location
    Goes
    Posts
    458
    Een aantal emoticons worden hier ook al weergegeven zie ik.
    Ik hoop dat het desondanks toch te kopieren valt
    Anders Attach ik het wel.
    Greetzz Jacco

  3. #3
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Er staat een vinkje "Disable smilies in this post" als je je post maakt / edit, heb die maar even aan gezet

    Het nadeel van deze methode wordt helaas al snel duidelijk; je moet bij elk bericht de hele HTML pagina refreshen, en hoe groter de chat hoe langer dat zal duren... ik heb het destijds ook nog geprobeerd met de freeware HTML viewer van pbear.com, maar ook die had geen manier om op een knippervrije manier HTML toe te voegen aan een bestaand document...

    Dus wat heb ik toen gedaan? Een artikel geschreven natuurlijk
    Last edited by Dees; 24-Sep-04 at 09:03.
    Qui custodiet ipsos custodes

  4. #4

    • Mark was nog niet helemaal wakker, URL gemaakt (wil Mark even kijken of ik de goede URL heb gepakt?


  5. #5
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    URL is nu goed, bericht was van voor de eerste koffie
    Qui custodiet ipsos custodes

  6. #6
    Hobby fröbelaar
    Join Date
    Nov 2002
    Location
    Goes
    Posts
    458
    Ik heb ook eens iets dat werkt hoor :S

    Maar er zit wel wat in.

    Hoe ga je het op die manier trouwens voor elkaar krijgen met geanimeerde emoticons?
    Jij hebt nu een 'lijst' met niet geanimeerde plaatjes weet niet of en zoja hoe het mogelijk is om er geanimeerde aan toe te voegen.

    Ik denk ook dat je wel een paar dagen achter elkaar met iemand moet chatten wil het echt traag in gaan laden, want het html bestand is niet ingewikkeld en ook niet groot, een beetje text en af en toe een klein gif plaatje.
    Dit is op een beetje computer van tegenwoordig toch wel ingeladen voordat je met je ogen kan knipperen denk ik.
    Greetzz Jacco

  7. #7
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Ik heb ook eens iets dat werkt hoor :S
    Zoals ik al zei, ik begon op dezelfde manier, dus je hoort mij niet zeggen dat je slecht bezig bent


    Hoe ga je het op die manier trouwens voor elkaar krijgen met geanimeerde emoticons?
    Niet, dat is een limitatie van mijn methode. Persoonlijk ben ik niet zo weg van geanimeerde emoticons, dus dat was niet zo'n probleem... het moet echter best mogelijk zijn om een eigen object in zo'n RichEdit te gooien die wel kan animeren, maar makkelijk is dat zeker niet.


    Ik denk ook dat je wel een paar dagen achter elkaar met iemand moet chatten wil het echt traag in gaan laden
    Ik vond dat het na 10 regels al erg merkbaar was, storend zelfs. TWebBrowser is sowieso al een traag geval (de IE HTML engine is nou eenmaal niet de meest efficiente), maar ook met lichtere HTML viewers is 't al heel snel geen doen meer. Bij een gemiddelde chat sessie heb je toch al gauw een paar honderd tot duizend regels, en 't is meer dan eens voorgekomen dat op een zondag online MSN Messenger zich gek begon te gedragen omdat we over de 64 KB limiet van destijds heen gingen (en dan is chatten nog niet eens m'n hoofdbezigheid zoals bij de gemiddelde chatter van tegenwoordig )... wat je dus eigenlijk nodig hebt is een component die net zo flexibel is als HTML, maar dit kan doen zonder alles opnieuw in te laden...
    Qui custodiet ipsos custodes

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
  •