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;
//---------------------------------------------------------------------------
#endifCode 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-Hilfebis 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!