Registrierung.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. #include "..\..\Global\Variablen.h"
  2. #include "..\..\Global\Initialisierung.h"
  3. #include "Registrierung.h"
  4. #include <Punkt.h>
  5. #include <Text.h>
  6. #include <Zeit.h>
  7. #include <InitDatei.h>
  8. // Inhalt der Registrierung Klasse aus Registrierung.h
  9. // Konstruktor
  10. Registrierung::Registrierung(Fenster* zVorLoginFenster)
  11. : ReferenceCounter()
  12. {
  13. Punkt bildschirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
  14. registrierung = initKnopf(10, 90, 130, 30, Knopf::Style::Sichtbar, "Registrieren");
  15. registrierung->setMausEreignisParameter(this);
  16. registrierung->setMausEreignis(registrierungRegistrierungME);
  17. initToolTip(registrierung, "Account erstellen.");
  18. zVorLoginFenster->addMember(dynamic_cast<Zeichnung*>(registrierung->getThis()));
  19. fenster = initFenster(bildschirmGröße.x / 2 - 175, bildschirmGröße.y / 2 - 131, 350, 262, Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Account erstellen");
  20. name = initTextFeld(74, 20, 200, 20, TextFeld::Style::TextFeld, "Account Name");
  21. name->setTastaturEreignisParameter(this);
  22. name->setTastaturEreignis(registrierungNameTE);
  23. initToolTip(name, "Account Name.");
  24. fenster->addMember(dynamic_cast<Zeichnung*>(name->getThis()));
  25. passwort = initTextFeld(74, 50, 200, 20, TextFeld::Style::TextFeld, "Account Passwort");
  26. passwort->setTastaturEreignisParameter(this);
  27. passwort->setTastaturEreignis(registrierungPasswortTE);
  28. initToolTip(passwort, "Account Passwort.");
  29. fenster->addMember(dynamic_cast<Zeichnung*>(passwort->getThis()));
  30. passwort2 = initTextFeld(74, 80, 200, 20, TextFeld::Style::TextFeld, "Passwort wiederholen");
  31. passwort2->setTastaturEreignisParameter(this);
  32. passwort2->setTastaturEreignis(registrierungPasswort2TE);
  33. initToolTip(passwort2, "Account Passwort wiederhohlen.");
  34. fenster->addMember(dynamic_cast<Zeichnung*>(passwort2->getThis()));
  35. geheimnis = initTextFeld(10, 110, 328, 20, TextFeld::Style::TextFeld, "Account Geheimnis");
  36. geheimnis->setTastaturEreignisParameter(this);
  37. geheimnis->setTastaturEreignis(registrierungGeheimnisTE);
  38. initToolTip(geheimnis, "Gib etwas ein, was nur du jederzeit weißt.\n(zweites sicherheitspasswort Passwort)");
  39. fenster->addMember(dynamic_cast<Zeichnung*>(geheimnis->getThis()));
  40. eMail = initTextFeld(74, 140, 200, 20, TextFeld::Style::TextFeld, "E-Mail Addresse");
  41. eMail->setTastaturEreignisParameter(this);
  42. eMail->setTastaturEreignis(registrierungEMailTE);
  43. initToolTip(eMail, "E-Mail Addresse.");
  44. fenster->addMember(dynamic_cast<Zeichnung*>(eMail->getThis()));
  45. geburtsdatum = initTextFeld(40, 170, 85, 20, TextFeld::Style::Text, "Geburtsdatum:");
  46. fenster->addMember(dynamic_cast<Zeichnung*>(geburtsdatum->getThis()));
  47. text = initTextFeld(0, 5, 250, 150, TextFeld::Style::Mehrzeilig | TextFeld::Style::HCenter, "");
  48. fenster->addMember(dynamic_cast<Zeichnung*>(text->getThis()));
  49. gbdTag = initAuswahlBox(130, 167, 50, 20, AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund, {});
  50. gbdTag->addEintrag("Tag");
  51. for (int i = 0; i < 31; i++)
  52. {
  53. Text* txt = new Text("");
  54. txt->append(i + 1);
  55. gbdTag->addEintrag(txt);
  56. }
  57. gbdMonat = initAuswahlBox(185, 167, 65, 20, AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund, {});
  58. gbdMonat->addEintrag("Monat");
  59. for (int i = 0; i < 12; i++)
  60. {
  61. Text* txt = new Text("");
  62. txt->append(i + 1);
  63. gbdMonat->addEintrag(txt);
  64. }
  65. gbdJahr = initAuswahlBox(255, 176, 55, 20, AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund, {});
  66. gbdJahr->addEintrag("Jahr");
  67. for (int i = 2013; i > 1913; i--)
  68. {
  69. Text* txt = new Text("");
  70. txt->append(i + 1);
  71. gbdJahr->addEintrag(txt);
  72. }
  73. weiter = initKnopf(124, 200, 100, 20, Knopf::Style::Sichtbar, "Weiter");
  74. weiter->setMausEreignisParameter(this);
  75. weiter->setMausEreignis(registrierungWeiterME);
  76. fenster->addMember(dynamic_cast<Zeichnung*>(weiter->getThis()));
  77. zVorLoginFenster->addMember(dynamic_cast<Zeichnung*>(fenster->getThis()));
  78. fenster->addMember(dynamic_cast<Zeichnung*>(gbdTag->getThis()));
  79. fenster->addMember(dynamic_cast<Zeichnung*>(gbdMonat->getThis()));
  80. fenster->addMember(dynamic_cast<Zeichnung*>(gbdJahr->getThis()));
  81. }
  82. // Destruktor
  83. Registrierung::~Registrierung()
  84. {
  85. if (fenster)
  86. fenster = (Fenster*)fenster->release();
  87. if (name)
  88. name = (TextFeld*)name->release();
  89. if (passwort)
  90. passwort = (TextFeld*)passwort->release();
  91. if (passwort2)
  92. passwort2 = (TextFeld*)passwort2->release();
  93. if (geheimnis)
  94. geheimnis = (TextFeld*)geheimnis->release();
  95. if (eMail)
  96. eMail = (TextFeld*)eMail->release();
  97. if (geburtsdatum)
  98. geburtsdatum = (TextFeld*)geburtsdatum->release();
  99. if (gbdTag)
  100. gbdTag = (AuswahlBox*)gbdTag->release();
  101. if (gbdMonat)
  102. gbdMonat = (AuswahlBox*)gbdMonat->release();
  103. if (gbdJahr)
  104. gbdJahr = (AuswahlBox*)gbdJahr->release();
  105. if (weiter)
  106. weiter = (Knopf*)weiter->release();
  107. if (text)
  108. text = (TextFeld*)text->release();
  109. if (registrierung)
  110. registrierung = (Knopf*)registrierung->release();
  111. }
  112. // Privat
  113. void Registrierung::zeigeNachricht(const char* txt)
  114. {
  115. Punkt bildschirmmitte = uiFactory.initParam.bildschirm->getBackBufferSize() / 2;
  116. name->removeStyle(TextFeld::Style::Sichtbar);
  117. passwort->removeStyle(TextFeld::Style::Sichtbar);
  118. passwort2->removeStyle(TextFeld::Style::Sichtbar);
  119. geheimnis->removeStyle(TextFeld::Style::Sichtbar);
  120. eMail->removeStyle(TextFeld::Style::Sichtbar);
  121. geburtsdatum->removeStyle(TextFeld::Style::Sichtbar);
  122. gbdTag->removeStyle(TextFeld::Style::Sichtbar);
  123. gbdMonat->removeStyle(TextFeld::Style::Sichtbar);
  124. gbdJahr->removeStyle(TextFeld::Style::Sichtbar);
  125. fenster->setSize(250, 150);
  126. fenster->setPosition(bildschirmmitte.x - 125, bildschirmmitte.y - 75);
  127. weiter->setPosition(139, 100);
  128. weiter->setText("Ok");
  129. text->setText(txt);
  130. if (text->zText()->getLength() > 30)
  131. {
  132. int pos = -1;
  133. bool set = 0;
  134. int lastp = 0;
  135. for (int i = 20; i < text->zText()->getLength(); )
  136. {
  137. const char* tmp = &text->zText()->getText()[i];
  138. while (*tmp != ' ' && i < text->zText()->getLength())
  139. {
  140. tmp++;
  141. i++;
  142. if (i - 30 >= lastp)
  143. {
  144. if (set)
  145. {
  146. lastp = pos;
  147. set = 0;
  148. ((char*)text->zText()->getText())[pos] = '\n';
  149. }
  150. else
  151. lastp += 5;
  152. }
  153. }
  154. if (i < text->zText()->getLength())
  155. {
  156. pos = i;
  157. set = 1;
  158. tmp++;
  159. i++;
  160. }
  161. }
  162. }
  163. text->addStyle(TextFeld::Style::Sichtbar);
  164. }
  165. // Knopfdruck
  166. void Registrierung::druckFremdKnopf() // Ein anderer Knopfwurde gedrückt
  167. {
  168. fenster->removeStyle(Fenster::Style::Sichtbar);
  169. registrierung->setRahmenBreite(2);
  170. registrierung->setAlphaFeldFarbe(0x5500FF00);
  171. registrierung->setAlphaFeldStrength(-5);
  172. }
  173. bool Registrierung::nameTE(void* obj, TastaturEreignis te) // Tastaturereignis im Textfeld name
  174. {
  175. if (te.id == TE_Press && te.taste == T_Enter)
  176. return 0;
  177. if (te.id == TE_Release && (te.taste == T_Enter || te.taste == T_Tab))
  178. {
  179. name->removeStyle(TextFeld::Style::Fokus);
  180. passwort->addStyle(TextFeld::Style::Fokus);
  181. passwort->setAuswahl(0, passwort->zText()->getLength());
  182. }
  183. if (name->zText()->getLength() >= 25 && istSchreibbar(te.taste))
  184. return 0;
  185. return 1;
  186. }
  187. bool Registrierung::passwortTE(void* obj, TastaturEreignis te) // Tastaturereignis im Textfeld passwort
  188. {
  189. if (te.id == TE_Press && te.taste == T_Enter)
  190. return 0;
  191. if (te.id == TE_Press)
  192. passwort->setSchowChar('*');
  193. if (te.id == TE_Release && (te.taste == T_Enter || te.taste == T_Tab))
  194. {
  195. passwort->removeStyle(TextFeld::Style::Fokus);
  196. passwort2->addStyle(TextFeld::Style::Fokus);
  197. passwort2->setAuswahl(0, passwort2->zText()->getLength());
  198. }
  199. if (passwort->zText()->getLength() >= 25 && istSchreibbar(te.taste))
  200. return 0;
  201. return 1;
  202. }
  203. bool Registrierung::passwort2TE(void* obj, TastaturEreignis te) // Tastaturereignis im Textfeld passwort2
  204. {
  205. if (te.id == TE_Press && te.taste == T_Enter)
  206. return 0;
  207. if (te.id == TE_Press)
  208. passwort2->setSchowChar('*');
  209. if (te.id == TE_Release && (te.taste == T_Enter || te.taste == T_Tab))
  210. {
  211. passwort2->removeStyle(TextFeld::Style::Fokus);
  212. geheimnis->addStyle(TextFeld::Style::Fokus);
  213. geheimnis->setAuswahl(0, geheimnis->zText()->getLength());
  214. }
  215. if (passwort2->zText()->getLength() >= 25 && istSchreibbar(te.taste))
  216. return 0;
  217. return 1;
  218. }
  219. bool Registrierung::geheimnisTE(void* obj, TastaturEreignis te) // Tastaturereignis im Textfeld geheimnis
  220. {
  221. if (te.id == TE_Press && te.taste == T_Enter)
  222. return 0;
  223. if (te.id == TE_Release && (te.taste == T_Enter || te.taste == T_Tab))
  224. {
  225. geheimnis->removeStyle(TextFeld::Style::Fokus);
  226. eMail->addStyle(TextFeld::Style::Fokus);
  227. eMail->setAuswahl(0, eMail->zText()->getLength());
  228. }
  229. int selCount = 0;
  230. for (int i = 0; i < geheimnis->zText()->getLength(); i++)
  231. selCount += (int)geheimnis->isCharSelected(i);
  232. if (geheimnis->zText()->getLength() - selCount >= 50 && istSchreibbar(te.taste))
  233. return 0;
  234. return 1;
  235. }
  236. bool Registrierung::eMailTE(void* obj, TastaturEreignis te) // Tastaturereignis im Textfeld eMail
  237. {
  238. if (te.id == TE_Press && te.taste == T_Enter)
  239. return 0;
  240. if (te.id == TE_Release && (te.taste == T_Enter || te.taste == T_Tab))
  241. {
  242. eMail->removeStyle(TextFeld::Style::Fokus);
  243. gbdTag->addStyle(AuswahlBox::Style::Fokus);
  244. }
  245. if (eMail->zText()->getLength() >= 50 && istSchreibbar(te.taste))
  246. return 0;
  247. return 1;
  248. }
  249. bool Registrierung::weiterME(void* obj, MausEreignis me) // MausEreignis im Knopf weiter
  250. {
  251. if (me.id == ME_RLinks)
  252. {
  253. Punkt bildchirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
  254. if (fenster->zTitel()->istGleich("Erfolg"))
  255. {
  256. text->removeStyle(TextFeld::Style::Sichtbar);
  257. weiter->setPosition(124, 200);
  258. weiter->setText("Weiter");
  259. fenster->setSize(350, 262);
  260. fenster->setPosition(bildchirmGröße.x / 2 - 175, bildchirmGröße.y / 2 - 131);
  261. fenster->setTitel("Account erstellen");
  262. name->addStyle(TextFeld::Style::Sichtbar);
  263. passwort->addStyle(TextFeld::Style::Sichtbar);
  264. passwort2->addStyle(TextFeld::Style::Sichtbar);
  265. geheimnis->addStyle(TextFeld::Style::Sichtbar);
  266. eMail->addStyle(TextFeld::Style::Sichtbar);
  267. geburtsdatum->addStyle(TextFeld::Style::Sichtbar);
  268. gbdTag->addStyle(TextFeld::Style::Sichtbar);
  269. gbdMonat->addStyle(TextFeld::Style::Sichtbar);
  270. gbdJahr->addStyle(TextFeld::Style::Sichtbar);
  271. name->addStyle(TextFeld::Style::Fokus);
  272. name->setAuswahl(0, name->zText()->getLength());
  273. }
  274. else
  275. {
  276. if (weiter->zText()->istGleich("Ok"))
  277. {
  278. text->removeStyle(TextFeld::Style::Sichtbar);
  279. weiter->setPosition(124, 200);
  280. weiter->setText("Weiter");
  281. fenster->setSize(350, 262);
  282. fenster->setPosition(bildchirmGröße.x / 2 - 175, bildchirmGröße.y / 2 - 131);
  283. name->addStyle(TextFeld::Style::Sichtbar);
  284. passwort->addStyle(TextFeld::Style::Sichtbar);
  285. passwort2->addStyle(TextFeld::Style::Sichtbar);
  286. geheimnis->addStyle(TextFeld::Style::Sichtbar);
  287. eMail->addStyle(TextFeld::Style::Sichtbar);
  288. geburtsdatum->addStyle(TextFeld::Style::Sichtbar);
  289. gbdTag->addStyle(TextFeld::Style::Sichtbar);
  290. gbdMonat->addStyle(TextFeld::Style::Sichtbar);
  291. gbdJahr->addStyle(TextFeld::Style::Sichtbar);
  292. name->addStyle(TextFeld::Style::Fokus);
  293. name->setAuswahl(0, name->zText()->getLength());
  294. }
  295. else if (passwort2->zText()->istGleich(passwort->zText()->getText()))
  296. {
  297. if (name->zText()->getLength() == 0 ||
  298. passwort->zText()->getLength() == 0 ||
  299. geheimnis->zText()->getLength() == 0 ||
  300. eMail->zText()->getLength() == 0)
  301. {
  302. if (name->zText()->getLength() == 0)
  303. zeigeNachricht("Bitte gebe einen Accountnamen ein.");
  304. else if (passwort->zText()->getLength() == 0)
  305. zeigeNachricht("Bitte gebe ein Accountpasswort ein.");
  306. else if (geheimnis->zText()->getLength() == 0)
  307. zeigeNachricht("Bitte gebe ein Accountgeheimnis ein. Dieß wird benötig, wenn du deinen Accountnamen oder dein Accountpasswort vergisst.");
  308. else if (eMail->zText()->getLength() == 0)
  309. zeigeNachricht("Bitte gebe deine E-Mail Addresse ein. Diese benötigen wir, um dir den Bestätigungscode für deinen Account zu senden.");
  310. return 1;
  311. }
  312. Datum* gebDat = new Datum();
  313. gebDat->setDatum(1, 1, 1);
  314. bool ok = 1;
  315. do
  316. {
  317. if (!gbdTag->getAuswahl() || !gbdMonat->getAuswahl() || !gbdJahr->getAuswahl())
  318. {
  319. ok = 0;
  320. break;
  321. }
  322. int jahr = TextZuInt(gbdJahr->zEintrag(gbdJahr->getAuswahl())->zText()->getText(), 10);
  323. gebDat->setJahr(jahr);
  324. gebDat->setMonat(gbdMonat->getAuswahl());
  325. gebDat->setTag(gbdTag->getAuswahl());
  326. if (jahr != gebDat->getJahr() || gbdMonat->getAuswahl() != gebDat->getMonat() || gbdTag->getAuswahl() != gebDat->getTag())
  327. {
  328. ok = 0;
  329. break;
  330. }
  331. } while (0);
  332. if (ok)
  333. new AktionsThread(15, name->zText()->getText(), passwort->zText()->getText(), geheimnis->zText()->getText(), eMail->zText()->getText(), gebDat->getThis());
  334. else
  335. zeigeNachricht("Bitte gebe ein gültiges Geburtsdatum an.");
  336. gebDat = (Datum*)gebDat->release();
  337. }
  338. else
  339. zeigeNachricht("Das wiederhohlte Passwort stimmt nicht mit dem Passwort überein.");
  340. }
  341. }
  342. return 1;
  343. }
  344. bool Registrierung::registrierungME(void* obj, MausEreignis me) // MausEreignis im Knopf registrierung
  345. {
  346. if (me.id == ME_RLinks)
  347. {
  348. vorLogin->setRegistrierung();
  349. fenster->addStyle(Fenster::Style::Sichtbar);
  350. registrierung->setRahmenBreite(3);
  351. registrierung->setAlphaFeldFarbe(0xFF000000);
  352. registrierung->setAlphaFeldStrength(20);
  353. Punkt bildchirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
  354. text->removeStyle(TextFeld::Style::Sichtbar);
  355. weiter->setPosition(124, 200);
  356. weiter->setText("Weiter");
  357. fenster->setSize(350, 262);
  358. fenster->setPosition(bildchirmGröße.x / 2 - 175, bildchirmGröße.y / 2 - 131);
  359. fenster->setTitel("Account erstellen");
  360. name->addStyle(TextFeld::Style::Sichtbar);
  361. passwort->addStyle(TextFeld::Style::Sichtbar);
  362. passwort2->addStyle(TextFeld::Style::Sichtbar);
  363. geheimnis->addStyle(TextFeld::Style::Sichtbar);
  364. eMail->addStyle(TextFeld::Style::Sichtbar);
  365. geburtsdatum->addStyle(TextFeld::Style::Sichtbar);
  366. gbdTag->addStyle(TextFeld::Style::Sichtbar);
  367. gbdMonat->addStyle(TextFeld::Style::Sichtbar);
  368. gbdJahr->addStyle(TextFeld::Style::Sichtbar);
  369. name->addStyle(TextFeld::Style::Fokus);
  370. name->setAuswahl(0, name->zText()->getLength());
  371. }
  372. return 1;
  373. }
  374. void Registrierung::setWeiterReturn(bool ret) // setzt den Weiter Returnwert
  375. {
  376. Punkt bildchirmGröße = uiFactory.initParam.bildschirm->getBackBufferSize();
  377. if (ret)
  378. {
  379. name->removeStyle(TextFeld::Style::Sichtbar);
  380. passwort->removeStyle(TextFeld::Style::Sichtbar);
  381. passwort2->removeStyle(TextFeld::Style::Sichtbar);
  382. geheimnis->removeStyle(TextFeld::Style::Sichtbar);
  383. eMail->removeStyle(TextFeld::Style::Sichtbar);
  384. geburtsdatum->removeStyle(TextFeld::Style::Sichtbar);
  385. gbdTag->removeStyle(TextFeld::Style::Sichtbar);
  386. gbdMonat->removeStyle(TextFeld::Style::Sichtbar);
  387. gbdJahr->removeStyle(TextFeld::Style::Sichtbar);
  388. fenster->setSize(250, 200);
  389. fenster->setPosition(bildchirmGröße.x / 2 - 125, bildchirmGröße.y / 2 - 100);
  390. fenster->setTitel("Erfolg");
  391. weiter->setPosition(20, 145);
  392. weiter->setText("Ok");
  393. text->setText("Dir wurde eine E-Mail mit einem\naktivierungslink zugeschickt,\nden du in den nächsten 12 Stunden\nbenutzen musst.");
  394. text->addStyle(TextFeld::Style::Sichtbar);
  395. }
  396. else if (lastError.getLength())
  397. zeigeNachricht(lastError);
  398. }
  399. // Ereignisse
  400. bool registrierungNameTE(void* p, void* obj, TastaturEreignis te)
  401. {
  402. if (!p)
  403. return 0;
  404. return ((Registrierung*)p)->nameTE(obj, te);
  405. }
  406. bool registrierungPasswortTE(void* p, void* obj, TastaturEreignis te)
  407. {
  408. if (!p)
  409. return 0;
  410. return ((Registrierung*)p)->passwortTE(obj, te);
  411. }
  412. bool registrierungPasswort2TE(void* p, void* obj, TastaturEreignis te)
  413. {
  414. if (!p)
  415. return 0;
  416. return ((Registrierung*)p)->passwort2TE(obj, te);
  417. }
  418. bool registrierungGeheimnisTE(void* p, void* obj, TastaturEreignis te)
  419. {
  420. if (!p)
  421. return 0;
  422. return ((Registrierung*)p)->geheimnisTE(obj, te);
  423. }
  424. bool registrierungEMailTE(void* p, void* obj, TastaturEreignis te)
  425. {
  426. if (!p)
  427. return 0;
  428. return ((Registrierung*)p)->eMailTE(obj, te);
  429. }
  430. bool registrierungWeiterME(void* p, void* obj, MausEreignis me)
  431. {
  432. if (!p)
  433. return 0;
  434. return ((Registrierung*)p)->weiterME(obj, me);
  435. }
  436. bool registrierungRegistrierungME(void* p, void* obj, MausEreignis me)
  437. {
  438. if (!p)
  439. return 0;
  440. return ((Registrierung*)p)->registrierungME(obj, me);
  441. }