[ Brkic @ 10.11.2007. 11:04 ] @
pokusavam ali ne uspevam da ako ima greska u unosu teksta u Tedit da mi pozicionira ulaz/pokazivac/ na gresku |
[ Brkic @ 10.11.2007. 11:04 ] @
[ ntojzan @ 10.11.2007. 11:32 ] @
Sta je ulaz/pokazivac?
[ Brkic @ 10.11.2007. 11:34 ] @
>Sta je ulaz/pokazivac?
pa ona crtica sto blinka,kako da je nazovem drugacije, kursor :-) [ X Files @ 10.11.2007. 11:40 ] @
Code: { POZICIJA = 0 .. Length(Edit1.Text) } Edit1.SelStart:=POZICIJA; Edit1.SelLength:=0; [ Brkic @ 10.11.2007. 11:55 ] @
X Files hvala na brzoj pomoci,radi OK
[ X Files @ 10.11.2007. 11:57 ] @
A ako te muči fokusiranje, koje se inicira prethodnim klikom na neki taster, TEdit::OnEnter se može upotrebuti u kontekstu priče:
Code: procedure TForm1.Button1Click(Sender: TObject); begin Edit1.SetFocus; end; Code: procedure TForm1.Edit1Enter(Sender: TObject); begin { POZICIJA = 0 .. Length(Edit1.Text) } Edit1.SelStart:=POZICIJA; Edit1.SelLength:=0; end; [ Brkic @ 10.11.2007. 20:58 ] @
da se nadovezem na ovu temu
kako treba da izgleda procedura koja upravo radi gore resenje od X Files-a provera(ulKalkCena.Text); Procedure TForm1.provera(ulaz:string); begin try if (ulaz[length(ulaz)] in ['A'..'Z'])or(ulaz[length(ulaz)] in ['a'..'z']) then showmessage('Greska, niste uneli ispavno podatak !!'); if ulaz[length(ulaz)]='.' then begin ulaz[length(ulaz)]:=','; //a i ovde nece da vrati vrednost ',' ulaz.SelStart:=length(ulaz); //ovde je greska jer je ulaz string end; except end; end; tj. kako da definisem izlazni podatak da radi na Tedit polju [Ovu poruku je menjao Brkic dana 11.11.2007. u 09:47 GMT+1] [ Brkic @ 11.11.2007. 08:57 ] @
resio sam problem
Procedure TForm1.provera(ulaz:TEdit); begin try if (ulaz.text[length(ulaz.text)] in ['A'..'Z'])or(ulaz.text[length(ulaz.text)] in ['a'..'z']) then showmessage('Greska, niste uneli ispavno podatak !!'); pom1:=ulaz.text; if pom1[length(pom1)]='.' then begin pom1[length(pom1)]:=','; ulaz.text:=pom1; ulaz.SelStart:=length(ulaz.Text); end; except end; end; mozda nekom zatreba [ X Files @ 11.11.2007. 09:00 ] @
Opši tačno šta hoćeš da postigneš ( mrzi me da započinjem, ako ne znam precizne zahteve :D ).
Pretpostavljam da želiš da formatizuješ upis broja, odnosno da imaš neki TEdit objekat (recimo Edit1) u koji ukucavaš BROJ (0..9) koji može da ima i JEDNU decimalnu tačku koja mora da bude u stvari ZAREZ. Čim se uoči greška da ne dozvoli dalji upis, nego da vrati korisnika tačno na grešku. Da li se provera vrši u trenutku kucanja (unosa) broja? Da li decimalna tačka sme da započne upis broja? Da li više decimalnih tačaka sme da bude u broju (naravno ne, samo da pomenem)? Šta ćeš ako se broj upiše sa Paste (a u tvom kodu razmatraš samo poslednje slovo)? Ovde ima dovoljno materijala za razmišljanje, pa zato i rekoh da prvo tačno opišeš zahteve tog podsistema. Imaj u vidu da sa stanovište korisnika ovo može da bude iritirajuće, iako je ideja da mu se olakša posao. Drugim rečima, možda je greška sintaksno napravljena negde na početku stringa a da ga mehanizam provere vraća na neki drugi deo, koji je zapravo ispravan, ali u kombinaciji sa onim prvim čini anomaliju. Da sam na tvom mestu, ja bih proveru i eventualno pozicioniranje na problematični deo Edita radio nakon pokušaja napuštanja Edit polja. (Ovde je trenutak da priupitam zašto baš zarez? Ako je zbog Regional Settingsa, onda si na krivom putu. Postoji globanla varijalbla DecimalSeparator kojom u Dephiju možeš da definišeš kako se odvajaju decimalni brojevi) P.S. Ovde imaš jednu ideju: http://decompile.com/html/tedit_input_control.html ... koja se može razraditi. a postoje i posebni TMaskedEdit za formatizovani upis brojeva. [Ovu poruku je menjao X Files dana 11.11.2007. u 11:44 GMT+1] [ anon68680 @ 11.11.2007. 12:31 ] @
Da se nadovezem na tvoj reply.
Ja bi sve to uradio ovako nekako: Code: var strlist:tstringlist; begin strlist:=TStringList.Create; strlist.Delimiter:=','; if pos(',',edit1.text)>1 then begin strlist.DelimitedText:=edit1.text; if strlist.Count=2 then try Strtoint(strlist[0]); Strtoint(strlist[1]); except //Greska Nije integer; end else //Greska - Previse parametara ili je zarez na pocetku; end else // Greska Nema zareza; I to ubacis u onChange event i trebalo bi da sljaka... [ Brkic @ 11.11.2007. 21:51 ] @
>Da li se provera vrši u trenutku kucanja (unosa) broja?
-da provera se vrsi u trenutku kucanja >Da li decimalna tačka sme da započne upis broja? -ne sme,nisam se ni setio toga >Da li više decimalnih tačaka sme da bude u broju (naravno ne, samo da pomenem)? -nisam se ni setio toga >Šta ćeš ako se broj upiše sa Paste (a u tvom kodu razmatraš samo poslednje slovo)? -predvidjeno je da se ukucava,mogu staviti FOR perlju umesto da proveri samo krajnji znak >Da sam na tvom mestu, ja bih proveru i eventualno pozicioniranje na problematični deo Edita radio nakon pokušaja napuštanja Edit polja. -mislis na 'OnExit' ?? zadao si mi dosta stvari da ubacim,zurim da zavrsim program pa sitnice smetnem sa uma a u stvari su vazne. [ Milan Milosevic @ 12.11.2007. 00:16 ] @
Ja sam problem prepoznavanja stringa kao broja odavno resio.
Dacu ti deo mog koda kojim ces to brzo da resis. Podrzava decimalni zapis i zapis u exponecionalnom obliku tipa -12.3333E-444 Radio sam ga u assembleru tako da je dosta brz. Prava zmija a ima i jedna dodatna funkcija koja moze da ti koristi StringBezBlanko za izbacivanje praznih mesta iz stringa. Evo ti prostog primera pa probaj. [Ovu poruku je menjao Milan Milosevic dana 13.11.2007. u 23:44 GMT+1] Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|