wndMgr.IsDisable Fonksiyonu Ekleme Rehberi

Whistle

Ruhsuz :/
Kurucu
Geliştirici
Yardımsever Üye
Mesaj
12.454
Çözümler
580
Beğeni
16.646
Puan
6.281
Ticaret Puanı
2
Bu konuda orijinal oyuna yeni eklenen sistemlerle gelen wndMgr.IsDisable fonksiyonunu eklemeyi anlatacağım. Eğer böyle bir fonksiyon yoksa şuna benzer bir syserr alırsınız.
Kod:
Genişlet Daralt Kopyala
0216 00:58:29495 ::   File "ui.py", line 1009, in IsDisable

0216 00:58:29496 ::
0216 00:58:29496 :: return wndMgr.IsDisable(self.hWnd)

0216 00:58:29496 :: AttributeError
0216 00:58:29496 :: :
0216 00:58:29496 :: 'module' object has no attribute 'IsDisable'
0216 00:58:29496 ::


Mesela şu kodda mevcut bir tuşun kullanılabilirliğini kontrol edip aktif etmek istiyoruz.
Python:
Genişlet Daralt Kopyala
if self.mmoTutkunlariButton.IsDisable() == 0:
    self.mmoTutkunlariButton.Enable()

Ama bu şekilde syserr veriyor;
Kod:
Genişlet Daralt Kopyala
0216 00:00:33209 :: AttributeError
0216 00:00:33209 :: :
0216 00:00:33210 :: 'Button' object has no attribute 'IsDisable'
0216 00:00:33210 ::


Peki nasıl çözebiliriz?
Aslında çözmesi çok kolay.
Zaten kaynak kodlarında bir butonun aktif olup olmadığını deneyleyen şu fonksiyon mevcut;
Client/EterPythonLib/PythonWindow.cpp
C++:
Genişlet Daralt Kopyala
BOOL CButton::IsDisable()
{
    return m_bEnable;
}

Bize kalan tek şey ise root dosyalarında ki python dosyalarımızda bu fonksiyonu kullanmak yeni kaynak koduna python fonksiyonu tanımlayacağız.

İlk önce Client/EterPythonLib/PythonWindowManagerModule.cpp dosyasını aratıyoruz ve şu kodu aratıyoruz;
C++:
Genişlet Daralt Kopyala
PyObject * wndButtonIsDown(PyObject * poSelf, PyObject * poArgs)
{
    UI::CWindow * pWindow;
    if (!PyTuple_GetWindow(poArgs, 0, &pWindow))
        return Py_BuildException();

    return Py_BuildValue("i", ((UI::CButton*)pWindow)->IsPressed());
}

Altına şunu ekleyin;
C++:
Genişlet Daralt Kopyala
//Whistle - MMOTutkunlari
PyObject * wndButtonIsDisable(PyObject * poSelf, PyObject * poArgs)
{
    UI::CWindow* pWindow;
    if (!PyTuple_GetWindow(poArgs, 0, &pWindow))
        return Py_BuildException();

    return Py_BuildValue("i", ((UI::CButton*)pWindow)->IsDisable());
}


Şu kodu aratın;
C++:
Genişlet Daralt Kopyala
        { "IsDown",                        wndButtonIsDown,                    METH_VARARGS },

Altına ekleyin;
C++:
Genişlet Daralt Kopyala
        { "IsDisable",                    wndButtonIsDisable,                    METH_VARARGS },

İşlemleri yaptıktan sonra clienti build edin.

root/ui.py dosyasını açın ve class Button(Window): içinde ki şu fonksiyonu aratın;
Python:
Genişlet Daralt Kopyala
    def Disable(self):
        wndMgr.Disable(self.hWnd)

Altına ekleyin;
Python:
Genişlet Daralt Kopyala
    def IsDisable(self):
        return wndMgr.IsDisable(self.hWnd)


Artık gui tasarlarken kullanıma kapattığınız tuşları bu fonksiyon sayesinde kontrol edebilirsiniz.

Not: Casro2 geliştirme aşamasında gördüğüm eksiklikleri gidermek için yazdığım kodlardır.

Çalıştığına Dair Kanıt;
IsDisable Fonksiyonun Çalıştığına Dair Kanıt.webp
 
Son düzenleme:
Uyarı: Bu konu açıldığından bu yana baya zaman geçmiş.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.
Geri
Üst