[ maximus_1 @ 10.05.2006. 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]
[ maximus_1 @ 10.05.2006. 15:37 ] @
Pronašao sam. Koristio sam Length() funkciju
[ maximus_1 @ 10.05.2006. 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.
[ X Files @ 10.05.2006. 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.
[ maximus_1 @ 10.05.2006. 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.
[ X Files @ 10.05.2006. 16:32 ] @
Kako se ispisuje, mozda sa TextOut(), (mozes li da pokazes barem deo koda) ?
[ maximus_1 @ 10.05.2006. 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
[ X Files @ 10.05.2006. 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.
[ maximus_1 @ 10.05.2006. 16:50 ] @
Da, OnPaint() je. Zahvaljujem, probat ću da li radi
[ maximus_1 @ 10.05.2006. 18:03 ] @
Ok, sredio sam. Hvala još jednom.
[ maximus_1 @ 10.05.2006. 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)?
[ X Files @ 10.05.2006. 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.

[ maximus_1 @ 10.05.2006. 18:50 ] @
Ok, i mislio sam se da li postavljat. Nema veze, pozdrav.
[ X Files @ 10.05.2006. 18:51 ] @
Ja sam ti spremio odgovor. Ti samo postavi temu... ;)

[ X Files @ 10.05.2006. 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.
[ maximus_1 @ 12.05.2006. 18:59 ] @
Ok ali kako pozvati tu funkciju?
[ X Files @ 12.05.2006. 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 = "...".
[ maximus_1 @ 12.05.2006. 19:20 ] @
aha, kužim. Hvala po ne znam koji put (ne brini se, bit će još)