Problem mit TThemeMgr und MDI App (Child)



  • Damit auch TBitBtn und TSpeedButton unter BCB6 mit Windows-Theming laufen benutze ich den TThemeMgr von dieser Seite http://www.soft-gems.net/index.php?option=com_content&task=view&id=17&Itemid=33.

    Das klappt soweit ganz gut, wenn ich aber aus einem MDI-Child heraus ein anderes MDI-Child erzeuge und den Owner auf das aufrufende MDI-Child setze, bleiben die Buttons ohne Theme-Style.
    Setze ich zusätzlich das Parent auf die Mainform, funktioniert es, aber beim Schliessen des 2. Childs bekomme ich einen EAccessViolation.

    Hier mal den Code:

    in der MainForm:

    TMDIChild *Child;
    Child = new TMDIChild(Application);
    // Theming fuer TBitBtn funktioniert
    

    im gerade erzeugten Child:

    TChildChildForm *newChild;
    newChild = new TChildChildForm(this);
    newChild->Parent = MainForm;
    // Theming fuer TBitBtn funktioniert auch, dank des Setzen des Parent,
    // ohne setzen des Parent, kein Theming
    

    Ich muss beim Erzeugen des 2. Childs den Owner mit this setzen, damit das Child automatisch auch geschlossen wird, wenn ich das 1. Child schliesse.
    Das Problem liegt hier beim Setzen des Parent, denke ich. Die Anzeige funktioniert, jedoch gibts halt beim Beenden die Zugriffsverletzung.

    Benutze ich ::SetParent() der Windows API, funktionert es, hat aber andere unschöne Nebeneffekte.

    Oder kann ich den TThemeMgr irgendwie dazu bringen auch das 2. Child zu themem, auch wenn ich nicht den Owner MainForm hat?
    Falls jemand mit dem TThemeMgr Erfahrung hat, oder auch ne Idee wie ich das Parent korrekt setze, bitte melden.

    MfG



  • Erfahrungen zu TThemeMgr habe ich leider nicht, aber du kannst deine
    Anwendung über hinzufügen eines Manifestes zum Theming "überreden"
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39251.html



  • Danke, hab ich schon gemacht, jedoch wird der TBitBtn, TSpeedButton und die TGroupBox nicht gethemed. Deswegen noch zusätzlich den TThemeMgr.

    MfG


Anmelden zum Antworten