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?

ZO5rlz.png

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.
Cevapla
#3
(08-11-2017, Saat: 13:38)Dostk Adlı Kullanıcıdan Alıntı: 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?

ZO5rlz.png

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.
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;
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.
kisisel_logo_dark.png
WWW
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ı: Cevaplar 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

Puanların Önemi Hakkında...
There's no place like 127.0.0.1
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Optik form kodlama baloglurecep 8 1.189 16-11-2023, Saat: 16:23
Son Yorum: COMMANDX
Sad Tabsheet içinde Form Create, Close olayları YILDIRIMBEY 0 220 24-08-2023, Saat: 17:26
Son Yorum: YILDIRIMBEY
  Runtime Form Oluşturmak ermanispir@gmail.com 5 1.077 02-08-2023, Saat: 09:31
Son Yorum: SimaWB
  mdi child form sorunu goabdullah 3 3.139 20-03-2023, Saat: 21:37
Son Yorum: CesuR
Question MdiChild Form İçin Create Helper? YILDIRIMBEY 1 593 10-10-2022, Saat: 10:53
Son Yorum: YILDIRIMBEY



Konuyu Okuyanlar: 1 Ziyaretçi