Methodenaufruf im aktiven Child-Fenster



  • [cpp] Hallo Profis

    Ich habe eine Frage, in Childfenster habe ich das eigentliche Programm erstellt. Nun möchte ich mittels Button im MainFrame auf Methoden im Child-Fenster zugreifen. Dies funktioniert so weit, aber immer nur im ersten geöffneten Fenster, also wenn ich ein neues Child öffne und auf die Buttons klicke, geschehen die Änderungen nur im ersten.

    Wie kann ich bewerkstelligen, dass diese Aufrufe nur im aktiven Child-Fenster geschehen?

    Mittels frmMDIChild->... kann ich auf diese Methoden zugreifen, muss also nur noch im richtigen Fenster geschehen!

    Code MainFrame.h

    //---------------------------------------------------------------------------

    #ifndef MDIFrameH
    #define MDIFrameH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <Menus.hpp>
    #include <ComCtrls.hpp>
    #include <ImgList.hpp>
    #include <ToolWin.hpp>
    //---------------------------------------------------------------------------
    class TfrmMDIFrame : public TForm
    {
    __published: // Von der IDE verwaltete Komponenten
    TMainMenu *m_mnuMain;
    TMenuItem *Datei1;
    TMenuItem *Neu1;
    TMenuItem *Schliessen1;
    TMenuItem *Allesschliessen1;
    TMenuItem *Beenden1;
    TMenuItem *Fenster1;
    TMenuItem *Horizontal1;
    TMenuItem *Vertikal1;
    TMenuItem *berlappend1;
    TMenuItem *Ikonsanordnen1;
    TMenuItem *Hilfe1;
    TMenuItem *ber1;
    TToolBar *ToolBar1;
    TToolButton *ToolButton1;
    TImageList *ImageList1;
    TToolButton *ToolButton2;
    TToolButton *ToolButton3;
    TToolButton *ToolButton4;
    TToolButton *ToolButton5;
    TToolButton *ToolButton6;
    TToolButton *ToolButton7;
    TToolButton *ToolButton8;
    TToolButton *ToolButton9;
    TToolButton *ToolButton10;
    TToolButton *ToolButton11;
    TToolButton *ToolButton12;
    TToolButton *ToolButton13;
    TToolButton *ToolButton14;
    TToolButton *ToolButton15;
    TToolButton *ToolButton16;
    void __fastcall Horizontal1Click(TObject *Sender);
    void __fastcall Vertikal1Click(TObject *Sender);
    void __fastcall berlappend1Click(TObject *Sender);
    void __fastcall Ikonsanordnen1Click(TObject *Sender);
    void __fastcall Neu1Click(TObject *Sender);
    void __fastcall Schliessen1Click(TObject *Sender);
    void __fastcall Allesschliessen1Click(TObject *Sender);
    void __fastcall Beenden1Click(TObject *Sender);
    void __fastcall ToolButton5Click(TObject *Sender);
    void __fastcall ToolButton11Click(TObject *Sender);
    void __fastcall ToolButton12Click(TObject Sender);
    private: // Anwender-Deklarationen
    public: // Anwender-Deklarationen
    __fastcall TfrmMDIFrame(TComponent
    Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TfrmMDIFrame *frmMDIFrame;
    //---------------------------------------------------------------------------
    #endif

    Code MainFrame.cpp

    //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include "MDIFrame.h"
    #include "MDIChild.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TfrmMDIFrame frmMDIFrame;
    //---------------------------------------------------------------------------
    __fastcall TfrmMDIFrame::TfrmMDIFrame(TComponent
    Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TfrmMDIFrame::Horizontal1Click(TObject *Sender)
    {
    TileMode = tbHorizontal;
    Tile();
    }
    //---------------------------------------------------------------------------

    void __fastcall TfrmMDIFrame::Vertikal1Click(TObject *Sender)
    {
    TileMode = tbVertical;
    Tile();
    }
    //---------------------------------------------------------------------------

    void __fastcall TfrmMDIFrame::berlappend1Click(TObject *Sender)
    {
    Cascade();
    }
    //---------------------------------------------------------------------------

    void __fastcall TfrmMDIFrame::Ikonsanordnen1Click(TObject *Sender)
    {
    ArrangeIcons();
    }
    //---------------------------------------------------------------------------

    void __fastcall TfrmMDIFrame::Neu1Click(TObject *Sender)
    {
    TfrmMDIChild *pMIDChild = new TfrmMDIChild(this);
    /* if (pMIDChild->m_OleContainer->InsertObjectDialog()){
    if (pMIDChild->m_OleContainer->NewInserted){
    pMIDChild->m_OleContainer->DoVerb(ovPrimary);
    }
    } */
    }
    //---------------------------------------------------------------------------

    void __fastcall TfrmMDIFrame::Schliessen1Click(TObject *Sender)
    {
    if (ActiveMDIChild != NULL){
    ActiveMDIChild->Close();
    }
    }
    //---------------------------------------------------------------------------

    void __fastcall TfrmMDIFrame::Allesschliessen1Click(TObject *Sender)
    {
    for (int i = 0; i < MDIChildCount; i++){
    MDIChildren[i]->Close();
    }
    }
    //---------------------------------------------------------------------------

    void __fastcall TfrmMDIFrame::Beenden1Click(TObject *Sender)
    {
    Close();
    }
    //---------------------------------------------------------------------------

    void __fastcall TfrmMDIFrame::ToolButton5Click(TObject *Sender)
    {
    if (ActiveMDIChild != NULL){
    ActiveMDIChild->Close();
    }
    }
    //---------------------------------------------------------------------------

    void __fastcall TfrmMDIFrame::ToolButton11Click(TObject *Sender)
    {
    if (ActiveMDIChild != NULL){
    frmMDIChild->Undo();
    }
    }
    //---------------------------------------------------------------------------

    void __fastcall TfrmMDIFrame::ToolButton12Click(TObject *Sender)
    {
    if (ActiveMDIChild != NULL){
    frmMDIChild->Redo();
    }
    }
    //---------------------------------------------------------------------------

    Besten Dank für Eure Antworten

    Gomso



  • Hallo

    - das gehört ins Builder-Subforum
    - benutze für Posten von Code hier im Forum die CPP-Tags
    - siehe die Eigenschaft TCustomForm::ActiveMDIChild in der BCB-Hilfe

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Du mußt die Variable 'ActiveMDIChild' verwenden, z.B.

    if (ActiveMDIChild != NULL)
      static_cast<TMDIChild*>(ActiveMDIChild)->Undo();
    

    Der static_cast ist erforderlich, da das MDI-Formular irgendwelche TForms als Child engegennehmen kann, du hier aber eben dein spezielles MDIChild benötigst.



  • Th schrieb:

    Du mußt die Variable 'ActiveMDIChild' verwenden, z.B.

    if (ActiveMDIChild != NULL)
      static_cast<TMDIChild*>(ActiveMDIChild)->Undo();
    

    Der static_cast ist erforderlich, da das MDI-Formular irgendwelche TForms als Child engegennehmen kann, du hier aber eben dein spezielles MDIChild benötigst.

    hey, genau das wollte ich, wäre ich nie darauf gekommen, Du bist einsame Spitze, besten Dank



  • Du bist einsame Spitze, besten Dank

    Bin ja auch Profi!


Anmelden zum Antworten