MainMenu > Window (Pecereler) ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 523
Kayıt: 05 May 2005 03:24
Konum: DelphiTürkiye.COM

MainMenu > Window (Pecereler) ?

Mesaj gönderen hi_selamlar »

S.A.
kolay gelsin.

arkadaşlar takıldığımı bir nokta var.

1. ana form var. (MDIForm)
2. detay form (MDIChild)

hani bütün uygulamalarda görürüz ya, üst mainmenu de "Window" başlığı altında bütün uygulama içinde
açık bulunan detay (MDIChild) formların isimler yer alıyor.

Bunu delphi de nasıl yapabiliriz ?

Şimdiden teşekkür ederim.
Saygılar

KOlay Gelsin
Herkes cahildir, bazi konularda.
nightwolfcem
Üye
Mesajlar: 32
Kayıt: 02 Eki 2008 02:55

Re: MainMenu > Window (Pecereler) ?

Mesaj gönderen nightwolfcem »

Aşağıdaki Form sınıfını Mdi Childlerini türeticeğin sınıf olarak kullanırsan herhangi bir kod yazmadan istediğini elde edersin.

Kod: Tümünü seç

interface
uses forms,classes,dialogs,Menus;
  type
  TFormChild=class(tform)
  protected
  procedure  DoClose(var Action: TCloseAction); override;
  procedure  Activate; override;
  procedure   MenuItemCheck;
  constructor Create(Aowner:tcomponent);override;
  destructor Destroy;override;
  procedure mitemclick(sender:tobject);
  end;
implementation
uses unit1;//ANA formun(Mdiform) olduğu unit
{ TFormChild}

procedure TFormChild.DoClose(var Action: TCloseAction);
begin
  inherited DoClose(Action);
  action:=cafree;  //Formları Kapatırken YokEt
end;


constructor TFormChild.Create(Aowner: tcomponent);
var
i:integer;
mitem:TMenuItem;
Begin
// Form oluşturulduğunda Windows menusüne yeni öğe ekle
  inherited create(aowner);
  mitem:=TMenuItem.Create(form1.Window1);
  mitem.Caption:=Caption; //Öğenin başlığını formun başlığı yap
  mitem.OnClick:=mitemclick; //Click olayını yönet
  form1.window1.Add(mitem);
   MenuItemCheck;//Öğeyi Seçili hale getir
end;
procedure TFormChild.mitemclick(sender: tobject);
Begin
  show;  //Formu Göster(Ön Plana getir)
  MenuItemCheck;//Öğeyi seçili hale getir
end;

destructor TFormChild.Destroy;
var
i:integer;
begin
  //Form yok Edilirken Formun başlığıyla aynı ada sahip menü öğesinide sil
  with form1.window1 do
  begin
    i:=0;
    while i<count do
    if AnsiSameCaption(items[i].caption,self.caption) then
    Delete(i) else inc(i);
  end;
  inherited Destroy;
end;

procedure TFormChild.Activate;
begin
  inherited activate;
  MenuItemCheck;  //Form Aktif olduğunda ilgili menü öğesinide seçili kıl
end;

procedure TFormChild.MenuItemCheck;
var
i:integer;
begin
  //Formla aynı isme sahip öğeyi seçili kıl,diğerlerinin seçililiklerini kaldır.
  with form1.window1 do
  for i:=0 to count-1 do
  items[i].Checked:=AnsiSameCaption(items[i].caption,self.caption);
end;
end.
Bu kodu ayrı bir unite kaydedip.
Mdi child formlarınıda bu sınıftan türetirsen (örn: TForm2 = class(TFormChild) gibi)
sorun cıkmaz bir ufak hatırlatma Form1 ana form ve "window1" pencereleri listeliycek menu öğesi
Not : mdi child formları kapatırken yok ettiğini varsayarak yazdım kodu
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: MainMenu > Window (Pecereler) ?

Mesaj gönderen csunguray »

Delphi bu işlemi otomatik yapar. Tek yapmanız gereken: Pencere listesinin hangi menü seçeneğinin altında görünmesini istiyorsanız MDI ana formun WindowMenu özelliğini o menü seçeneğine ayarlayın.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
nightwolfcem
Üye
Mesajlar: 32
Kayıt: 02 Eki 2008 02:55

Re: MainMenu > Window (Pecereler) ?

Mesaj gönderen nightwolfcem »

hazır varmış yahu :lol:
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 523
Kayıt: 05 May 2005 03:24
Konum: DelphiTürkiye.COM

Re: MainMenu > Window (Pecereler) ?

Mesaj gönderen hi_selamlar »

csunguray yazdı:Delphi bu işlemi otomatik yapar. Tek yapmanız gereken: Pencere listesinin hangi menü seçeneğinin altında görünmesini istiyorsanız MDI ana formun WindowMenu özelliğini o menü seçeneğine ayarlayın.
S.A.

Hocam öncelikle paylaşımınız için teşekkür ederim.
Tam olarak anlayamadım. Rica etsem biraz daha örnekli anlatırmısınız. Nasıl yapılacağına dair. :oops:

S.A.
Teşekkürler.
Herkes cahildir, bazi konularda.
mbozkurt79
Üye
Mesajlar: 13
Kayıt: 03 Tem 2004 10:02
Konum: sakarya

Re: MainMenu > Window (Pecereler) ?

Mesaj gönderen mbozkurt79 »

arkadaşlar benim yapmak istediğim şey açık midi formları menu de listelemek..
forumda yazan " Pencere listesinin hangi menü seçeneğinin altında görünmesini istiyorsanız MDI ana formun WindowMenu özelliğini o menü seçeneğine ayarlayın."
işlemi yaptım fakat menude herhangi bir liste oluşmadı . Yapan arkadaşlar varsa yardımlarınızı bekliyorum. Şimdiden teşekkurler.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: MainMenu > Window (Pecereler) ?

Mesaj gönderen csunguray »

Formun OnCreate olayında da aynı işlemi yapın. Bazen designer'dan yaptığınızı yemiyor. Yani:

Kod: Tümünü seç

procedure TFormAnaMenu.FormCreate(Sender: TObject);
begin
  WindowMenu := MenuItemPencere;
end;


MenuItemPencere bir alt menü seçeneği değil, bir ana menü seçeneği. Yani doğrudan formun en üstünde görünen seçeneklerden biri (Dosya, Düzen, Yardım gibi).
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
mbozkurt79
Üye
Mesajlar: 13
Kayıt: 03 Tem 2004 10:02
Konum: sakarya

Re: MainMenu > Window (Pecereler) ?

Mesaj gönderen mbozkurt79 »

Teşekkurler C. Sunguray arkadaşım.. söylediklerini yaptım ve şuan çalışıyor ...
Cevapla