MdiChild Formun Kapatma Butonunu Disable Yapmak?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
salvation
Üye
Mesajlar: 303
Kayıt: 22 Mar 2004 01:57
Konum: Eskişehir
İletişim:

MdiChild Formun Kapatma Butonunu Disable Yapmak?

Mesaj gönderen salvation »

Bir MdiChild Formun kapatma butonunun disable durumda olmasını istiyorum. Eğer MdiChild değilde normal bir form olsaydı aşağıdaki kodlar işe yarıyordu fakat, MdiChild Olduğunda, Child formun "hwndHandle := FindWindow(nil, 'Form1');" şeklinde handle numarasını almış olsa bile işe yaramıyor?

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
var
  hwndHandle : THANDLE;
  hMenuHandle : HMENU;
begin
  hwndHandle := FindWindow(nil, 'Form1');
  if (hwndHandle <> 0) then begin
    hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
    if (hMenuHandle <> 0) then
      DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
  end;
end;
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

canclose u false yaptın mı? veya closequery de kontrol etmeyi
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
salvation
Üye
Mesajlar: 303
Kayıt: 22 Mar 2004 01:57
Konum: Eskişehir
İletişim:

Mesaj gönderen salvation »

evet dediğin gibi kapatılması engellenebilir fakat ben kapatma butonunu disable yapmak istiyorum.

Mesela MsSql Server - Enterprise Manager'daki gibi.
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

bak bu vb kodu ile yapabilirsin istediğini ancak delphiye uyarlamak senden. apilerle rahatlıkla oluyo.

Kod: Tümünü seç

Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long

Private Const MF_BYPOSITION = &H400&

Private Sub Form_Load()
    '// remove the close menu (which then disables the close button)
    RemoveMenus
End Sub

Private Sub RemoveMenus()
    Dim hMenu As Long
    ' Get the form's system menu handle.
    hMenu = GetSystemMenu(hWnd, False)
    DeleteMenu hMenu, 6, MF_BYPOSITION
End Sub
http://www.developerfusion.co.uk/script ... aspx?id=72

adresinden buldum.


II.Yol da captiona bir buton drawlıycan tam da close buttonunun üzerine ayarlıyacan onu disable gibi gösterecen olcek :lol: (Bu yol mrmcop un dediği gibi illüzyonist)


Saygılar
kolay gelsin
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
salvation
Üye
Mesajlar: 303
Kayıt: 22 Mar 2004 01:57
Konum: Eskişehir
İletişim:

Mesaj gönderen salvation »

1. Yöntem deki apileri bende kullanarak yapmayı denedim, normal formlarda oluyor fakat, MdiChild formlarda bir türlü işe yaramadı :cry:
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

- MDIChild için aynı kodu zaten motomot kullanamazsınız ki. Çünkü FindWindow komutu ile Application Window ararsınız. Siz Child'ini bulacaksınız. Ama zaten üçüncü bir programın değil kendi projenizdeki adını handle'ini bildiğiniz bir formun başlığına etki edecekseniz direk o formun kendinde Handle'ini almak yeterli olacaktır...

- Yani özetle şu.. (sizinle aynı kodu yazıyorum) Tek fark FindWindow yerine FormAdi.Handle diycez ya da daha kolayı Joker bir çağrı için aşağıdaki gibi TForm(Sender).Handle yazıyorum... 8)

- Kodu yine istediğiniz formun OnCreate olayına aynen yazın...

Kod: Tümünü seç

var
  hwndHandle  : THANDLE;
  hMenuHandle : HMENU;
begin
  hwndHandle := TForm(Sender).Handle; // FindWindow(nil, 'Form2');
  if (hwndHandle <> 0) then begin
    hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
    if (hMenuHandle <> 0) then
      DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
  end;
- Başarılar...
Resim
Resim ....Resim
Kullanıcı avatarı
salvation
Üye
Mesajlar: 303
Kayıt: 22 Mar 2004 01:57
Konum: Eskişehir
İletişim:

Mesaj gönderen salvation »

evet bu şekilde oldu :)

Teşekkürler
Cevapla