bir delphi bug'ı. ama daha çok çözümüyle ilgileniyorum.
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
bir delphi bug'ı. ama daha çok çözümüyle ilgileniyorum.
1. form, ana formunuz mdiform.
2. form, childform mdichild.
3. form, normal bir form.
ana formun içinde childform açık duruyor. sonra siz normal form olan 3üncü formu showmodal olarak açtınız. aşağıda mdichild olan form da açık. normal form da showmodal olarak en tepede açık durur vaziyette. bu durumda ctrl F4 yaparsanız aşağıdaki mdichild form kapanıyor. enteresan di mi?
ama beni şuan ilgilendiren bunu engellemem gerek. çünkü devamında hatalar zinciri oluşuyor.
2. form, childform mdichild.
3. form, normal bir form.
ana formun içinde childform açık duruyor. sonra siz normal form olan 3üncü formu showmodal olarak açtınız. aşağıda mdichild olan form da açık. normal form da showmodal olarak en tepede açık durur vaziyette. bu durumda ctrl F4 yaparsanız aşağıdaki mdichild form kapanıyor. enteresan di mi?
ama beni şuan ilgilendiren bunu engellemem gerek. çünkü devamında hatalar zinciri oluşuyor.
@csyasar
- Haklısın CTRL+F4 her ikisine de yarıyor. Yalnız ortada Modal bir form varsa bu kontrol ondan arkasında kalana geçmez. Bunu irdelemesini önerdim.
- Yani MdiChild'de bunu engeleyecek durum olması bile ortada bir sorun olduğuna delalet. Yani bir sorun yaratıp sonra o soruna başka türlü çözüm bulmak anlamsız. Sorunun kaynağına bakmak lazım demek istemiştim.
- Haklısın CTRL+F4 her ikisine de yarıyor. Yalnız ortada Modal bir form varsa bu kontrol ondan arkasında kalana geçmez. Bunu irdelemesini önerdim.
- Yani MdiChild'de bunu engeleyecek durum olması bile ortada bir sorun olduğuna delalet. Yani bir sorun yaratıp sonra o soruna başka türlü çözüm bulmak anlamsız. Sorunun kaynağına bakmak lazım demek istemiştim.
arkadaşlar başka yöne kaymışsınız. ilginiz için teşekkürler yine de.
bir boş proje yaratıp deneseniz anlardınız.
sade bir şekilde tekrar anlatıyorum. hoş daha sade nasıl antacağım zaten sade anlatmıştım ama.
3 tane formumuz var.
1. ana form , tipi mdiform
2. child form, tipi mdichild
3. modal açılacak form, tipi normal
şimdi ana form açıldı haliyle. ondan sonra child form da açıldı, ne şekilde açıldığının önemi yok. sonra modal formumuz da açıldı, onun da nasıl açıldığının önemi yok modal açıldı işte.
şimdi nedir olay, modal bir form açılınca daha önce açılmış olan diğer formlara erişemezsiniz, ne tuşlarla ne fare ile.
neyse örneğime dönüyorum. siz program bu durumdayken kazara ya da bilerek neyse ctrl f4 tuşuna basarsanız ne olması gerekir? cevap vereyim hiç bi şey olmaması lazım. ama oluyor işte arkadaki child form minimize oluyor, bende minimize olduğu zaman kapat demişim o yüzden de kapanıyor. Neyse siz sıfır bir proje yapıp denerseniz minimize olayını göreceksiniz.
bu arada biraz araştırınca gerçekten böyle bir bug'ın olduğunu da buldum. buyrun linki
http://members.aye.net/~bstowers/delphi ... cl-MDI.htm
bir boş proje yaratıp deneseniz anlardınız.
sade bir şekilde tekrar anlatıyorum. hoş daha sade nasıl antacağım zaten sade anlatmıştım ama.
3 tane formumuz var.
1. ana form , tipi mdiform
2. child form, tipi mdichild
3. modal açılacak form, tipi normal
şimdi ana form açıldı haliyle. ondan sonra child form da açıldı, ne şekilde açıldığının önemi yok. sonra modal formumuz da açıldı, onun da nasıl açıldığının önemi yok modal açıldı işte.
şimdi nedir olay, modal bir form açılınca daha önce açılmış olan diğer formlara erişemezsiniz, ne tuşlarla ne fare ile.
neyse örneğime dönüyorum. siz program bu durumdayken kazara ya da bilerek neyse ctrl f4 tuşuna basarsanız ne olması gerekir? cevap vereyim hiç bi şey olmaması lazım. ama oluyor işte arkadaki child form minimize oluyor, bende minimize olduğu zaman kapat demişim o yüzden de kapanıyor. Neyse siz sıfır bir proje yapıp denerseniz minimize olayını göreceksiniz.
bu arada biraz araştırınca gerçekten böyle bir bug'ın olduğunu da buldum. buyrun linki
http://members.aye.net/~bstowers/delphi ... cl-MDI.htm
Başa bir yer kaydığımız yok aslında. Bu taktirde Bu bug senin Delphi sürümünde olmalı... Sen Delphi 4 veya daha eskisini kullanıyorsun bu gösterdiğin sayfaya göre...
- Bir de diğer yandan oradaki bahsi geçen hatalar senin bahsettiğinden değil. Ya da ben yanlış anlıyorum. Seninle ilgili olanı buraya yazar mısın beraber tercüme edelim...
- Aşağıdaki de benim kod.
http://rapidshare.com/files/13751472/Fo ... l.zip.html
Bunu indir ve dene istersen bizde böyle bişey olmuyor ki, bu tip sorular sorduk.
- Bir de diğer yandan oradaki bahsi geçen hatalar senin bahsettiğinden değil. Ya da ben yanlış anlıyorum. Seninle ilgili olanı buraya yazar mısın beraber tercüme edelim...
- Aşağıdaki de benim kod.
http://rapidshare.com/files/13751472/Fo ... l.zip.html
Bunu indir ve dene istersen bizde böyle bişey olmuyor ki, bu tip sorular sorduk.
evet bu gönderdiğiniz exe'de sorun yok. sizde d7 var. bende d6. d6'dan sonra düzeltilmiş bug. yani ben de yanlış bir şey yapmıyormuşum.
d6 da forms.pas'da
function TApplication.IsMDIMsg(var Msg: TMsg): Boolean;
begin
Result := False;
if (MainForm <> nil) and (MainForm.FormStyle = fsMDIForm) and
(Screen.ActiveForm <> nil) then
Result := TranslateMDISysAccel(MainForm.ClientHandle, Msg);
end;
şeklindeki functionda aşağıdaki bir düzenleme yapmak gerekiyor ve tabi tekrar compile etmek gerekecek.
function TApplication.IsMDIMsg(var Msg: TMsg): Boolean;
begin
Result := False;
if (MainForm <> nil) and (MainForm.FormStyle = fsMDIForm) and
((Screen.ActiveForm = nil) or
(Screen.ActiveForm.FormStyle = fsMDIChild)) then
Result := TranslateMDISysAccel(MainForm.ClientHandle, Msg);
end;
bu arada d7'deki forms.pas'da TApplication.IsMDIMsgfunctionu nasıl onu da merak etmedim değil.
d6 da forms.pas'da
function TApplication.IsMDIMsg(var Msg: TMsg): Boolean;
begin
Result := False;
if (MainForm <> nil) and (MainForm.FormStyle = fsMDIForm) and
(Screen.ActiveForm <> nil) then
Result := TranslateMDISysAccel(MainForm.ClientHandle, Msg);
end;
şeklindeki functionda aşağıdaki bir düzenleme yapmak gerekiyor ve tabi tekrar compile etmek gerekecek.
function TApplication.IsMDIMsg(var Msg: TMsg): Boolean;
begin
Result := False;
if (MainForm <> nil) and (MainForm.FormStyle = fsMDIForm) and
((Screen.ActiveForm = nil) or
(Screen.ActiveForm.FormStyle = fsMDIChild)) then
Result := TranslateMDISysAccel(MainForm.ClientHandle, Msg);
end;
bu arada d7'deki forms.pas'da TApplication.IsMDIMsgfunctionu nasıl onu da merak etmedim değil.
Bu arada hatırlatma, kodlarını CODE tagı içine al ki formatı bozulmasın.
Delphi 7 Forms.PAS
Delphi 7 Forms.PAS
Kod: Tümünü seç
function IsMDIMsg(var Msg: TMsg): Boolean;
Kod: Tümünü seç
function TApplication.IsMDIMsg(var Msg: TMsg): Boolean;
begin
Result := False;
if (MainForm <> nil) and (MainForm.FormStyle = fsMDIForm) and
(Screen.ActiveForm <> nil) and (Screen.ActiveForm.FormStyle = fsMDIChild) then
Result := TranslateMDISysAccel(MainForm.ClientHandle, Msg);
end;