Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 10 odgovora
  • 5.042 pregleda

Najnovija ↓

Prelazak s jednog na drugi TEdit? 08.09.2006. u 14:48 · pre 245 meseci #1
Imam dve TEdit komponente. Na osnovu:
Code:

...
 if (Key=VK_RETURN) then Edit2.SetFocus;//OnKeyDown za TEdit1
...

postavlja se fokus na TEdit2. Kako bih odradio suprotno, znaci, kad na osnovu navedenog koda predjem na drugi TEdit, da se isto pritiskom tastera vratim na prethodni TEdit, ukoliko zelim nesto promeniti? Npr. pritiskom SHIFT+ENTER?

Hvala unapred.
Re: Prelazak s jednog na drugi TEdit? 08.09.2006. u 16:33 · pre 245 meseci #2
> postavlja se fokus na TEdit2. Kako bih odradio suprotno, znaci, kad na osnovu navedenog koda predjem na drugi TEdit, da se isto
> pritiskom tastera vratim na prethodni TEdit, ukoliko zelim nesto promeniti? Npr. pritiskom SHIFT+ENTER?

Code:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_RETURN then
    if ssShift in Shift then
      Edit1.SetFocus
    else
      Edit2.SetFocus;
end;


Ali ja bih tebi preporučio ovakav pristup:
Code:

  case Key of
    VK_RETURN, VK_DOWN: SelectNext(ActiveControl, True, True);
    VK_UP: SelectNext(ActiveControl, False, True);
  end;


što će ti doneti nesmetano kretanje po kontrolama na formi u oba smera.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Prelazak s jednog na drugi TEdit? 10.01.2007. u 17:55 · pre 241 mesec #4
Code:

  case Key of
    VK_RETURN, VK_DOWN: SelectNext(ActiveControl, True, True);
    VK_UP: SelectNext(ActiveControl, False, True);
  end;

Probao sam ovo ispisati kao proceduru:
Code:

procedure TForm1.FokusKontrola;
var 
  Key: Word;
begin
  case Key of
    VK_RETURN, VK_DOWN: SelectNext(ActiveControl, True, True);
    VK_UP: SelectNext(ActiveControl, False, True);
  end;
end;

da ne bi za svaki edit ponavljao se kod nego samo, OnKeyDown:
Code:

...
 if Key = VK_RETURN then
  FokusKontrola;
...

Medjutim, to tako ne moze. Da li je neko resio ovaj problem, i kako?
Hteo bih samo za TEdit -e, ponavljati proceduru, a ne ceo kod.
Re: Prelazak s jednog na drugi TEdit? 10.01.2007. u 18:42 · pre 241 mesec #5
> Medjutim, to tako ne moze. Da li je neko resio ovaj problem, i kako?
> Hteo bih samo za TEdit -e, ponavljati proceduru, a ne ceo kod.

Naravno da ne može :) Key nije magična kompajler promenljiva koja dobija virtuelni kod pritisnutog tastara, kako si napisao metodu FokusKontrola, Key ima nedefinisanu vrednost. Redeklariši FokusKontrola metodu tako da prima jedan parametar AKey ili Key, i pri pozivu prosledi vrednost virtuelnog tastera.
Međutim, ne vidim da ova redirekcija donosi neko poboljšanje ili olakšanje u odnosu na zadržavanje logike u event handleru, napravi jedan event handler i svim edit kontrolama dodeli taj isti. Ili napravi naslednika Edit kontrole koji će imati taj kod inkorporiran u sebi.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Prelazak s jednog na drugi TEdit? 10.01.2007. u 19:53 · pre 241 mesec #6
Citat:
napravi jedan event handler i svim edit kontrolama dodeli taj isti. Ili napravi naslednika Edit kontrole koji će imati taj kod inkorporiran u sebi.

Ovo mi delije ono pravo.
Re: Prelazak s jednog na drugi TEdit? 10.01.2007. u 20:10 · pre 241 mesec #7
Imam ovako primer:
Code:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Sender = Button1 then
   ShowMessage('Button1 clicked!')
  else
   ShowMessage('??? clicked!') ;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   Button1Click(Button2) ;
   {this will result in: '??? clicked!'}
end;

Kako bih to odradio za TEdit i ovaj moj slucaj? :(
Re: Prelazak s jednog na drugi TEdit? 10.01.2007. u 20:23 · pre 241 mesec #8
> Kako bih to odradio za TEdit i ovaj moj slucaj?

U Object inspectoru, na Events jezičku iz padajuće liste za OnKeyDown handler izaberi već postojeći handler.
Uzgred, toplo ti preporučujem nabavku neke Delphi knjige.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Prelazak s jednog na drugi TEdit? 10.01.2007. u 21:27 · pre 241 mesec #9
savkic
Hvala, ukapirao sam i pre tvog poslednjeg odgovora, samo sam vecerao, tusirao se i nisam stigao javiti, tj. preduhitrio si me.

Da, citam Delphi 4 za 21 dan, tacnije upoznajem se sa delphijem. Znam da je Vama iskusnijim programerima ovo sad smesno, ali, setite se svi ste poceli od nule.

Hvala jos jednom.
Re: Prelazak s jednog na drugi TEdit? 10.01.2007. u 23:54 · pre 241 mesec #10
Citat:
citam Delphi 4 za 21 dan,


U toj knjizi ces naci jedno jako elegantno resenje (mada je i gore navedeno resenje zadovoljavajuce):


Code:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = Char(VK_RETURN) then begin
    Key := #0;  //Ovo sluzi da se ne cuje iritirajuci zvuk
    PostMessage(Handle,WM_NEXTDLGCTL,0,0);
  end;
end;



Detaljnija objasnjenja potrazi u helpu vezano za poruku WM_NEXTDLGCTL.
Mozes se sa njom kretati i napred i nazad, a takodje i selektovati odredjenu komponentu.
Potpis
Inspiration exists, but it has to find us working.
Re: Prelazak s jednog na drugi TEdit? 11.01.2007. u 01:52 · pre 241 mesec #11
> U toj knjizi ces naci jedno jako elegantno resenje (mada je i gore navedeno resenje zadovoljavajuce):
> PostMessage(Handle,WM_NEXTDLGCTL,0,0);

WM_NEXTDLGCTL ako se koristi za prelazak na prethodnu ili narednu kontrolu u VCLu svodi na SelectNext. Ako se cilja određena kontrola onda se svodi na SetFocus API funkciju. Deluje mi da je efikasnije i pre svega jasnije koristiti SelectNext ili Control.SetFocus.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme