Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Provera da li je kliknuto na close (X) dugme forme

[es] :: Pascal / Delphi / Kylix :: Provera da li je kliknuto na close (X) dugme forme

[ Pregleda: 1740 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
...148.91.adsl.dyn.beotel.net.



+18 Profil

icon Provera da li je kliknuto na close (X) dugme forme26.08.2010. u 17:48 - pre 166 meseci
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!!!
 
Odgovor na temu

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
...148.91.adsl.dyn.beotel.net.



+18 Profil

icon Re: Provera da li je kliknuto na close (X) dugme forme26.08.2010. u 18:39 - pre 166 meseci
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 :)
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Provera da li je kliknuto na close (X) dugme forme26.08.2010. u 19:29 - pre 166 meseci
> 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.
 
Odgovor na temu

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
...148.91.adsl.dyn.beotel.net.



+18 Profil

icon Re: Provera da li je kliknuto na close (X) dugme forme26.08.2010. u 20:00 - pre 166 meseci
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???

 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Provera da li je kliknuto na close (X) dugme forme26.08.2010. u 20:15 - pre 166 meseci
> 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.
 
Odgovor na temu

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
...148.91.adsl.dyn.beotel.net.



+18 Profil

icon Re: Provera da li je kliknuto na close (X) dugme forme26.08.2010. u 20:34 - pre 166 meseci
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....
 
Odgovor na temu

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
...148.91.adsl.dyn.beotel.net.



+18 Profil

icon Re: Provera da li je kliknuto na close (X) dugme forme27.08.2010. u 08:09 - pre 166 meseci
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!
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Provera da li je kliknuto na close (X) dugme forme27.08.2010. u 13:17 - pre 166 meseci
> 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.
 
Odgovor na temu

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
*.bitinfo.rs.



+18 Profil

icon Re: Provera da li je kliknuto na close (X) dugme forme27.08.2010. u 13:27 - pre 166 meseci
Da u pravu si...hvala za sugestije!
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Provera da li je kliknuto na close (X) dugme forme

[ Pregleda: 1740 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.