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.
May the force be with you!
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
  yazıcı için form tasarımı yapmak. Bay_Y 4 151 Dün, Saat: 16:01
Son Yorum: engerex
  form içindekiler arsl01 2 61 16-07-2018, Saat: 14:40
Son Yorum: arsl01
  Form.create arsl01 12 223 03-07-2018, Saat: 14:27
Son Yorum: arsl01
  [ÇÖZÜLDÜ]-Başka Uygulamadaki MDIChild Form Handle Alma hi_selamlar 9 221 29-06-2018, Saat: 09:52
Son Yorum: hi_selamlar
  İki Application Clasından iki Farklı Form Create Etme witalihakko 2 124 01-06-2018, Saat: 12:17
Son Yorum: Tuğrul HELVACI



Konuyu Okuyanlar: 1 Ziyaretçi