Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-07-2004
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Question Multi-navegador

Hola, tengo una pequeña duda... y estaría muy agradecido si alguien pudiera ayudarme.

Estoy desarrollando un multi-navegador y para ello necesito crear dinámicamente cada ventana de navegación. A su vez por cada ventana creo una pestaña (TTabSheet) de un TPageControl.
La ventana de navegación debe constar de un TWebBrowser y un TStatusBar. Para facilitar las cosas diseñé un Frame que hace de ventana de navegación. En dicho frame sólo se encuentra un solo evento:
Código Delphi [-]
procedure TFrame2.WebBrowser1StatusTextChange(Sender: TObject;
  const Text: WideString);
begin
StatusBar1.Panels[0].Text := Text;
end;
Es decir que sólamente lo que se hace es mostrar en la StatusBar el texto cambiante cuando se navega.

La ventana principal consta de los botones de navegación un PageControl y un ComboBox en donde se visualiza la dirección.
El problema es que el código que yo ingresé no me deja insertar mas de una pestaña con su correspondiente ventana de navegación, apareciendome un mensaje de error diciendo que ya existe un objeto llamado TFrame2. Adjunto un código de prueba:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
// El botón simplemente permite crear una pestaña navegadora para la dirección URL
// ingresada
var NewTabSheet : TTabSheet;
    NewBrowser: TFrame2;
    F: OLEVariant;
begin
// Para que funcione correctamente debe haber inicialmente una pestaña con una ventana
// de navegación
NewTabSheet := TTabSheet.Create(PageControl1);
// Edit2 contiene el nombre para la pestaña
NewTabSheet.Caption := Edit2.Text;
NewTabSheet.PageControl := PageControl1;
NewBrowser := TFrame2.Create(Frame21);
NewBrowser.WebBrowser1.Offline := True;
NewBrowser.Align := alClient;
NewTabSheet.InsertControl(NewBrowser);
F := 0;
PageControl1.ActivePage := NewTabSheet;
with PageControl1.ActivePage do
   // Edit1 contiene la dirección URL a visitar
   NewBrowser.WebBrowser1.Navigate(WideString(Edit1.Text),F,F,F,F);
end;
¿Alguien sabe como puedo solucionar este problema? Desde ya muchas gracias...

Última edición por Delphius fecha: 13-07-2004 a las 15:21:35. Razón: Aaclrar mensaje de error
Responder Con Cita
  #2  
Antiguo 10-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Hola Delphius.

En primer lugar, quiero darte la bienvenida a los foros del clubdelphi. Te recomiendo la lectura de la Guia de Estilo, que contiene las reglas de convivencia en este lugar.

Te recomiendo el uso también de las etiquetas [ delphi ], [ sql ], [ php ] y [ code ] (segun corresponda) para publicar trozos de código, puesto que de esta manera se muestran correctamente indentados y con la sintaxis resaltada. Al inicio de este foro hay un mensaje que explica su uso.

En este caso, publico los trozos de código de tu mensaje original de esta manera, para que sean de fácil lectura para quien se interese en tu hilo.

Código Delphi [-]
procedure TFrame2.WebBrowser1StatusTextChange(Sender: TObject;
  const Text: WideString);
begin
  StatusBar1.Panels[0].Text := Text;
end;

procedure TForm1.Button1Click(Sender: TObject);
  // El botón simplemente permite crear una pestaña navegadora para la dirección URL
  // ingresada
var NewTabSheet : TTabSheet;
    NewBrowser: TFrame2;
    F: OLEVariant;
begin
  // Para que funcione correctamente debe haber inicialmente una pestaña 
  //con una ventana de navegación
  NewTabSheet := TTabSheet.Create(PageControl1);
  // Edit2 contiene el nombre para la pestaña
  NewTabSheet.Caption := Edit2.Text;
  NewTabSheet.PageControl := PageControl1;
  NewBrowser := TFrame2.Create(Frame21);
  NewBrowser.WebBrowser1.Offline := True;
  NewBrowser.Align := alClient;
  NewTabSheet.InsertControl(NewBrowser);
  F := 0;
  PageControl1.ActivePage := NewTabSheet;
  with PageControl1.ActivePage do
    // Edit1 contiene la dirección URL a visitar
    NewBrowser.WebBrowser1.Navigate(WideString(Edit1.Text),F,F,F,F);
end;

Por último, y esto a título personal, me parece que no es suficiente con el código publicado. Es importante que transcribas el mensaje de error completo, así como la clase de la excepción involucrada para dar una idea de por donde va el problema. Con respecto a esto te recomiendo la lectura del hilo de la calidad de las preguntas

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 18-07-2004
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Mensaje de error

hola,

Gracias por el consejo... la verdad es que como estoy fuera de casa (en vacaciones)... y no tengo el equipo adecuado para probrar el tipo de error producido... no lo he podido transcribir... lo que si me acuerdo es que decia en una parte: que el objeto Tframe2 ya existe...

Se que los programadores no tienen tiempo que perder... pero si alguien tiene el tiempo como para poder ver el mensaje de error correspondiente... estaría bien que lo copie en el foro...

Saludos, espero que haya una solución
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 22-07-2004
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Smile Mensaje de error completo

Buenas,

Como ya volví de las vacaciones, (y no las pasé tan bien).. tuve un tiempito para ver el mensaje de error... y el mensaje es el siguiente:

Proyect Proyect1.exe raised exception class EComponentError with message 'A component named Frame2 already exists'. Process stoped. Use stop or Run to continue.

Y cuando presiono el OK me marca el error en la línea:

Código Delphi [-]
NewBrowser := TFrame2.Create(Frame2);

Al volver presionar Run, aparece un cuadro de díalogo con el siguiente mensaje:

A component named Frame2 already exists

Al dar Aceptar, me crea la solapa pero no asi el frame en su interior.

Me pregunto: ¿Existe otra manera de crear varias ventanas navegadoras con solapas, algo como el Crazy Browser (a lo mejor alguien usa dicho programa) ?}
Mi objetivo es programar un programa navegador que sea capaz de mantener en su interior varias ventanas en simultáneo de módo que resulte más cómodo tener una sola aplicación en la barra (ya que resulta tedioso y horrible tener muchas ventanas de IE abiertas).

Ha.. me preguntaba si hay alguna manera de poder detectar la URL de la orden de "Abrir en una nueva ventana" para que no me abra dicho vínculo en una ventana IE sino en una nueva solapa.

Desde ya muchas gracias...
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 22-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Yo en tu lugar me instalaría Mozilla Firefox..., que tiene navegación por pestañas, y muchas otras gracias, sin todos los errores del IE.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 22-07-2004
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 22
__hector Va por buen camino
Creo que el problema lo tienes en el constructor del objeto. Prueba pasandole un parametro self (o el mainform de la aplicacion) al constructor del nuevo frame, a ver que dice.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #7  
Antiguo 24-07-2004
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Unhappy Respuesta a Hector

Disculpa Hector, no quiero parecer un tonto... pero... no se si entendí bien lo que me dijiste: ¿ dices que pase dentro del Create() el parametro Self ?.. lo he intentado... y surje el mismo error descripto. En cuanto a lo que dices al MainForm... no me quedo claro... ¿Podrías ser más específico? He probado varias combinaciones con el Self y ninguna funcionó...
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 24-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Supongo que dentro del owner solamente podrá haber un objeto con el nombre Frame2. Podes hacer que la propia pestaña (TTabSheet) sea el owner, pasandolo como parámetro al constructor, o bien generar de alguna manera un nombre único para cada frame.

Esto último lo podes conseguir con un simple contador...

Eso si, me parece que Frame2 en ningún caso (aún cuando esté creado) debiera ser el owner de otras instancias de la misma clase... salvo que sepas lo que estas haciendo, claro.

hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 26-07-2004
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Unhappy En eso estuve pensando...

En respuesta a jachguate:

Estuve pensando en esa posibilidad... además se me ocurrió en poner una cantidad de pestañas e ir "mostrándolas" a medida que sea necesario.

El problema de esto último es que hará más lento la carga del programa y que cuando le pongo False a la propiedad Visible de las pestañas... siguen víendose, no me explico a que se debe esto...

¿Realmente se puede ocultar las pestañas? me pregunto...
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 26-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Valete de la propiedad TabVisible.

La idea de tenerlas pre-creadas no me gusta mucho... pues no solo hace innecesariamente pesado el programa, sino impone un límite que un usuario como yo, te aseguro, querria rebasar...

Hasta luego

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #11  
Antiguo 27-07-2004
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cool Ya lo logre!

Buenas, saludos a todos!

Tengo buenas nuevas... si constante insistencia en no querer llegar a la idea de "pre-crear" pestañas me ha llevado a la locura... pero hay luz al final del túnel.

El error que tanto dolores de cabezas me ha traído por fin a desaparecido con la siguiente sentencia:
Código Delphi [-]
NewBrowser := TFrame2.Create(Tform1.CreateNew(Frame21));

Cuando termine el sistema lo colocaré en el foro.. por si alguien está interesado...

Ahora si... no se si habrir un hilo nuevo o no porque me surgió una duda:
¿Es posible detectar la URL destino cuando alguien da la orden de "abrir en una ventana nueva" ?... lo que quiero hacer es crear una pestaña navegadora con dicha URL en ves de que abra el vínculo en una ventana IE...

Gracias, por su ayuda...
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:34:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi