form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 8
- Kayıt: 10 Ağu 2010 10:59
form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
Delphi 7 ile Yazdığım bir programda form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
win 8 ve win 10 daki son güncellemelerle ortaya çıktı.Nedenini bilen var mı?
win 8 ve win 10 daki son güncellemelerle ortaya çıktı.Nedenini bilen var mı?
En son sbagcioglu tarafından 18 Kas 2016 05:23 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Re: ARKA ARKAYA AÇILAN FORMUM BİR ÖNCEKİNİN ALTINDA KALMASI
Merhaba, "Form açma" kodunuzu paylaşabilir misiniz?
-
- Üye
- Mesajlar: 8
- Kayıt: 10 Ağu 2010 10:59
Re: form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
FreeAndNil(Q);
FORM5F := Tform5F.Create(nil);
form5F.Hazirlan(-1);
form5F.ShowModal;
Result := form5.ID;
FreeAndNil(form5F);
FORM5F := Tform5F.Create(nil);
form5F.Hazirlan(-1);
form5F.ShowModal;
Result := form5.ID;
FreeAndNil(form5F);
Re: form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
Öncelikle gönderdiğiniz kod ile ilgili aşağıdaki hususlara dikkat etmenizi öneririm.
- Değişken isimlerini yazarken tek bir standart üzere yazmanızda fayda var. Kod içinde "FORM5F" ve "form5F" şeklinde iki farklı kullanım olmuş.
- Eğer "Form5F.Create(nil)" satırından sonra normal dışı bir durum oluşur ve hata meydana gelir ise uygulamanız hafıza kaçağına sebep olacaktır. bu satır sonrasını try..finally bloğu içine almanızda fayda var.
- Form5F eğer başka bir yerde Show() şeklinde kullanılmıyor ise veya başka bir yerde "if Form5F = nil" şeklinde yazılmış bir kod yok ise "FreeAndNil(Form5F)" yerine sadece Form5F.Free() kullanmanızı tavsiye ederim.
Yukarıdaki öneriler ışığında mevcut kodu aşağıdaki şekilde düzenlemek mümkün.
Sorunuza gelince, Delphi 2007 ve sonraki sürümlerinde TCustomForm içine PopupMode ve PopupParent özellikleri eklendi. Modal olarak çağırılan formun PopupParent özelliğine çağıran formu atadığınızda ShowModal() beklenilen şekilde çalışmaktadır.
Delphi 7 için ise aşağıdaki önerileri deneyebilirsiniz:
A- Diğer formu çağırmadan önce arka planda kalacak formu disable edebilirsiniz:
B- Her ne kadar siz son sürüm Windows işletim sistemlerinde karşılaşmış olsanız da "Window Ghosting" Windows 2000/XP zamanlarında işletim sistemine eklenen bir özellik olmuştur. Aşağıdaki kodu uygulamanızın girişinde çalıştırarak bunu kapatmanız mümkün olabilir.
Window ghosting ile ilgili: https://community.embarcadero.com/blogs ... parent-295
Bununla birlikte B yönteminin kullanılması durumunda bazı kullanıcılar ana formun işlem yapma kaynaklı donması durumunda ana formu minimize, maximize, move gibi işlemleri yapamayabiliyorlar. Tabi bu çözüm sizin sorununuzu düzeltir ise her bir ShowModal() işlemini A maddesindeki şekilde yapmanıza gerek kalmayacaktır.
- Değişken isimlerini yazarken tek bir standart üzere yazmanızda fayda var. Kod içinde "FORM5F" ve "form5F" şeklinde iki farklı kullanım olmuş.
- Eğer "Form5F.Create(nil)" satırından sonra normal dışı bir durum oluşur ve hata meydana gelir ise uygulamanız hafıza kaçağına sebep olacaktır. bu satır sonrasını try..finally bloğu içine almanızda fayda var.
- Form5F eğer başka bir yerde Show() şeklinde kullanılmıyor ise veya başka bir yerde "if Form5F = nil" şeklinde yazılmış bir kod yok ise "FreeAndNil(Form5F)" yerine sadece Form5F.Free() kullanmanızı tavsiye ederim.
Yukarıdaki öneriler ışığında mevcut kodu aşağıdaki şekilde düzenlemek mümkün.
Kod: Tümünü seç
FreeAndNil(Q);
Form5F := TForm5F.Create(nil);
try
Form5F.Hazirlan(-1);
Form5F.ShowModal();
Result := Form5.ID;
finally
Form5F.Free();
end;
Delphi 7 için ise aşağıdaki önerileri deneyebilirsiniz:
A- Diğer formu çağırmadan önce arka planda kalacak formu disable edebilirsiniz:
Kod: Tümünü seç
FreeAndNil(Q);
Self.Enabled := False;
try
Form5F := TForm5F.Create(nil);
try
Form5F.Hazirlan(-1);
Form5F.ShowModal();
Result := Form5.ID;
finally
Form5F.Free();
end;
finally
Self.Enabled := True;
end;
Window ghosting ile ilgili: https://community.embarcadero.com/blogs ... parent-295
Kod: Tümünü seç
procedure DisableProcessWindowsGhosting;
var
DisableProcessWindowsGhostingProc: procedure;
begin
DisableProcessWindowsGhostingProc := GetProcAddress(GetModuleHandle('user32.dll'), 'DisableProcessWindowsGhosting');
if Assigned(DisableProcessWindowsGhostingProc) then DisableProcessWindowsGhostingProc();
end;
-
- Üye
- Mesajlar: 8
- Kayıt: 10 Ağu 2010 10:59
Re: form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
önerilerinizi yapmama rağmen açılan 2 formda combobox a tıkladığımda 1 formun altında kalmaya devam ediyor.
Başka bir öneriniz var mı teşekkürler
Başka bir öneriniz var mı teşekkürler
Re: form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
- Çalışan sürüm ile çalışmayan sürüm arasında değişen kodlarınız varsa bunları incelemeniz gerekir. Belki de uygulamanız eskiden olmayan bir hataya sahip şu anda. Uygulamanızı bilmediğimiz için en azından Form5F kodları. Form5F'yi çağıran form kodları ve ana form kodlarını incelemenizi önerebilirim.
- Eğer dışarıdan veri erişim bileşenleri kurmanız mümkün ise (UniDAC, FireDAC vb) Delphi 10.1 Starter sürüm ücretsiz olarak lisanslı temin edilebiliyor. Ücretsiz lisans alıp projenizi bu sürümlere yükselterek TForm.PopupParent özelliğini kullanarak sorununuzu çözebilirsiniz.
- Eğer dışarıdan veri erişim bileşenleri kurmanız mümkün ise (UniDAC, FireDAC vb) Delphi 10.1 Starter sürüm ücretsiz olarak lisanslı temin edilebiliyor. Ücretsiz lisans alıp projenizi bu sürümlere yükselterek TForm.PopupParent özelliğini kullanarak sorununuzu çözebilirsiniz.
-
- Üye
- Mesajlar: 8
- Kayıt: 10 Ağu 2010 10:59
Re: form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
hiç bir kod degişikliği yok win 8 10 sürümlü makinelerde kurulum sonrası yapılan güncelleştirmeler den sonra olan bir durum kodlar ve olayı net anlatabilmek için özel iletişime geçebilirim.
Re: form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
Bu durumda zaman içinde yeni sürüm Delphi geçişi sağlayıp TForm.PopupParent özelliğini kullanmanız gerekli gibi gözüküyor. Zira internette de Delphi 7 ve Window Ghosting sorununu bu öneriler ile çözemeyenler var.
-
- Üye
- Mesajlar: 8
- Kayıt: 10 Ağu 2010 10:59
Re: form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
kullandığım sürüm CodeGear Rad (Rapid Application Development) Studio (CRS) 2007
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
üstte kalmasını istediğin formun OnShow kısmına aşağıdaki kodu yazabilrsin.
SetWindowPos(handle, hwnd_TopMost,0,0,0,0, swp_NoMove or swp_NoSize);
SetWindowPos(handle, hwnd_TopMost,0,0,0,0, swp_NoMove or swp_NoSize);
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
-
- Üye
- Mesajlar: 8
- Kayıt: 10 Ağu 2010 10:59
Re: form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
SetWindowPos(handle, hwnd_TopMost,0,0,0,0, swp_NoMove or swp_NoSize);
kodu kullandığımda form içinde açılan diğer TRzButtonEdit lerde alta kalıp şeçenekler gelmiyor
kodu kullandığımda form içinde açılan diğer TRzButtonEdit lerde alta kalıp şeçenekler gelmiyor
Re: form üstüne yeni bir form açtığımda açılan ilk formun altında aklıyor ve aktif hale gelimiyor.
Sorunu gösteren ekran görüntüsü paylaşabilir misiniz?