Moi.
Tietääkö joku et voiko wxWidgets:in wxTextCtrl:in sisältämää tekstiä paksuntaa? Eli esim jos kirjoittaa TextCtrl:iin tekstin [yhdista]127.0.0.1[/yhdista] niin [yhdista] ja [/yhdista] tekstit muuttuisivat paksunnetuiksi.
strcmppiä kun etit ja sitten boldaat. Kai sentään tiiät miten boldataan?
kayttaja-4976 kirjoitti:
Kai sentään tiiät miten boldataan?
Minä sain sellaisen käsityksen, että juuri se oli se ongelma.
Jos wxTextCtrl:n asettaa moniriviseksi, tekstin tyylin säätö onnistuu.
Esimerkkiä:
// luodaan jonkunnäköinen tekstiloota, huomaa parametrit wxTE_MULTILINE ja wxTE_RICH; jälkimmäistä tarvitsee windowsissa wxTextCtrl* tekstikontrolli = new wxTextCtrl(this, -1, wxT("Hello, world!"), wxPoint(0, 0), wxSize(120, 20), wxTE_MULTILINE | wxTE_RICH); // säädetään tekstiä: tekstikontrolli->SetStyle(0 /*mistä kirjaimesta aloitetaan*/, 5 /*mihin lopetetaan*/, wxTextAttr(wxColour(255, 0, 0) /*minkä väristä tekstiä laitetaan (RGB)*/, wxColour(0, 0, 0) /*minkävärinen tausta tehdään*/, wxFont(24 /*fontin koko*/, wxFONTFAMILY_DEFAULT /*font-family*/, wxFONTSTYLE_NORMAL /*fontin tyyli(esim.kursivoidaanko)*/, wxFONTWEIGHT_BOLD /*lihavoidaanko*/, true /*alleviivataanko(true/false)*/, wxT("Times New Roman") /*fontin nimi*/, wxFONTENCODING_DEFAULT /*enkoodaus*/))); //kaikkia parametrejä ei ole pakko antaa, ei ainakaan noita alleviivauksesta eteenpäin olevia
Siis kyllä tiedän tuon, että miten lihavoitetaan. Nyt pitäis vaan saada tekstistä muutettua lihavoiduiksi merkkijonot missä lukee [yhdista] tai [/yhdista].
Esim jos tekti box:ssa lukee "Minä [yhdistan] ip:seen [/yhdista] sitten minä olen yhteydessä." Niin koodi osaa muuttaa suoraan tekstistä kohdat [yhdista] ja [/yhdsita] lihavoiduiksi.
Siis pitääkö itse tekstit [yhdista] ja [/yhdista] lihavoida, vai niiden välissä oleva teksti?
Krisse7, onko sillä nyt niin väliä? Ja nähdäkseni kysymyksessä aivan suoraan sanotaan, että juuri ne kyseiset merkkijonot, ei niiden välissä olevaa.
Tekstiä voi etsiä funktiolla wxString::Find, ja tämän tiedon saatuasi varmaankin osaat tehdä loput itse.
Mitäs olen tehnyt väärin? :D Ei meinaan toimi tuo. Tuon pitäisi etsiä tekstitstä <komento> ja jos se löytyy muutetaan teksti.
MainFrame::MainFrame(const wxString& otsikko,const wxPoint& pos,const wxSize& size) : wxFrame(NULL,-1,otsikko,pos,size) { wxStaticText *teksti = new wxStaticText(this,wxID_ANY,wxT("<komento>teksti</komento>"),wxPoint(0,0),wxSize(500,500)); wxString datas = teksti->GetLabel(); bool tulos = datas.Find(wxT("<komento>")); if(tulos) { teksti->SetLabel(wxT("komento löytyi!")); } }
wxString::Find
-funktion palautusarvo on tyyppiä int
, ja se palauttaa kohdan, mistä etsittävä teksti löytyi. Koska tuossa tapauksessa <komento>
-teksti on aivan alussa, wxString::Find
palauttaa nollan. Jos tekstiä ei löydy, palautetaan -1.
Eli siis se palauttaa etittävän merkkijonon ensinmäisen merkin sijainnin? Miten saan selville sitten merkkijonon viimeisen merkin sijainnin?
Jos wxWidgetsissä ois joku FindNext (en itse ainakaan heti löytänyt kun class referenssiä selailin), niin etsis siitä kohdasta seuraavan ">" josta "<" löytyi. Tosin voihan ton viimeisen merkin sijainnin saada helpommin selville kun kattoo kuinka monta merkkiä pitkä "<komento>" on (wxString.Length()) ja lisää siitä tulleen tuloksen ensimmäisen merkin sijaintiin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.