Portierung von Delphi -> C++ (Problem mit TObject und ClassName)
-
Hi
ich portiere ein Programm von Delphi nach c++ mit wx, da hab ich jetzt die se Procedure
procedure StatChange(Sender: TObject); begin if Sender.ClassName = TBSModul.ClassName ... if Application.Terminated then break; Application.ProcessMessages;
1. wie bekomme ich ein allgemeines Objekt also ein Tobjekt in wx hin?
2. Wie setzt ich das mit den ClassName um, hab da noch keine konkretten Vorstellungen außer vielleicht mit wxClassInfo
3. und zu Guter letzt wie prüf ich ob das Progamm Terminiert ist und was ist PrcessMessages(aktuallisiert das das display, bzw refresht es das)?
-
-
TObject wäre in wx wohl wxObject
-
wxObject hat auch die Funktion: wxClassInfo* GetClassInfo(), mit der man auf Klasseninformationen zugreifen kann
oder nach der Art (obj = wxObject):
bool tmp = obj->IsKindOf( CLASSINFO(wxFrame) ); -
Application.ProcessMessages verarbeitet wohl noch in der Nachrichtenschleife anstehende Nachrichten
bei wxApp müsstes du mal schauen (wxApp::IsMainLoopRunning, wxApp::IsActive)
-
-
Ich glaube das ist keine gute Idee, wenn du das 1:1 "portierst".
Bitte lies dir doch mal die Tutorials zu wxWidgets im Magazin durch, und ein Blick in die Doku könnte dir auch weiterhelfen:
http://docs.wxwidgets.org/stable/wx_classesbycat.html#classesbycat
-
Danke erstmal, mal wieder
ja in der wxapp steht das richtige drin
also bis jetzt funktioniert meine fast 1:1 Portierung
ich übernehm ja nicht alles
-
hab gerade noch geschaut
aber es gibt weiterhin probleme mit derif Sender.ClassName = TBSModul.ClassName
portierung
hat noch jemand ne idee?
-
Schau mal in wx-Doku nach "Runtime class information " bzw RTTI.
Du musst in der Klasse TBSModul in .h "DECLARE_DYNAMIC_CLASS (myclass)" und in .cpp "IMPLEMENT_DYNAMIC_CLASS(myclass, wxObject)" schreiben.
dann in deiner StatChange:
if ( Sender->IsKindOf( CLASSINFO(TBSModul) ) )
TBSModul ist der Klassenname ( Sender ist ein Objekt von TBSModul ).
Update: es gibt auch DECLARE_ABSTRACT_CLASS usw., deine Klasse TBSModul muss mindestens von wxObject abgeleitet sein.
-
Danke,
Wer lesen kann ist klar im Vorteil!!!
This class stores meta-information about classes. Instances of this class are not generally defined directly by an application, but indirectly through use of macros such as DECLARE_DYNAMIC_CLASS and IMPLEMENT_DYNAMIC_CLASS.
gut hatte ich vergessen, danke für den hinweis
-
Alternativ kannst du auch dynamic_cast nutzen.
Damit kannst du dann auf einen entsprechenden Klassenpointer casten, wenn die Klasse den Typ hat, ist der pointer ok, sonst 0.