Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » TOleContainer mehrfach verwenden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.12.2005, 10:42 Uhr
~Paul123
Gast


Hallo,

ich möchte in meinem Formular über einen Button eine PDF-Datei öffnen. Das klappt auch soweit.
Dazu benutze ich einen Button und ein TOleContainer zum anzeigen.
Nun muß ich aber, auf diesem Formular, mehrere PDF-Dateien öffnen. Für jede Datei habe ich einen separaten Button, muß ich nun auch noch für jede Datei ein TOleContainer haben ?

Ich habe das schonmal mit mehreren Buttons und einem Container ausprobiert, aber beim öffnen der zweiten Datei wird die erste immer wieder geschlossen.

Kennt jemand eine Methode, wie man den TOleContainer dazu kriegen kann mehrere ( gleichzeitig geöffnete ) Dateien anzuzeigen ?

Bin für jede Hilfe dankbar.
Gruß
Paul
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.12.2005, 17:06 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
wie sieht es aus wenn Du @runtime einen neuen TOleContainer instanzierst und wenn Du das Objekt nicht mehr brauchst wieder freigibst

C++:

TOleContainer* oct = new TOleContainer(this);
.... // mach was
delete oct;


--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 14.12.2005 um 17:06 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.12.2005, 15:50 Uhr
~Paul123
Gast


Hallo Uwe,

da bekomme ich die Fehlermeldung :

Element " hat kein übergeordnetes Fenster.

Ich habe keine Ahnung was das bedeutet, bzw. wo der Fehler liegt. Verstehst du diese Meldung?

Gruß Paul
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.12.2005, 18:44 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Paul,
bin im Moment unterwegs und hab keinen BCB dabei. Wenn die Sache bis morgen Zeit hat werde ich es mal prüfen.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.12.2005, 19:59 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
falls noch Bedarf ist:

Header:

C++:
//---------------------------------------------------------------------------

#ifndef frmMainH
#define frmMainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <OleCtnrs.hpp>
#include <Tabs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // Von der IDE verwaltete Komponenten
    TMainMenu *mnuMain;
    TMenuItem *mnuFile;
    TMenuItem *mnuNew;
    TMenuItem *mnuDel;
    TTabSet *TabSet;
    void __fastcall mnuNewClick(TObject *Sender);
    void __fastcall TabSetChange(TObject *Sender, int NewTab,
          bool &AllowChange);
    void __fastcall FormDestroy(TObject *Sender);
    void __fastcall mnuDelClick(TObject *Sender);
private:
    bool bCall;
    TList* OleCollection;
    TOleContainer* CreateOleContainer();
    TOleContainer* VisibleContainer;
    void AddOleContainer(TOleContainer*);
    void ShowContainer(int idx);    // Anwender-Deklarationen
public:        // Anwender-Deklarationen
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Implementierung:

C++:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "frmMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  OleCollection = new TList();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::mnuNewClick(TObject *Sender)
{
  TOleContainer* pNewContainer = CreateOleContainer();
  if(pNewContainer->InsertObjectDialog())
  {
    AddOleContainer(pNewContainer);
   // Edit - wird durch AddOleContainer() aufgerufen  
   // ShowContainer(TabSet->Tabs->Count-1);
  }else
  {
    delete pNewContainer;
  }
}
//---------------------------------------------------------------------------

TOleContainer* TForm1::CreateOleContainer()
{
   TOleContainer* pCont =  new TOleContainer(this);
   pCont->Parent = this;
   pCont->Visible = true;
   pCont->Align = alClient;
   return pCont;
}

void TForm1::AddOleContainer(TOleContainer* c)
{
    OleCollection->Add(c);
    TabSet->TabIndex = TabSet->Tabs->Count-1;
    TabSet->Tabs->Add("Objekt "+IntToStr(TabSet->Tabs->Count)+ " - " + c->OleClassName);
   ShowContainer(TabSet->Tabs->Count-1);
}

void TForm1::ShowContainer(int idx)
{
     if (!bCall){
        bCall = true; // sonst wird eine Rekursion durch TabSet->TabIndex ausgeloest!!!
        try
        {
           if(!VisibleContainer==NULL)
              VisibleContainer->Visible=false;
           if((idx>=0)&&(OleCollection->Count > idx))
           {
            VisibleContainer = reinterpret_cast<TOleContainer*>(OleCollection->Items[idx]);
            VisibleContainer->Visible=True;
            ActiveControl=VisibleContainer;
            TabSet->TabIndex=idx;
           }else{
              VisibleContainer=NULL;
              TabSet->TabIndex=-1;
            }
        } // Edit
         /*catch (Exception &ex){
           ShowMessage(ex.Message);
         }*/

         __finally{
             bCall = false;
         }
      }
}
void __fastcall TForm1::TabSetChange(TObject *Sender, int NewTab,
      bool &AllowChange)
{
   ShowContainer(NewTab);
  // Edit
  // bCall = false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  delete OleCollection;    
}
//---------------------------------------------------------------------------


Verbesserungswürdig, aber funzt...
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 18.12.2005 um 17:14 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: