Novo

Forum kao aplikacija na telefonu

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

  • 8 odgovora
  • 2.460 pregleda

Najnovija ↓

Provera da li je kliknuto na close (X) dugme forme 26.08.2010. u 18:48 · pre 197 meseci #1
Pozdrav svima...

Po uzoru na
Login forma

napravio sam login formu...i malo je modifikovao.

Interesuje me kako proveriti da li je pritisnuto dugme za zatvaranje forme (gornji desni ugao X) ???

Posto sam prethodni primer modifikovao ovako:

Code:

var
 i:integer;
begin
  i:=1;
  zatvori:=false;
  repeat
  if TfrmLogin.DoLogin then
  begin
    Application.Initialize;
    //Application.MainFormOnTaskbar := True;
    Application.CreateForm(TfrmGlavna, frmGlavna);
    Application.Run;
  end
  else
    ShowMessage('Login name or password incorrect. Attempt: '+IntToStr(3-i));
    i:=i+1;
  until i>3;
end.


To znaci da prilikom logovanja korisnik ima sansu da tri puta pogresi nakon cega se zatvara aplikacija...
E sad posto ne znam kako da proverim da li je korisnik kliknuo na close forme, onda se i posle klika na dugme X prikazuje poruka!

Ili mozda neko ima bolju ideju za login formu???

Hvala!!!
Re: Provera da li je kliknuto na close (X) dugme forme 26.08.2010. u 19:39 · pre 197 meseci #2
Evo jos jedne ideje deluje mi mnogo jednostavnije.....

Postaviti login formu u autocreate.

Na nju staviti dugme npr. Login i Cancel.

Code:

procedure TfrmLogin.btnIzlazClick(Sender: TObject);
begin
    Close;
end;

procedure TfrmLogin.btnLoginClick(Sender: TObject);
var
  frmMain: TfrmGlavna;
begin
    IBQuery1.SQL.Text:='select * from login where korisnicko=:kor and lozinka=:loz';
    IBQuery1.ParamByName('kor').Value:= edKorisnicko.Text;
    IBQuery1.ParamByName('loz').Value:= edLozinka.Text;
    IBQuery1.Open;
    if not IBQuery1.IsEmpty then begin
      frmLogin.Hide;
      frmMain:=TfrmGlavna.Create(nil);
      frmMain.ShowModal;
      frmMain.Free;
      frmLogin.Close;
    end
    else
    begin
      edKorisnicko.Clear;
      edLozinka.Clear;
      ShowMessage('Pokusajte ponovo');
    end;

end;


Ako je ikome ovo pomoglo nek javi :)
Re: Provera da li je kliknuto na close (X) dugme forme 26.08.2010. u 20:29 · pre 197 meseci #3
> napravio sam login formu...i malo je modifikovao.
> Interesuje me kako proveriti da li je pritisnuto dugme za zatvaranje forme (gornji desni ugao X) ???

Recimo handlovanjem WM_SYSCOMMAND u toj formi, ali to tebi nije ni potrebno.

> if TfrmLogin.DoLogin then
> begin
> To znaci da prilikom logovanja korisnik ima sansu da tri puta pogresi nakon cega se zatvara aplikacija...
> E sad posto ne znam kako da proverim da li je korisnik kliknuo na close forme, onda se i posle klika na dugme X prikazuje poruka!

DoLogin metoda treba da vraća True ako i samo ako je login uspešno prošao, u svim drugim slučajevima (samim tim i prostim zatvaranjem forme) vratiće False.
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: Provera da li je kliknuto na close (X) dugme forme 26.08.2010. u 21:00 · pre 197 meseci #4
Citat:

DoLogin metoda treba da vraća True ako i samo ako je login uspešno prošao, u svim drugim slučajevima (samim tim i prostim zatvaranjem forme) vratiće False.


Tacno, ali posto sam uradio ovako:

Code:

class function TfrmLogin.DoLogin:bool;
begin

with TfrmLogin.Create(nil) do
   try
     Result := ShowModal = mrOk;
   finally
     Free;
   end;
end;


onda bas i ne radi kako treba...

Kad kliknem direktno na X, trebalo bi da se zatvori forma i prekine repeat petlja bez ispisa poruke, a ovde sve dok tri puta ne kliknem na close ne zatvara formu...i uvek ispisuje poruku.

Sto znaci da funkcija u principu radi dobro samo bi trebalo malo izmeniti glavni program???

Re: Provera da li je kliknuto na close (X) dugme forme 26.08.2010. u 21:15 · pre 197 meseci #5
> Kad kliknem direktno na X, trebalo bi da se zatvori forma i prekine repeat petlja bez ispisa poruke, a ovde sve dok tri puta ne kliknem na
> close ne zatvara formu...i uvek ispisuje poruku.
> Sto znaci da funkcija u principu radi dobro samo bi trebalo malo izmeniti glavni program???

Tek sam sada video da si repeat ubacio u dpr, odakle ti samo takva ideja ;) Repeat i sve vezano za login treba da bude u login formi, dakle kada korisnik unese name/pass i klikne na ok dugme, ti proveriš da li je ispravna šifra, ako nije povećaš brojač za jedan, eventualno izdaš neku poruku, izbrišeš uneto i čekaš korisnika. Ako je prekoračen broj pokušaja samo pozoveš Close.
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: Provera da li je kliknuto na close (X) dugme forme 26.08.2010. u 21:34 · pre 197 meseci #6
Citat:
Tek sam sada video da si repeat ubacio u dpr, odakle ti samo takva ideja ;)


Ha, ha...svasta coveku pada na pamet kad radi ceo dan...

Ne vredi, pokusao sam da uradim po tvom predlogu ali ne ide...
Probacu sutra, pa se cujemo....Hvala u svakom slucaju....
Re: Provera da li je kliknuto na close (X) dugme forme 27.08.2010. u 09:09 · pre 197 meseci #7
Pozdrav...evo mog resenja :)

Ovo je kod za login button
Code:

var
  nema: boolean;
begin
  IBQuery1.SQL.Text:='select * from login';
  IBQuery1.Open;
  nema:= false;
  brojac:=brojac+1;
  while not IBQuery1.Eof do begin
    if (edKorisnicko.Text=IBQuery1.FieldByName('korisnicko').AsString) and
       (edLozinka.Text=IBQuery1.FieldByName('lozinka').AsString) then
    begin
      ModalResult := mrOK;
      nema:=false;
      break;
    end
    else
    begin
     //ModalResult := mrAbort;
     nema:= true;
   end;
  IBQuery1.Next;
  end;
   if (nema=true) and IBQuery1.Eof then
   begin
      ShowMessage('Morate uneti validno korisnicko ime i lozinku!'+#10+
                  'Imate jos '+IntTostr(3-brojac)+' pokusaja za logovanje');
   end;
  IBQuery1.Close;
  CloseForm;// procedura koja proverava globalnu promenljivu brojac, ako je brojac=3 zarvara se aplikacija
end;


Pretpostavljam da postoji elegantnije resenje :)

savkic, ako imas vremena iskomentarisi, a zanima me i ova provera iz naslova teme kako se radi.
Hvala!
Re: Provera da li je kliknuto na close (X) dugme forme 27.08.2010. u 14:17 · pre 197 meseci #8
> IBQuery1.SQL.Text:='select * from login';
Code:

WHERE
  USER_NAME = 'UserName' AND 
  PASS           = 'Pass';

Lakše je dodati i WHERE sekciju kako bi se odmah izdvojio samo onaj slog koji odgovara unetom korisniku.

> brojac:=brojac+1;

Ustaljena konvencija je da se poljima (promenljivama) klase dodeljuje F kao prefiks. Dakle, FBrojac.

> if (nema=true)

Dovoljno je, if Nema then ...

> a zanima me i ova provera iz naslova teme kako se radi.

Pogledaj http://www.elitesecurity.org/t391791-0#2524414, to je za minimizovanje forme, ti treba provera za SC_CLOSE.
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