- 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.
Mesela şu kodda mevcut bir tuşun kullanılabilirliğini kontrol edip aktif etmek istiyoruz.
Ama bu şekilde syserr veriyor;
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
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;
Altına şunu ekleyin;
Şu kodu aratın;
Altına ekleyin;
İş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;
Altına ekleyin;
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;
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;
Son düzenleme: