• 18 odgovora
  • 8.399 pregleda
TEdit - OnKeyUp 24.06.2002. u 20:36 · pre 296 meseci #1
U jednom TEditu kontrolisem Event OnKeyUp, odnosno gledam kad korisnik
pritisne <ENTER> i onda pokrenem akciju provjere unosa. U slucaju greske
pozovem ShowMessage na ekran koji ima OK buttom.
E sad ako na tom ShowMessage prozoru opet kliknem na ENTER on odradi OK
znaci kao da sam pritisnuo OK button, ali prenese ENTER taster u prethodni
TEdit i naravno opet ispise istu poruku. Mogu jedino da zatvorim taj prozor sa
porukom sa SPACE tasterom i sa mishem.
Kako zabraniti prenos tog Enter tastera? odnosno te akcije ?
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: TEdit - OnKeyUp 24.06.2002. u 22:50 · pre 296 meseci #2
Koristi onKeyPress. Kod ti je sledeci:

if Key = #13 then
begin
.
.
.
end;

#13 predstavlja taster Enter. Imas u Helpu vrednost svih karaktera, ako ti kojim slucajem zatreba neki drugi (Tab, Space ...).
Potpis
http://www.activecollab.com - Alat za upravljanje projektima
Re: TEdit - OnKeyUp 25.06.2002. u 04:00 · pre 296 meseci #3
OnKeyDown radi sve to lepo :)
Potpis
People who think they know everything tend to irritate those of us who do.
Re: TEdit - OnKeyUp 25.06.2002. u 12:36 · pre 296 meseci #4
Radi sa KeyDown :)
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: TEdit - OnKeyUp 22.07.2002. u 16:52 · pre 295 meseci #5
ovo je akcija 'OnKeyDown' na Teditu.Taj Tedit je stvoren za vreme rada programa
i ne znam mu Control Count'. Znaci, kad promenim nesto u njemu to treba da se odrazi na drugi Tedit, ciji je redni broj npr. za dva veci.
zasto ovo nece da radi?

procedure TForm1.AkoSePromeni(Sender:Tobject;var Key: Word;
Shift: TShiftState);
var k:integer;
begin
k:=Tedit(sender).ControlCount;
Tedit(controls[k+2]).text:='EEEE');
end;

tj....zasto je k stalno 0.....kako da dobijem redni broj Tedita koji je zatrazio obradu...





end;
Re: TEdit - OnKeyUp 22.07.2002. u 19:39 · pre 295 meseci #6
resio sam to sa

k:=Tedit(sender).taborder;

meni to izgleda nekako bezveze ali...radi.....
postoji li neki drugi nacin..........


isto tako... postoje li ugradjene funkcije za ispitivanje da li je uneti podatak float, integer.....
Re: TEdit - OnKeyUp 23.07.2002. u 03:54 · pre 295 meseci #7
Ako se ja dobro secam taborder je koja je po redu ta komponenta pri pritisku tab-a ne vidim kakve to veze ima sa ovim tvojim problemom.
Re: TEdit - OnKeyUp 23.07.2002. u 17:34 · pre 295 meseci #8
- Prvo moras da kreiras objekat, sto si pretpostavljam vec uradio;
- moras da podesis svojstva komponente prilikom kreiranja;

Posto tebi treba svojstvo Name (mora biti unikatno) da bi se referisao na kreiranu komponentu onda ga generisi. Ja sam malo modifikovao Cantuov kod iz knjige Mastering Delphi da bih to postigao.

uses
StdCtrls;

procedure TForm1.FormMouseDown(
Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Btn: TButton;
begin
Btn := TButton.Create (Self);
Btn.Parent := Self;
Btn.Left := X;
Btn.Top := Y;
Btn.Width := Btn.Width + 50;
Btn.Name := ('Btn' + IntToStr (Form1.ComponentCount));
end;


Ja se nadam da ovde nema nekih preteranih nejasnoca. Kod mene kod savrseno dobro radi.

isto tako... postoje li ugradjene funkcije za ispitivanje da li je uneti podatak float, integer.....

To mozes vrlo jednostavno da uradis pomocu izuzetka. Imas formular, jedan Edit i jedno dugme. Evo nesto malo koda...

procedure TForm1.Button1Click(Sender: TObject);
var
Test: Integer;
begin
try
Test := StrToInt (Edit1.Text);
except
on Exception do
raise Exception.Create ('Niste uneli ceo broj. bla bla');
end;
end;


Unutar try bloka kazujes mu sta da radi. Ukoliko dodje do izuzetka on ispisuje on radi ono sto je navedeno u bloku except i prekida dalje izvrsenje koda. Rad sa izuzecima je prilicno slozena materija (posto su i izuzeci klase sa svojim metodama, svojstvima itd.)

Pored ove funkcije za konverziju (StrToInt) najcesce ces koristiti StrToFloat, StrToDate, StrToTime i obrnute funkcije.
Potpis
http://www.activecollab.com - Alat za upravljanje projektima
Re: TEdit - OnKeyUp 24.07.2002. u 01:46 · pre 295 meseci #9
nismo se bas razumeli za prvi deo pitanja.ono navedeno sam vec odradio bio
ali...... no nije ni vazno....sredio sam na drugi nacin...

drugi deo ce vrlo koristiti........

vraticu se opet kad mi zatreba nesto :)
Re: TEdit - OnKeyUp 24.07.2002. u 10:34 · pre 295 meseci #10
ehhh.......

nesto nije u redu........

ne uspeva mi ono sto si kucao....
stalno se isto desava...kao da ne postoji....znaci program blokira ako se unesu pogresni podaci
napise da je nasao Exception iz klase Econverterror , da ne moze da prebaci u integer... i to je to

kucao sam i ovo


procedure TForm1.Button1Click(Sender: TObject);
var Test:integer;
begin
try
Test:=StrToInt(Edit1.Text);
except
on Exception do Edit2.text:='FFF';
on EconvertError do bla bla........ /ne vredi nista sto sam probao...
on EZeroDivide do edit2.Text:='FF';
on EOverflow do edit2.Text:='gggt';
on EMathError do edit2.Text:='rtzu';
else
edit2.text:='rtz';
end;

end;


edit2.text je tu samo provizorno naravno.... kucao sam i ono tvoje ali nista...

jednostavno samo mi treba nesto sto proveri za podatak da li je moguce prebaciti ga u broj...i napisati to nekako na ekranu (prozorcic, ili slicno) ne prekidati
program!.......

pa?
Re: TEdit - OnKeyUp 24.07.2002. u 11:30 · pre 295 meseci #11
u stvari...kao i da radi... u sledecem startovanju(kad ga odblokiram na "start" ispise sta treba u Edit2.text).... ali ja ne zelim da se program blokira.....samo da ispit da li je moguce i ako nije da napise poruku....a ako ne da nastavi dalje
Re: TEdit - OnKeyUp 24.07.2002. u 13:34 · pre 295 meseci #12
Ne moze da ne radi. Ti ne vidis odmah izuzetak ako starujes program sa F9 (u stvari, on te vrati u Delphe pa ti kaze da koristis StepOver). Nije greska. probaj da koristis kompajliranu verziju programa i videces da sve radi savrseno.

Postoje cake, s obzirom na to sto zelis da uradis.

Funkcije za konverziju rade s tim da pri nemogucnosti konverzije dovode do izuzetka i blokiraju dalje izvrsenje koda (sve dok ne uneses validnu vrednost). Posto ti zelis (cini mi se) da ispitas da li je unesen ceo ili realan broj, a zatim zelis da nastavis izvrsavanje bez obzira na rezultat onda ces morati da dupliras kod (napravices spagete) tako da u Except bloku radi nesto ako nije unesen ceo ili realan broj, a nakon izlaska iz Try-Except radi nesto sto koristi vrednost realnog ili celog broja. Pazi, Try-Except se u sustini ponasa slicno if-else if. Ako udje u Except bloka iz njega nema izlaska (tj. prekida izvrsenje kada dodje do end; koji zatvara Except blok).

Try-Except se ponasaju kao stabilne i odvojene programske jedinice (begin-end) tako da unutar njih mozes da otkucas xxx linija koda. Taj pristup ti nikako ne preporucujem (komplikovan je i tezak za odrzavanje), ali je on ponekad jedino resenje.

[Ovu poruku je menjao MarQs dana 24.07.2002 u 01:50 PM GMT]

[Ovu poruku je menjao MarQs dana 24.07.2002 u 01:55 PM GMT]
Potpis
http://www.activecollab.com - Alat za upravljanje projektima
Re: TEdit - OnKeyUp 24.07.2002. u 13:47 · pre 295 meseci #13
da naravno.... bas sam upravo provalio posle dva sata to...
i dosao da se izvinim na sopstvenoj gluposti....

Re: TEdit - OnKeyUp 25.07.2002. u 10:16 · pre 295 meseci #14
A da li je neko ovde cuo za funkciju Val()?
To se vuce jos od TurboPascala...i naravno da je ima i u Delphi-ju.

Rajko
Re: TEdit - OnKeyUp 25.07.2002. u 13:27 · pre 295 meseci #15
Val se koristi pri konverziji iz stringa u int. Sta ces uraditi ako recimo treba da sprecis deljenje nulom, I/O greske... ? Tu ti Val ne moze pomoci.

Napisao sam kreci tekst o izuzecima. Kompletan source za dva primera i Tutorial u doc formatu se nalaze na temi FAQ - Pascal / Delphi / Kylix
Potpis
http://www.activecollab.com - Alat za upravljanje projektima
Re: TEdit - OnKeyUp 26.07.2002. u 09:05 · pre 295 meseci #16
Ljudi, svaka cast na ulozenom trudu, ali ja svaki thread citam od pocetka - znaci, od prvog posta na dole. Covek je prvo pitao kako da spreci prenos Enter-a, zatim kako da konvertuje string u number; Exceptions bas i nije trazio. Mislim da svakome treba pomoci na najkraci (i najbolji) nacin

Rajko

P.S. A sto se tice Exceptions-a, mogao bih i ja da se raspisem da sve zveci, ali - sta cemo sa spamom...
Re: TEdit - OnKeyUp 29.07.2002. u 17:47 · pre 295 meseci #17
Ja se izvinjavam ako sam te na bilo koji nacin uvredio.

Ipak smatram da je Val davno prevazidjen i da se kvalitetnije resenje moze naci u funkcija StrToInt i izuzecima (za obradu eventualne greske).

PS. Raspisi se slobodno. Kamo srece da ima vise onih koji bi to radili...
Potpis
http://www.activecollab.com - Alat za upravljanje projektima
Re: TEdit - OnKeyUp 07.08.2002. u 13:58 · pre 294 meseci #18
mozda sam malo zakasnio al' ipak:

ispratih celu pricu i mislim da je odgovor OK samo zbog cega
kontrolu unetog vrsiti na OnKeyDown kad postoji
OnExit event.

OnKeyDown ne odgovara i zbog cinjenice da zavrsetak unosa moze biti i
klikom misa na neki od dugmica na formi.

Znaci OnExit i Raise ako nesto nije u redu. Raise ce vratiti fokus na trenutnu TEdit
komponentu.

Re: TEdit - OnKeyUp 10.08.2002. u 23:17 · pre 294 meseci #19
Ako stavis jedan ShowMessage u OnChange videces zbog cega nije dobro
koristiti taj event.
Moj izbor je OnExit.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme