Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Form kapanmıyor
#1
Merhaba;

Hatırlatma programı yapıyorum, fakat popup form ekranını image (Form3.Close; ) ile kapatmak istediğimde kapanmıyor,  (Form3.Free; ) ile kapatma istediğimde ise resimdeki uyarı hatasını alıyorum bunun sebebinedir?

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol

Databeseyi kontrol:
 
 
procedure DBKontrol.Execute;
begin
  Adet := 0;
  Okuma := 'Beklemede';
  with Form1, Genel do
    try
      Connection := FDConnecMain;
      Close;
      SQL.Clear;
      SQL.Add('Select Count(*) As ID, DURUM From HATIRLAT');
      Prepared := True;
      Open;
      Adet := FieldByName('ID').AsInteger;
      Okuma := FieldByName('DURUM').AsString;
      if (Adet < 1) or (Okuma = 'Okundu') then
      begin
        TimerKontrol.Enabled := False;
      end
      else
      begin
        ControlDateTime := Now;
        Connection := FDConnecMain;
        Close;
        SQL.Clear;
        SQL.Add('Select Count(*) As ID From HATIRLAT Where TARIH <=:Tarih And Saat <=:Saat And DURUM=''Okunmadı''');
        Params[0].AsDate := DateOf(ControlDateTime);
        Params[1].AsTime := TimeOf(ControlDateTime);
        Prepared := True;
        Open;
        if Not IsEmpty then
        begin
          Kactane := FieldByName('ID').AsInteger;
          Form3.HTBilgilendirme.Caption := IntToStr(Kactane) +
            ' Yeni hatırlamanız var';
          Form3.Show;
          Form3 := TForm3.Create(Nil);
          Application.ProcessMessages;
        end;
      end;
    finally
      Genel.Close;
      TimerKontrol.Interval := 60000;
      TimerKontrol.Enabled := True;
    end;
end;

Ekranın sağ tarafında popup menü:
procedure TForm3.FormShow(Sender: TObject);
begin
  Form3.Left := Screen.Width - 255;
  Form3.Top := Screen.Height - 145;
  AnimateWindow(Form3.Handle, 200, AW_VER_NEGATIVE or AW_SLIDE);
end;


Form popup close:
procedure TForm3.ImageCloseClick(Sender: TObject);
begin
  Form3.Free;
  Form3.Close;
end;
Hayat bazen güzel olabiliyor.
Cevapla
#2
Merhaba,
Form3'ü kapatmak yerine; kullanmış olduğunuz Windows API metoduna AW_HIDE parametresini göndererek, penceresinin gizlenmesini sağlayabilirsiniz.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#3
(08-11-2017, Saat: 13:38)Dostk Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba;

Hatırlatma programı yapıyorum, fakat popup form ekranını image (Form3.Close; ) ile kapatmak istediğimde kapanmıyor,  (Form3.Free; ) ile kapatma istediğimde ise resimdeki uyarı hatasını alıyorum bunun sebebinedir?

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol

Databeseyi kontrol:
 
 
procedure DBKontrol.Execute;
begin
  Adet := 0;
  Okuma := 'Beklemede';
  with Form1, Genel do
    try
      Connection := FDConnecMain;
      Close;
      SQL.Clear;
      SQL.Add('Select Count(*) As ID, DURUM From HATIRLAT');
      Prepared := True;
      Open;
      Adet := FieldByName('ID').AsInteger;
      Okuma := FieldByName('DURUM').AsString;
      if (Adet < 1) or (Okuma = 'Okundu') then
      begin
        TimerKontrol.Enabled := False;
      end
      else
      begin
        ControlDateTime := Now;
        Connection := FDConnecMain;
        Close;
        SQL.Clear;
        SQL.Add('Select Count(*) As ID From HATIRLAT Where TARIH <=:Tarih And Saat <=:Saat And DURUM=''Okunmadı''');
        Params[0].AsDate := DateOf(ControlDateTime);
        Params[1].AsTime := TimeOf(ControlDateTime);
        Prepared := True;
        Open;
        if Not IsEmpty then
        begin
          Kactane := FieldByName('ID').AsInteger;
          Form3.HTBilgilendirme.Caption := IntToStr(Kactane) +
            ' Yeni hatırlamanız var';
          Form3.Show;
          Form3 := TForm3.Create(Nil);
          Application.ProcessMessages;
        end;
      end;
    finally
      Genel.Close;
      TimerKontrol.Interval := 60000;
      TimerKontrol.Enabled := True;
    end;
end;

Ekranın sağ tarafında popup menü:
procedure TForm3.FormShow(Sender: TObject);
begin
  Form3.Left := Screen.Width - 255;
  Form3.Top := Screen.Height - 145;
  AnimateWindow(Form3.Handle, 200, AW_VER_NEGATIVE or AW_SLIDE);
end;


Form popup close:
procedure TForm3.ImageCloseClick(Sender: TObject);
begin
  Form3.Free;
  Form3.Close;
end;

Sizce de aşağıdaki kod garip değil mi ?

Alıntı:
procedure TForm3.ImageCloseClick(Sender: TObject);
begin
  Form3.Free;
  Form3.Close;
end;

Ancak ilgili form'un OnPaint olayında OnClose olayında ya da form üzerinde bulunması muhtemel bir Timer'da ne yaptığınıza bağlı olarak hatanın nedeni değişiklik arz edebilir.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#4
birkaç şey gözüme çarptı.
1-Formu create etmeden nasıl show ediyorsunuz?
2- Formun onclose olayına "Action:=caFree; Form3:=Nil;" şeklinde kod kullanın..

Genelde bu tür hatalar ve onclose daki accessviolation hatası, formda herhangi bir şeyin destroy edilmeden kapanmasına çalışılması durumunda verilir.
WWW
Cevapla
#5
Hata penceresi için yazdığım basit kod örnek teşkil etsin.


3pgLm4.png

Hata Formu,
var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
 Uzak.Response := False;
 Close;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
 Uzak.Response := True;
 Close;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
 Form2 := nil;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
 Timer1.Enabled := True;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
 try
   if ProgressBar1.Position = ProgressBar1.Max then
     Button2Click(nil);
   ProgressBar1.Position := ProgressBar1.Position + 1;
 except
   on E: Exception do
     ShowMessage(E.Message);
 end;
end;

Formu açma,
procedure TForm10.Hata(detay: String; Btn1: String = 'Evet';Btn2: String = 'Hayır');
var
 HataForm: TForm2;
begin
 HataForm := TForm2.Create(self);
 try
   HataForm.detay.Lines.Add(detay);
   HataForm.Button1.Caption := Btn2;
   HataForm.Button2.Caption := Btn1;
   HataForm.ShowModal;
 finally
   HataForm.Free
 end;
end;
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#6
Form3.Free;

Form3.Close;

Yerine

Form3.Close;

Form3.Free;

Şeklinde deneyiniz;

Üst taraflarda gördüğüm önce show sonra create olayı ilgincime gitti. Çalışıyorsa bir şey diyemem ama, yerlerinin değişmesi sağlıklı olacaktır.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Cevapla
#7
Cevaplar için teşekkür ederim.
Hayat bazen güzel olabiliyor.
Cevapla
#8
(09-11-2017, Saat: 18:56)Dostk Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlCevaplar için teşekkür ederim.

Forumumuzda teşekkür etmenin bir başka alternatifi de "Rep Puanı Vermek"tir. Kullanmanızı tavsiye ederim Wink

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
There's no place like 127.0.0.1
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Form create h.k (Çözüldü ) cinarbil 12 265 25-01-2018, Saat: 12:09
Son Yorum: cinarbil
  thread form donma sorunsalı seci20 3 136 22-01-2018, Saat: 09:42
Son Yorum: edo
  Çalışma anında form tasarımı boreas 4 220 10-01-2018, Saat: 17:10
Son Yorum: boreas
  Webbrowser form element item adları bkantur 3 108 16-12-2017, Saat: 22:30
Son Yorum: SimaWB
  FastReport Form'dan tarih bilgisi almak yhackup 2 143 20-11-2017, Saat: 10:42
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi