Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: wxWidgets paksu teksti <b>

Sivun loppuun

kayttaja-3842 [26.09.2006 18:38:04]

#

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.

kayttaja-4976 [26.09.2006 20:52:33]

#

strcmppiä kun etit ja sitten boldaat. Kai sentään tiiät miten boldataan?

Blaze [27.09.2006 10:36:52]

#

kayttaja-4976 kirjoitti:

Kai sentään tiiät miten boldataan?

Minä sain sellaisen käsityksen, että juuri se oli se ongelma.

Krisse7 [27.09.2006 13:17:10]

#

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

kayttaja-3842 [27.09.2006 16:31:14]

#

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.

Krisse7 [27.09.2006 20:02:10]

#

Siis pitääkö itse tekstit [yhdista] ja [/yhdista] lihavoida, vai niiden välissä oleva teksti?

Metabolix [30.09.2006 19:00:46]

#

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.

kayttaja-3842 [07.10.2006 00:31:26]

#

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!"));
                             }
                           }

Krisse7 [07.10.2006 12:27:26]

#

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.

kayttaja-3842 [08.10.2006 13:08:15]

#

Eli siis se palauttaa etittävän merkkijonon ensinmäisen merkin sijainnin? Miten saan selville sitten merkkijonon viimeisen merkin sijainnin?

Deffi [08.10.2006 13:48:09]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta