Merhabalar,
Mdi child olarak surekli olarak kullandigim bir formu baska bir formda Normal form gibi showmodal ile goruntuleyip kullanicinin o formdan baska bir seyle ugrasmasini engelleyebilirmyiim, bunu sunun icin kullanacagim, renk diye bir mdichild formum var ve burda renkkleri tutuyorum, fakat stok karti eklerken buradan renk kismi var ve burda butona basildiginda renk formumumu normal form gibi acip renk secimi yaptirmak istiyorum, bu secim sirasindada pencereyi kapatmadan baska bir islem yapmasini istemiyorum kullanicinin,
Tsk,
Burhan Cakmak
MdiChild olan bir formu normal form gibi gosterebilirmiyim
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 143
- Kayıt: 15 Haz 2003 08:33
- Konum: Almaty, Kazakhstan
Bu M$ ın bir kararı. MDI formlar ShowModal olarak açılamazlar.
Arşivimde ancak Windowsu kandırarak bu tarz bir modal gösterme yapılabileceği yazıyor. Örnek kodu ekte gönderiyorum. Ama ben dinlersen, formu fsNormal yap, daha iyi
Kolay gelsin.
Arşivimde ancak Windowsu kandırarak bu tarz bir modal gösterme yapılabileceği yazıyor. Örnek kodu ekte gönderiyorum. Ama ben dinlersen, formu fsNormal yap, daha iyi

Kod: Tümünü seç
unit Childwin;
interface
uses Messages, Windows, Classes, Graphics, Forms, Controls, ExtCtrls,
StdCtrls;
type
TMDIChild = class(TForm)
Button1: TButton; // creates a modal instance of this form
Edit1: TEdit;
Button2: TButton; // closes form with Modalresult mrOK
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
FModal: Boolean;
Procedure EnableSiblings( enable: Boolean );
Procedure WMSyscommand( Var msg: TWMSyscommand ); message WM_SYSCOMMAND;
public
{ Public declarations }
Procedure ShowMDIModal;
end;
implementation
uses dialogs;
{$R *.DFM}
procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
If FModal Then Begin
Action := caNone;
FModal := False;
EnableSiblings( true );
End
Else
Action := caFree;
end;
procedure TMDIChild.EnableSiblings(enable: Boolean);
var
i: Integer;
begin
with Application.Mainform do
for i:= 0 to MDIChildCount - 1 do
If MDIChildren[i] <> Self Then
MDIChildren[i].Enabled := enable;
end;
procedure TMDIChild.ShowMDIModal;
begin
FModal := True;
MOdalresult := mrNone;
EnableSiblings( false );
repeat
Application.HandleMessage;
if Application.Terminated then ModalResult := mrCancel else
if ModalResult <> 0 then Close;
until ModalResult <> 0;
end;
procedure TMDIChild.Button1Click(Sender: TObject);
begin
With TMDIChild.Create( Application ) Do
try
ShowMDIModal;
If ModalResult = mrOK Then
Self.Edit1.Text := edit1.text;
finally
Close
end;
end;
procedure TMDIChild.Button2Click(Sender: TObject);
begin
Modalresult := mrOK;
end;
procedure TMDIChild.WMSyscommand(var msg: TWMSyscommand);
begin
if FModal and ((msg.cmdtype and SC_CLOSE) = SC_CLOSE) Then
Modalresult := mrCancel
Else
inherited;
end;
end.
formu create ettikten sonra her turlu ozelligi ile oynayabilirsiniz. Yani mdichild olan stilini normal e donusturup ve gerekli ise diger ozellikleri ile de oynarak daha sonra showmodal ile modal olarak gosterebilirsiniz gibime geliyor.... Bir deneyin isterseniz....
kolay gelsin...
kolay gelsin...
* http://www.fahrettin.org Manzara Fotoğraflarım... 
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...

* http://delphiturkiye.gunduz.info Seminerler...

* http://www.hakmar.com.tr Kalite bir haktır...

-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
Selam,
MDI Child formlar ile normal formların DefWindProc ları windows core içinde farklıdır. Aynı şekilde normal form olarak hazırladığınız bir formu alıp bir MDIForm içine sokmaya kalkışırsanız da aynı durum sözkonusudur. Windows pencere yöneticisi bir pencerenin nasıl bir yapısı olduğuna pencerelerin internal structure larında tuttukları ExStyle adlı değişkenle karar verir. Eğer exstyle dword değişkenin 8. biti 1 ise bu pencere bir MDIChild dir diye düşünür. Yönetici WM_ mesajlarını aktarırken de alakasız bileşenlere alakasız mesajlar geçmesin diye kontrol eder. Misal WM_MDITILE gönderilirken tutup bunu tüm bileşenlere göndermez. Bu mesajı ancak MDIForm a gönderir. Konuyu çok fazla dallandırıp budaklandırmamak için daha detaya girmiyorum. Window u show etmeden önce internal yapısını modal bir pencere gibi değiştirip wnd proc içinde de normal MDIChild pencerelerin kontrol etmediği kontrolleri ekleyerek yapabilirsiniz. Ama bana sorarsanız bu kadar kastırmayın (Bunları Progress 4GL ile normal pencereleri MDIForm ve MDIChild a dönüştürmek zorunda kaldığımda yapmıştım zira kendiliğinden bu yapıyı desteklemiyordu, inanın yıpratıcı bir iş) aynı pencereden bir tane de normal yapın.
Kolay gelsin,
MDI Child formlar ile normal formların DefWindProc ları windows core içinde farklıdır. Aynı şekilde normal form olarak hazırladığınız bir formu alıp bir MDIForm içine sokmaya kalkışırsanız da aynı durum sözkonusudur. Windows pencere yöneticisi bir pencerenin nasıl bir yapısı olduğuna pencerelerin internal structure larında tuttukları ExStyle adlı değişkenle karar verir. Eğer exstyle dword değişkenin 8. biti 1 ise bu pencere bir MDIChild dir diye düşünür. Yönetici WM_ mesajlarını aktarırken de alakasız bileşenlere alakasız mesajlar geçmesin diye kontrol eder. Misal WM_MDITILE gönderilirken tutup bunu tüm bileşenlere göndermez. Bu mesajı ancak MDIForm a gönderir. Konuyu çok fazla dallandırıp budaklandırmamak için daha detaya girmiyorum. Window u show etmeden önce internal yapısını modal bir pencere gibi değiştirip wnd proc içinde de normal MDIChild pencerelerin kontrol etmediği kontrolleri ekleyerek yapabilirsiniz. Ama bana sorarsanız bu kadar kastırmayın (Bunları Progress 4GL ile normal pencereleri MDIForm ve MDIChild a dönüştürmek zorunda kaldığımda yapmıştım zira kendiliğinden bu yapıyı desteklemiyordu, inanın yıpratıcı bir iş) aynı pencereden bir tane de normal yapın.
Kolay gelsin,
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)