form donuyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

form donuyor

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar,

PERSONEL_KAYIT die ekranım var aşağıdaki kod ile form içinde form açıyorum bir sorun yok.

formu açıp başka bir yerden showmodal dediğimde form yine açılıyor tab tuşu ile ilerliyor ama mouse ile müdehale edemiyorum sanki donmuş gibi oluyor.

teşekkürler


Kod: Tümünü seç

procedure TANA_SAYFA.PersonelEkle1Click(Sender: TObject);
  var
   PENCERE : TRect;
begin  
      Windows.SetParent(PERSONEL_KAYIT.Handle, ANA_SAYFA.pnlANA_PANEL.Handle);
      GetWindowRect(PERSONEL_LISTESI_PENCERE.Handle, PENCERE);
      PERSONEL_KAYIT.Show;
      GetWindowRect(PERSONEL_KAYIT.Handle, PENCERE);
end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: form donuyor

Mesaj gönderen erdogan_ozkaya »

BİR ÖNERİSİ OLAN VARMI ?

TEŞEKKÜRLER
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: form donuyor

Mesaj gönderen Kuri_YJ »

Selamlar,

Neden böyle ilginç bir şekilde Formları Show ediyorsunuz? Aşağıda bizim kullandığımız bir şekli ile FORM çağırma ve ShowModal yapma işlemi var. Form nesnesinin sınıf tanımında Public kısmına Execute diye bir fonksiyon ekliyoruz. Aşağıda nasıl yaptığımız var. Daha sonra ilgili form lazım olduğunda (örneğe göre) TfrmListIntervention.Execute(1, 2) şeklinde çağırıyoruz. Bu Class Procedure veya Class Function'lar, nesnenin kendisi Create edilmemiş olsa bile çağrılabiliyor ve ilgili procedure veya fonksiyon içinde biz nesneyi yaratıp ShowModal ettiriyoruz.

Kolay Gelsin

Kod: Tümünü seç


.
.
.
  public
    { Public declarations }
    class procedure Execute(aCampaignID, aCallListID : integer ; aCallListName : string) ;
    procedure PrepareGrid;
  end;


.
.
.

class procedure TfrmListIntervention.Execute(aCampaignID, aCallListID : integer ; aCallListName : string) ;
begin
  frmListIntervention := TfrmListIntervention.Create(Application);
  frmListIntervention.grbList.Caption := 'Müdahale Edilecek Liste : '+aCallListName ;

  with frmListIntervention do
  begin
    FCampaignID := aCampaignID ;
    FCallListID := aCallListID ;

    PrepareGrid ;

    ShowModal ;

  end;

end;

Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: form donuyor

Mesaj gönderen erdogan_ozkaya »

hocam bu kısmı anlayamadım ?

frmListIntervention ?

acaba bir örnek atabilirmsimin ?

çok teşekkürler
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: form donuyor

Mesaj gönderen Kuri_YJ »

Selamlar,

Örneği zaten yazmıştım ama tam source olarak Form2 adında bir Form oluşturdum, onun source'una da aşağıdakini yazdım.

Kod: Tümünü seç

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm2 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    class procedure Execute ;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

class procedure TForm2.Execute;
begin
  Form2 := TForm2.Create(Application);
  //
  with Form2 do
  begin
    // Burada Form2 açılmadan önce yapmak istediğiniz şeyleri yapabilirsiniz
    ShowModal ; // ShowModal olarak Form2'yi göster.
  end;
end;

end.

Form1'den Form2'yi çağırmak isterseniz. Şunu yapmanız lazım,

Kod: Tümünü seç

	TForm2.Execute ;
Bu kadar.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: form donuyor

Mesaj gönderen erdogan_ozkaya »

Ya hocam ben anlayamadım valla ( :( çok üzgünüm ) yada ben anlatamadım form içinde açmasını istiyorum ekte bir örnek var müsait olduğunuzda bakmanız mümkün mü ?

önce show diyince bir sıkıntı yok kapat aç bir sıkıntı yok show diyipte showmodal diyince form donuyor :(

Teşekkürler
Dosya ekleri
ORNEK.rar
(9.38 KiB) 58 kere indirildi
Kullanıcı avatarı
badkursat
Üye
Mesajlar: 84
Kayıt: 03 Mar 2014 08:58

Re: form donuyor

Mesaj gönderen badkursat »

Gönderdiğin örneği şöyle değiştirip Kullanabilirsin.

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,Unit2;

type
  TForm1 = class(TForm)
    pnl1: TPanel;
    btn1: TButton;
    btn2: TButton;
    procedure btn2Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  AnotherForm : TForm2;

implementation

{$R *.dfm}

procedure TForm1.btn2Click(Sender: TObject);
 var
   r : TRect;
begin
  AnotherForm := TForm2.Create(Self);
  AnotherForm.Parent := pnl1;
  AnotherForm.Show;
     { Windows.SetParent(Form2.Handle,  pnl1.Handle);
      GetWindowRect(Form2.Handle, r);
      Form2.Show;    }
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  AnotherForm := TForm2.Create(Self);
  AnotherForm.ShowModal;
  //Form2.ShowModal;
end;

end.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: form donuyor

Mesaj gönderen erdogan_ozkaya »

Hocam Çok teşekkür ederim ama yine ekran takılıyor, showmodal yapınca sorun yok, show yapınca da açılıyor ama form üzerindeki nesnelere tıklayınca takılıyor sağ klik çalışıyor çalışmıyor :(

ilginiz için teşekkür ederim.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: form donuyor

Mesaj gönderen Kuri_YJ »

Selamlar,

Siz bir formun içinde bir başka form mu açmak istiyorsunuz, yoksa Show edilmiş bir formdan, istenildiği anda bir başka formu ShowModal mı çağırmak istiyorsunuz?

Show ile ShowModal arasındaki farkı biliyor musunuz?
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: form donuyor

Mesaj gönderen erdogan_ozkaya »

hocam gönderdiğiniz kod istediğim formlar çalışıyor ama showmodal diyip tekrar show yapınca formu formdaki nesnelere takılıyor :( ekte göndermiştim takıldığını görebilirsiniz. :(

teşekkürler
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: form donuyor

Mesaj gönderen Kuri_YJ »

Selamlar,

Bence sen sorununu tam olarak anlatamıyorsun. Showmodal dediğin form hangisi, ardından hangi formu Show ediyorsun? Yukarıda yazdığım konuyu irdeledin mi? Yani Show ile ShowModal arasındaki farkların tam olarak neler olduğunu biliyor musun?
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: form donuyor

Mesaj gönderen mrmarman »

Sorununuzu özetleyim.
(1) Projenin Form1'i ilk çalıştığında en TOP form değil mi ? EVET
(2) Siz Form2'yi ShowModal ile çağırınca en TOP form Form2 olmuyor mu ? EVET
(3) Siz en TOP formu TOP olmayan bir formun parçası panel'e SetParent ile bağladığınızda TOP olmaktan çıkmıyor mu ? ÇIKIYOR!

Şimdi TOP olmaktan çıkan form yerini kime bıraksın. Bırakamaz çünkü sen bunu organize etmemişsin.

Yapacağın iş ne yaparsan yap daima FORM1'e TOP olma özelliğini iade etmek.

Form2 'nin OnActivate eventine şunu ekle

Kod: Tümünü seç

  EnableWindow(Application.MainForm.Handle, True);
Çünkü formların ShowModal edildiği zaman geriye kalan tüm formlar DisableTaskWindows ile kıyıma girer, Modal edilenden başka ortada TOP form kalmaz. :idea:
Resim
Resim ....Resim
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: form donuyor

Mesaj gönderen erdogan_ozkaya »

Merhaba,

hocam verdiğini kod doğru ama ben showmodal yapmak istiyorum yani önceki pencerelerin pasif hale gelmeli.
yani açılan formu aktif etmek istemiyorum. (EnableWindow(Application.MainForm.Handle, True); )

A - Anasayfadan kayıt ekle dediğimde bir sıkıntı yok (form2.show)

B - kayıtları listelerken liste üzerinden kayıt ekle penceresine gönderip düzelttiriyorum (form2.showmodal) yine sıkıntı yok.


A - B YAPINCA BİR SIKINTI YOK
B - A YAPINCA BİR SIKINTI YOK

A - B - A YAPINCA FORM ÜZERİNDEKİ NESNELER TIKLANLANMIYOR DONUYOR

ekteki formda zaten var :)

ilgi ve alakanız için teşekkür ederim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: form donuyor

Mesaj gönderen mrmarman »

ikinci Formun kimyasını dolayısı ile ana formun da kimyasını bozuyorsun. FREE etmediğin sürece ayağına dolaşacaktır ama aşağıdaki şekilde işini görürsen ne ala...

Öncelikle bir önceki mesajımda belirttiğim ikinci formun OnActivate eklediğin satırı sil karışıklık yapmasın

Kod: Tümünü seç

procedure TForm1.btn1Click(Sender: TObject);
begin
  if NOT Form2.Showing
  then TForm2.Create(Self).ShowModal
  else begin
      Form2.Close;
      TForm2.Create(Self).ShowModal;
    end;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Re: form donuyor

Mesaj gönderen Opt2000 »

Merhaba,

Formu panel içinde gösterirken Parent değiştiriyorsunuz. Daha sonra Parent'i eski haline getirmeden ShowModal yapıyorsunuz. ShowModal yaptığınızda formun arkasında kalan bütün pencereler disable gibi hareket ediyor. Parent disable gibi hareket ederse child bileşenler de disable gibi hareket eder. Asıl problem bundan kaynaklanıyor.

İlk akla iki çözüm var:
1. Form2'yi gerektiği zaman Create etmek ve işi bitince silmek. @mrmarman da sanırım bunu öneriyor. Benim tercihim de bu olurdu (Ayrıca ben bir formu panel için göstermeye çalışmazdım. Onun yerine bir frame hazırlayıp, gerekiyorsa bir formda, gerekiyorsa bir panel'de frame açardım).

2. Form2'yi modal olarak göstermeden önce parent'i adam etmek. Form2.ShowModal kodundan önce aşağıdaki satırı yazın:

Kod: Tümünü seç

Windows.SetParent(Form2.Handle, 0);
Asıl çözüm bu kodu yazmak değil, Form2'nin gerçek parent'ini takip edip onu kullanmak. Ama sorunu tespit etmeniz açısından bu kadarı yeterli.

İyi çalışmalar
Cevapla