Dynamicznie tworzenie TWebBrowser na PageControl

dział ogólny

Dynamicznie tworzenie TWebBrowser na PageControl

Nowy postprzez Darek_C++ » Å›roda, 14 października 2009, 18:08

Witam ponownie,

Jak po kliknięciu buttona utworzyć nową zakładkę na PageControl, a w niej WebBrowser? Jak się odwoływac do tego komponentu?
Czy jest to w praktyce możliwe ?

Pozdrawiam ALL
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
PodziÄ™kowaÅ‚ : 66
OtrzymaÅ‚ podziÄ™kowaÅ„: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    NieznanyNieznana

Re: Dynamicznie tworzenie TWebBrowser na PageControl

Nowy postprzez Cyfrowy Baron » Å›roda, 14 października 2009, 18:29

Nie jestem tego całkowicie pewien, ale gdzieś kiedyś czytałem, że kontrolki TCppWebBrowser i TWebBrowser nie da się tworzyć dynamicznie, ale mogę się mylić.

Co do tworzenia czegokolwiek dynamicznie i wrzucania tego na PageControl, no to robi się to tak samo jak z każdym innym komponentem, tylko jako rodzica ustawiasz takiemu dynamicznemu obiektowi zakładkę obiektu PageControl, poprzez funkcję Parent, np:

Kod: Zaznacz cały
TPanel *MyPanel = new TPanel(this);
MyPanel->Parent = TabSheet1; // TabSheet1 to zakładka obiektu PageConotrl


Co do odwoływania sie do takiego obiektu, to nic się tutaj nie zmienia, nie ma znaczenia, że jest on na zakładce PageControl, to identycznie jak gdyby był na obiekcie Panel czy dowolnym innym obiekcie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Dynamicznie tworzenie TWebBrowser na PageControl

Nowy postprzez Darek_C++ » Å›roda, 14 października 2009, 18:57

Czyli mam na formie komponent PageControl1 i jak po kliknięciu w button tworzyć na min panele ?
Czyli tak jak tu: http://forum.4programmers.net/viewtopic.php?id=70066
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
PodziÄ™kowaÅ‚ : 66
OtrzymaÅ‚ podziÄ™kowaÅ„: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    NieznanyNieznana

Re: Dynamicznie tworzenie TWebBrowser na PageControl

Nowy postprzez Darek_C++ » Å›roda, 14 października 2009, 19:08

Wygoglałem jak tworzyć:
Kod: Zaznacz cały
void __fastcall TForm1::Button2Click(TObject *Sender)
{

   TTabSheet *pTabSheet = new TTabSheet(PageControl1);
   pTabSheet->PageControl = PageControl1;
   pTabSheet->Caption = "New Tab";

   TWebBrowser * MyWebBrowser = new TWebBrowser(pTabSheet);
   pTabSheet->InsertControl(MyWebBrowser);
   TWinControl(MyWebBrowser).Parent = PageControl1;
   MyWebBrowser->Align = alClient;
   MyWebBrowser->Visible = true;
   MyWebBrowser->Navigate("http://www.google.co.uk");
}

http://www.[spam]/viewthread.cfm? ... 659&page=1
Ale jak się odwoływać do poszczególnych dynamicznie utworzonych okien WebBrowser1 i ich zdarzeń np:
Kod: Zaznacz cały
void __fastcall TForm1::WebBrowser1DocumentComplete(TObject *ASender,     const IDispatch *pDisp, OleVariant &URL)
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
PodziÄ™kowaÅ‚ : 66
OtrzymaÅ‚ podziÄ™kowaÅ„: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    NieznanyNieznana

Re: Dynamicznie tworzenie TWebBrowser na PageControl

Nowy postprzez Cyfrowy Baron » Å›roda, 14 października 2009, 21:33

Zadajesz zbyt ogólne pytania. Do obiektów dynamicznych zawsze odwołujesz się tak samo. Do zdarzeń obiektu dynamicznego nie możesz się odwołać, musisz je utworzyć, np:

plik nagłówkowy:
Kod: Zaznacz cały
private:
        void __fastcall MyButtonClick(TObject *Sender);


Kod: Zaznacz cały
TButton *MyButton = new TButton(this);
MyButton->Parent = this;
MyButton->Left = 8;
MyButton->Top = 100;

MyButton->OnClick = MyButtonCLick;
//-------------------------------------------
void __fastcall TForm1::MyButtonClick(TObject *Sender)
{
// jakieÅ› zadanie do wykonania...
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Dynamicznie tworzenie TWebBrowser na PageControl

Nowy postprzez Darek_C++ » Å›roda, 14 października 2009, 21:48

Cyfrowy Baron napisał(a): Do obiektów dynamicznych zawsze odwołujesz się tak samo. Do zdarzeń obiektu dynamicznego nie możesz się odwołać, musisz je utworzyć
Tylko, że w tym wypadku to nie działa, bo zgłaszany jest błąd:
Kod: Zaznacz cały
//w Unit1.h
private:   // User declarations
   void __fastcall MyWebBrowser1DocumentComplete(TObject *ASender,const IDispatch *pDisp, OleVariant &URL); // Skaldnia jak z metody w Events

///w Unit1.cpp
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TTabSheet *pTabSheet = new TTabSheet(PageControl1);
   pTabSheet->PageControl = PageControl1;
   pTabSheet->Caption = "New Tab";

   TWebBrowser * MyWebBrowser = new TWebBrowser(pTabSheet);
   pTabSheet->InsertControl(MyWebBrowser);
   TWinControl(MyWebBrowser).Parent = PageControl1;
   MyWebBrowser->Align = alClient;
   MyWebBrowser->Visible = true;
   MyWebBrowser->Navigate("http://www.google.co.uk");

   MyWebBrowser->OnDocumentComplete = MyWebBrowser1DocumentComplete; // Przypisanie do zdarzenia
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyWebBrowser1DocumentComplete(TObject *ASender,const IDispatch *pDisp, OleVariant &URL)
{
   // Jakies dzialanie
}

I mamy niestety error :(

[C++ Error] Unit1.cpp(29): E2034 Cannot convert 'void (_fastcall * (_closure )(TObject *,const IDispatch *,OleVariant &))(TObject *,const IDispatch *,OleVariant &)' to 'TWebBrowserDocumentComplete'
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
PodziÄ™kowaÅ‚ : 66
OtrzymaÅ‚ podziÄ™kowaÅ„: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    NieznanyNieznana

Re: Dynamicznie tworzenie TWebBrowser na PageControl

Nowy postprzez Cyfrowy Baron » Å›roda, 14 października 2009, 21:52

Bo jak pisałem w swoim pierwszym wątku, gdzieś czytałem, ze nie można tworzyć kontrolek ActiveX dynamicznie, tzn. dają się utworzyć dynamicznie, ale nie można dodać obsługi zdarzeń, gdyż to nie są komponenty lecz kontrolki bazujące na gotowych bibliotekach chyba OCX i DLL.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Dynamicznie tworzenie TWebBrowser na PageControl

Nowy postprzez Darek_C++ » Å›roda, 14 października 2009, 22:01

:) RozwiÄ…zanie jest tutaj: http://www.[spam]/3/3/5270.html
----
A jak mogę zamknąć dynamicznie otwartą zakładkę ?
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
PodziÄ™kowaÅ‚ : 66
OtrzymaÅ‚ podziÄ™kowaÅ„: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    NieznanyNieznana

Re: Dynamicznie tworzenie TWebBrowser na PageControl

Nowy postprzez Witold » czwartek, 15 października 2009, 00:10

Darek_C++ napisał(a):A jak mogę zamknąć dynamicznie otwartą zakładkę ?


Próbowałeś przez: delete wsk_TTabSheeta; ?
Można by jeszcze utrzymywać zawsze pewną pulę zakładek, a niepotrzebne w danym momencie ustawiać na jako niewidoczne.

TWinControl(MyWebBrowser).Parent = PageControl1;


O co w tym chodzi ?
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Dynamicznie tworzenie TWebBrowser na PageControl

Nowy postprzez wargo » czwartek, 15 października 2009, 15:12

Lepszym pomysłem na tworzenie zakładek z tą samą zawartością byłoby użycie komponentu TabControl
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana


Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 7 gości

cron