wndMgr.IsDisable Fonksiyonu Ekleme Rehberi

Whistle

S İ N İ R L E N M E K
Site yetkilisi
Kurucu
Kurumsal Üye
Geliştirici
Yardımsever Üye
Mesaj
11.570
Çözümler
551
Beğeni
12.269
Puan
5.915
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:
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:
if self.mmoTutkunlariButton.IsDisable() == 0:
    self.mmoTutkunlariButton.Enable()

Ama bu şekilde syserr veriyor;
Kod:
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++:
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++:
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++:
//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++:
        { "IsDown",                        wndButtonIsDown,                    METH_VARARGS },

Altına ekleyin;
C++:
        { "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:
    def Disable(self):
        wndMgr.Disable(self.hWnd)

Altına ekleyin;
Python:
    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.jpg
 
Son düzenleme:
Geri
Üst