Ver Mensaje Individual
  #9  
Antiguo 22-12-2009
Robin1 Robin1 is offline
Miembro
 
Registrado: nov 2009
Posts: 14
Reputación: 0
Robin1 Va por buen camino
Hola, y mil gracias, tanto Voldemmor, como rrf, por responder.

En verdad que esta vez si que estoy perdido con esto.

Explicaré inicialmente, qué es lo que pretendo, y como va la cosa.

La aplicación en cuestión, es un navegador de Internet personalizado, que se basa en el motor de renderizado Gecko de Mozilla Firefox.

Entonces, el Form1, es en donde se encuentra toda la interfaz (lastima no poder mostrar fotos) de usuario, es decir, el navegador, la barra de navegación, los tabs, todos los controles, etc.

El Form2, es un Form estilo "About".

Qué sucede entonces:

En el form1 hay por ejemplo, un menú en la parte superior contextual, que tiene esta opción: "New Tab".

De este modo, al dar click sobre este comando, se desencadena el siguiente evento:

Código:
procedure TForm1.NewTab1Click(Sender: TObject);
var
 NewTab: TTabSheet;
    NewBrowser: TGeckoBrowser;
     PageControl1: TPageControl; //Solo en el procedimiento Reset, de momento es utilizada esta variable.

begin
 //Todo procedimiento que incluya nuevos elementos, y carga de Internet, debe primero pasar por una verificación del PingBrowser.
   PingBrowser.Navigate('Pagina de Google');
    
NewTab := TTabSheet.Create(Self);  //Se crea la nueva pestaña
     NewTab.Caption := '   Tab   ' + IntToStr(PageControl1.PageCount + 1); //Consecutivo de Nombres para cada pestaña
      NewTab.PageControl := PageControl1; //El contenedor de la pestaña sera un PageControl

         NewBrowser := TGeckoBrowser.Create(Self);
          NewBrowser.Parent := NewTab;
           NewBrowser.Align:= alClient;

            PageControl1.ActivePage := NewTab; //Se activa la pestaña. Esta parte es la clave, para que Gecko se cargue en la pestaña a la que debe ir. Sin esto, nunca funcionará nada.

            if Pos('Connected', ConnectionStatus.Text) > 0 then
                   NewBrowser.LoadURI('La pagina a la que Gecko debe dirigirse')
            else
              begin

                TOleControl(ErrorBrowser).Visible := True;
                 TOleControl(ErrorBrowser).Align:= alClient;
                  ErrorBrowser.Navigate('file:///' + ExtractFilePath(ParamStr(0)) + 'res\html\war\ConnectionFail.html');
              end;
end;
Entonces, de este modo, se va creando cada pestaña, en el Form1.

Qué sucede entonces con el Form2?

Bien, en el Form2 tengo un Label que dice: "Preguntas Frecuentes", de este modo, si el usuario Clickea este Label, el navegador debe redirigir abriendo un nuevo Tab en el form1, hacia la página Web, en donde está la sección de preguntas frecuentes.

Básicamente esa es la cuestión, ya viéndolo un poco mas aterrizado en la práctica.

Que observo:

Cualquier procedimiento que esté tanto en el form1 o en el Form2, si lo paso a la sección "Public" de inmediato el compilador genera una excepción (Uso Delphi 7), y el programa no se deja compilar.

De este modo, veo muy complicado poder hacer este llamado desde el Form2, a ese procedimiento que está en el Form1.

¿Como le podría hacer?

Digamos, ¿es posible entonces, por ejemplo, no generar ese llamado, sino más bien, desde el Form2 crear un procedimiento idéntico para el Form1?

Nuevamente, mil gracias, en verdad, por esta magnifica ayuda que he recibido. Ahí poco a poco, con esta valiosa ayuda, vamos viendo las opciones, para solucionar este tema, haber si puedo ya lanzar el programa :-), jajajajaja!!!

Un gran abrazo, señores.

Julián Franco
Responder Con Cita