MdiChild Boyutu Degisiyor neden ???

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Okyanus
Üye
Mesajlar: 18
Kayıt: 04 Mar 2005 04:36
Konum: Almanya

MdiChild Boyutu Degisiyor neden ???

Mesaj gönderen Okyanus »

Selam,
Programda bir MdiMenu ve 2 MdiChild form var. Program calisinca
frmSatici normal boyutta aciliyor, frmMusteri ise maximized olarak ekrani kaplamis sekilde aciliyor. Ama frmMusteri maximized acilinca frmSatici formu da kendiliginden maximized oluyor ???

Yada tam tersi frmMusteri yi ilk olarak acip frmSatici ikinci olarak acinca bu sefer ikinci acilan frmSatici normal boyutta oldugu icin frmMusteri maximized olmasina ragmen boyutlari degisiyor ????

Bunu önlemenin bir yolu yok mu ?

Yani ben mdichild olarak kullandigim her pencereye farkli buyuklukler vererek mdimenu icinde tutamaz miyim ?

Kolay Gelsin.
Okyanus
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

Mesaj gönderen delphist »

Hocam mdi childların özelliklerini ve boyutlarını bu şekilde ayarlayabilirsin

Kod: Tümünü seç

 With Mdichildform do 
  begin 
    FormStyle := fsMDIChild; 
    Width     := 200; 
    Height    := 100; 
   end;
Kolay Gelsin
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

@delphist'in cevabına ek yapmak istedim. :o

- Formların Maximize olduğu anı yakalayıp işlemi iptal edecek, @delphist'in kod benzeri ile çağrıyı yapan form büyüklüğünü ana form client büyüklüğüne denkleştireceksin... :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
Okyanus
Üye
Mesajlar: 18
Kayıt: 04 Mar 2005 04:36
Konum: Almanya

Mesaj gönderen Okyanus »

Selam

Maalesef form boyutlarini degistirsem de yine mdichild in birini maximize yapinca digerleri de maximize oluyor.

mrmcop dediginizi bir ornekle anlatir misin ? anlayamadim nasil maximize olan bir mdichild in maximize anini yakalayabilirim ?


Kolay gelsin.
Okyanus
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

position'la alakalı birşey olabilir.

poDefault - boyutu değişir
poDefaultPosOnly - boyut değişmez...

Formun position özelliğini değiştirip bir deneyin.

Kolay gelsin.
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

hocam merhaba aşağıdaki kod mdi uygulamalarda herhangi bir cihildin eventini yakalamayla ilgili ben denemdim..bende biryerden örnek olarak almıştım ama kullanmadım..

Kod: Tümünü seç

 TChildForm = class(TObject)
  private
    Handle: THandle;
   OldChildWndProc: Pointer;
    InstanceChildWndProc: Pointer;
    Popup: TPopupMenu;
    procedure OnPopupMenu(Sender: TObject);
  protected

    procedure ChildWndProc(var Message: TMessage); virtual;
    procedure ClickActBut(Sender: TObject);
    procedure MinimizeMDIWindow(Sender: TObject);
    procedure CloseMDIWindow(Sender: TObject);
    procedure RestoreMDIWindow(Sender: TObject);
    procedure MaximizeMDIWindow(Sender: TObject);
    procedure ClickTriotekWindow(Sender: TObject);
  public
    constructor Create(AHandle: THandle; AToolBar: TElegantMDI);
    destructor Destroy; override;
  end;

constructor TChild.Create(AHandle: THandle; AToolBar: TElegantMDI);
var
  i, x: Integer;
  mi: TMenuItem;
begin
  inherited Create;

  Button.OnClick := ClickActBut;

  Popup := TPopupMenu.Create(Button);

  mi := TMenuItem.Create(Button);
  mi.Caption := 'Activate window';
  mi.OnClick := ClickActBut;
  mi.Bitmap.Handle := LoadBitmap(0, PChar(OBM_CHECK));
  Popup.Items.Add(mi);

  mi := TMenuItem.Create(Button);
  mi.Caption := '-';
  Popup.Items.Add(mi);

  mi := TMenuItem.Create(Button);
  mi.Caption := 'Önceki Boyut';
  mi.OnClick := RestoreMDIWindow;
  mi.Bitmap.Handle := LoadBitmap(0, PChar(OBM_RESTORED));
  Popup.Items.Add(mi);

  mi := TMenuItem.Create(Button);
  mi.Caption := 'Simge Durumuna Küçült';
  mi.OnClick := MinimizeMDIWindow;
  mi.Bitmap.Handle := LoadBitmap(0, PChar(OBM_REDUCED));
  Popup.Items.Add(mi);

  mi := TMenuItem.Create(Button);
  mi.Caption := 'Ekranı Kapla';
  mi.OnClick := MaximizeMDIWindow;
  mi.Bitmap.Handle := LoadBitmap(0, PChar(OBM_ZOOMD));
  Popup.Items.Add(mi);

  mi := TMenuItem.Create(Button);
  mi.Caption := '-';
  Popup.Items.Add(mi);

  mi := TMenuItem.Create(Button);
  mi.Caption := 'Pencereyi Kapat';
  mi.OnClick := CloseMDIWindow;
  Popup.Items.Add(mi);


  mi := TMenuItem.Create(Button);
  mi.Caption := '-';
  Popup.Items.Add(mi);

  mi := TMenuItem.Create(Button);
  mi.Caption := 'İptal';
  Popup.Items.Add(mi);

  mi := TMenuItem.Create(Button);
  mi.Caption := '-';
  Popup.Items.Add(mi);


  mi := TMenuItem.Create(Button);
  mi.Caption := 'Triotek A.Ş';
  mi.OnClick := ClickTriotekWindow;
  Popup.Items.Add(mi);


  Popup.OnPopup := OnPopupMenu;

  Button.PopupMenu := Popup;

  InstanceChildWndProc := MakeObjectInstance(ChildWndProc);
  OldChildWndProc := Pointer(GetWindowLong(Handle,GWL_WNDPROC));
  SetWindowLong(Handle, GWL_WNDPROC, Longint(InstanceChildWndProc));
end;

destructor TChild.Destroy;
begin
  SetWindowLong(Handle, GWL_WNDPROC, Longint(OldChildWndProc));
  FreeObjectInstance(InstanceChildWndProc);
  inherited Destroy;
end;

procedure TChild.OnPopupMenu(Sender: TObject);
begin
  if GetTopWindow(ToolBar.Form.ClientHandle)=Handle then
    Popup.Items[0].Enabled := False
  else
    Popup.Items[0].Enabled := True;

  if IsIconic(Handle) then begin
    Popup.Items[2].Enabled := True;
    Popup.Items[3].Enabled := False;
    Popup.Items[4].Enabled := True;
  end
  else begin
    Popup.Items[3].Enabled := True;
    if IsZoomed(Handle) then begin
      Popup.Items[2].Enabled := True;
      Popup.Items[4].Enabled := False;
    end
    else begin
      Popup.Items[2].Enabled := False;
      Popup.Items[4].Enabled := True;
    end;
  end;
end;



///
procedure TChildForm.ChildWndProc(var Message: TMessage);
begin
  case Message.Msg of
  WM_GETTEXT:
    begin
      Message.Result:= CallWindowProc(OldChildWndProc, Handle, Message.Msg, Message.WParam, Message.LParam);
      Button.Caption := Copy(PChar(Message.LParam),1,12);
      if Length(PChar(Message.LParam))>12 then begin
        Button.Caption := Button.Caption + ' ...';
        Button.Hint := PChar(Message.LParam);
        Button.ShowHint := True;
      end
      else begin
        Button.Hint := '';
        Button.ShowHint := False;
      end;

      Exit;
    end;
  WM_MDIACTIVATE:
    begin
      if HWND(Message.LParam)=Handle then Button.Down := True;
      if HWND(Message.WParam)=Handle then Button.Down := False;
    end;
  WM_DESTROY:
    begin
      Popup.Free;
      Button.Free;
      SetWindowLong(Handle, GWL_WNDPROC, Longint(OldChildWndProc));
      FreeObjectInstance(InstanceChildWndProc);
    end;
  WM_SYSCOMMAND:
    begin
    if Message.WParam = SC_MINIMIZE then
    begin
     ///Self.Popup.

     // Self.MinimizeMDIWindow(nil);
       //ShowMessage('TEST ');
     // SetWindowLong(Handle, GWL_HINSTANCE, Longint(ChildWndProc()));
    // ShowWindow(Form.ClientHandle,SW_HIDE);
     ShowWindow(Handle,SW_MINIMIZE);
     ShowWindow(Handle,SW_HIDE);
  //   end;
   end;
  end;
end;

Message.Result:= CallWindowProc(OldChildWndProc,Handle, Message.Msg, Message.WParam, Message.LParam);
// SetWindowLong()
end;
kolay gelsin
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
ibr_ozdemir
Üye
Mesajlar: 25
Kayıt: 27 Nis 2005 02:09

Mesaj gönderen ibr_ozdemir »

benim bildiğim kadarıyla yavru form lardan (mdichild) bir tanesinin windowstate ini değiştirdinmi (yalnızca maximize ve minimize için) diğerleride o şekilde görünür.
mdichild lardan birisi ekranı kaplamışken bir başkasının ekranı kaplaması önlenebiliyorsa lütfen anlatın bu benimde işime yarar.

ayrıca tasarım esnasında bir yavru formun boyutunu nasıl ayarladınsa çalışma esnasında öyle gözüksün istiyorsan yavru formun "position" ını "poDefaultPosOnly" yapabilirsin denedim oluyo.

kolay gelsin
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Arkadaşlar buradan sormak için sarf ettiğiniz zamanı Maximize anahtarı vererek aramak için harcasanız sonuca daha hızlı kavuşacaktınız.. :oops:

- En azından viewtopic.php?t=6307&highlight=maximize linkine bir bakın :idea: Hala çözemiyorsanız denediğiniz şekli anlatın ona göre çözüm üretelim...
Resim
Resim ....Resim
Cevapla