Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

kako pronaći duljinu AnsiString polja?

[es] :: C++ programiranje :: kako pronaći duljinu AnsiString polja?

[ Pregleda: 574 | Odgovora: 17 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

maximus_1
Max Maximus

Član broj: 46848
Poruke: 273
193.198.27.*



Profil

icon kako pronaći duljinu AnsiString polja?10.05.2006. u 15:19

Ovako, imam Varijablu tipa AnsiString u koju spremim neku rečenicu. E sad kako mogu saznati koliko znakova ima u njoj jer se ona sastoji od Char-ova. Pokušao sam sa StrLen() ali mi traži Char* a ne moj AnsiString.

KAko to mogu riješiti, treba mi dakle, funkcija koja će vratiti integer, i.e. broj slova u rečenici zajedno sa razmacima.

Inače, to radim u BCB

[Ovu poruku je menjao maximus_1 dana 10.05.2006. u 16:19 GMT+1]
10.05.2006. u 15:19 

maximus_1
Max Maximus

Član broj: 46848
Poruke: 273
193.198.27.*



Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 15:37
Pronašao sam. Koristio sam Length() funkciju
10.05.2006. u 15:37 

maximus_1
Max Maximus

Član broj: 46848
Poruke: 273
193.198.27.*



Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 15:54
Ipak ću trebati pomoć. Duljina rečenice mi je trebala da odredim širinu forme. E sad mi treba formula za to. Probao sam sa

Code:
Form->Width = duljina*10


ili tako nešto ali jednostavo ne pali. Za neku duljinu rečenice namjestim koeficijent ali ako drastično promijenim veličinu rečenice, forma bude preširoka ili preuska.
10.05.2006. u 15:54 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 2835
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 16:21
Odgovor na tvoje pitanje nije jednostavan.

Prvo moras reci kog tipa (koja klasa/komponenta) je taj tekst. Dakle, da li je to TLabel,
tekst unutar TPanel ili TButton ili se radi o tekstu unutar TMemo ili TRichEdit. Takodje,
ako se radi o tekstu unutar TRichEdit, da li je on podlozan menjanju fonta i njegovih
atributa i sl.

Generalno, korišćenje koefecijenta za množenje nije dobar izbor, pogotovo ako korisnik
promeni DPI celog OS-a na 120.

Postoji metoda TextWidth koja ti moze dati sirinu u pixelima na primer neke labele. Ponekad
je prethodno potrebno napraviti instancu TCanvas, pa koristiti njenu TextWidth, a ponekad
TControlCanvas pa njenu TextWidth().

Za TRichEdit je opet drugo, pogotovo ako koristis vise formata unutar jedne linije teksta.

FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
10.05.2006. u 16:21 

maximus_1
Max Maximus

Član broj: 46848
Poruke: 273
193.198.27.*



Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 16:30
To je tekst koji ispisujem na formu i nije podložan mijenjanju (font isl.). želim samo da se forma prilagođava njegovoj duljini. dakle nije ni label ni textbox nego se direktno ispisuje na formu.
10.05.2006. u 16:30 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 2835
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 16:32
Kako se ispisuje, mozda sa TextOut(), (mozes li da pokazes barem deo koda) ?

FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
10.05.2006. u 16:32 

maximus_1
Max Maximus

Član broj: 46848
Poruke: 273
193.198.27.*



Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 16:37
Ma nema problema:

Code:
        for(i = 0; i < n; i++){
                dat = StrToDate(Ispisi[i].DanKolegija + "." + Ispisi[i].MjesecKolegija + ".2006");
                Preostalo = dat - Date();
                brDana = " Još " + IntToStr(Preostalo) + " dana";
                if(Preostalo == 0){
                        brDana = "Danas !!!";
                }
                if(Preostalo == 1){
                        brDana = "Sutra !!!";
                }
                if(Preostalo == 2){
                        brDana = "Prekosutra !!!";
                }

                //duljina forme *************
                int duljina = 0;
                duljina = Ispisi[i].ImeKolegija.Length();
                if(duljina > MaxLength)
                        MaxLength = duljina;

                frmMain->Width = MaxLength*10;
                //***************************

                frmMain->Canvas->TextOutA(10, (20*i + 10), Ispisi[i].ImeKolegija + " - " + " " + brDana);

        }


E sad, problem je unutar zvjezdica, jer bi mi trebao neki koef. s kojim množim
10.05.2006. u 16:37 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 2835
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 16:49
Pretpostavljam da treba nekako ovako /netestirano/:

Code:

AnsiString TajText = Ispisi[i].ImeKolegija + " - " + " " + brDana;
int sirina = frmMain->Canvas->TextWidth( TajText );
frmMain->Canvas->TextOutA(10, (20*i + 10), TajTekst );


Nadam se da ti je taj kod koji si prikazao unutar OnPaint(), jer ce inace
nestati nakon minimizovanja, i sl.

FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
10.05.2006. u 16:49 

maximus_1
Max Maximus

Član broj: 46848
Poruke: 273
193.198.27.*



Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 16:50
Da, OnPaint() je. Zahvaljujem, probat ću da li radi
10.05.2006. u 16:50 

maximus_1
Max Maximus

Član broj: 46848
Poruke: 273
193.198.27.*



Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 18:03
Ok, sredio sam. Hvala još jednom.
10.05.2006. u 18:03 

maximus_1
Max Maximus

Član broj: 46848
Poruke: 273
193.198.27.*



Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 18:25
Može još nešto:

Kako znati da miš nije na formi? Tj. Kako znati da se kursor miša nalazi izvan područja forme (da se ne kreće po njoj)?
10.05.2006. u 18:25 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 2835
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 18:44
Postavi novu temu, npr:
BCB: Da li je miš na unutar ili van forme ...

Ipak smo se udaljili od:
Re: kako pronaći duljinu AnsiString polja?

P.S.

Nema ljutnje, cisto da se pridryavamo pravila na forumu...

Pozdrav.


FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
10.05.2006. u 18:44 

maximus_1
Max Maximus

Član broj: 46848
Poruke: 273
193.198.27.*



Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 18:50
Ok, i mislio sam se da li postavljat. Nema veze, pozdrav.
10.05.2006. u 18:50 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 2835
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 18:51
Ja sam ti spremio odgovor. Ti samo postavi temu... ;)


FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
10.05.2006. u 18:51 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 2835
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: kako pronaći duljinu AnsiString polja?10.05.2006. u 18:54
Evo ti onda ovde:

To se na primer moze postoci hvatanjem poruka CM_MOUSELEAVE i CM_MOUSEENTER.
U Borland C++ Builderu jedan od nacina da se to implementira je na primer
ovako /netestirano/:

--- H (Unit1.h/Form1) ---

Code:

// privatni deo
void __fastcall CMMouseLeave(TMessage&);
void __fastcall CMMouseEnter(TMessage&);

// javni deo
BEGIN_MESSAGE_MAP 
    VCL_MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
    VCL_MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
END_MESSAGE_MAP(TForm)


--- CPP (Unit1.cpp/Form1) ---

Code:

// ako je mis napolju
void __fastcall TForm1::CMMouseLeave(TMessage &Message)
{
   Caption = "Napolju";
}

// ako je mis unutra
void __fastcall TForm1::CMMouseEnter(TMessage &Message)
{
   Caption = "Unutra";
}



To je medjutim, samo osnovni kod. Mislim da ces morati da hvatas jos neke
dogadjaje da budes 100% siguran. Takodje imaj u vidu da u nekim posebnim
slucajevima, kada se kursor misa strahovito brzo pomeri van, moze doci do
toga da se dogadjaj ne uhvati. Ali to za sada ne treba da te brine.

FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
10.05.2006. u 18:54 

maximus_1
Max Maximus

Član broj: 46848
Poruke: 273
193.198.27.*



Profil

icon Re: kako pronaći duljinu AnsiString polja?12.05.2006. u 18:59
Ok ali kako pozvati tu funkciju?
12.05.2006. u 18:59 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 2835
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: kako pronaći duljinu AnsiString polja?12.05.2006. u 19:19
Zasto ce ti pozivanje funkcije?

Prosto, ta dva dogadjaja ce se dogoditi u trenutku kada se desava promena. dakle, ako izlazis van,
desava se jedan dogadjaj, a kada ulazis - dogadja se onaj drugi.

Unutar tela funkcije, ti postavi kod koji ti treba umesto onoga Caption = "...".

FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
12.05.2006. u 19:19 

maximus_1
Max Maximus

Član broj: 46848
Poruke: 273
193.198.27.*



Profil

icon Re: kako pronaći duljinu AnsiString polja?12.05.2006. u 19:20
aha, kužim. Hvala po ne znam koji put (ne brini se, bit će još)
12.05.2006. u 19:20 

[es] :: C++ programiranje :: kako pronaći duljinu AnsiString polja?

[ Pregleda: 574 | Odgovora: 17 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.