![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
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;
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 |
|
#2
|
|||
|
|||
|
Solucionadooooooooo!!!!!!!!!! :-)
Bueno, aquí sentado probando varias formas, y, evidentemente, siguiendo al pie de la letra las muy pertinentes indicaciones, que, Voldemmor, y rrf, me han sugerido, he encontrado la solución al problema, que resultó ser una pequeña omisión, de algo muy simple.
No hubo necesidad de declarar este procedimiento, desde el Form1 en la parte de declaraciones públicas (ya que este simple hecho, me estaba generando una Excepción en tiempo de ejecución... -->Eso aún no lo comprendo, y sería tema de discusion para otro Post) Entonces, teniendo en cuenta esto, era necesario optar por otra vía. Que hice? Dejé todo tal cual, como estaba al principio, es decir, todas las declaraciones en el lugar en que por defecto están, y los procedimientos en la parte de abajo, en el Form1. En el Form2, generé el evento de dar Click, sobre el Label de preguntas frecuentes. Notaba que todo estaba (aparentemente) bien declarado, es decir, no había errores de sintaxis, por lo cual, pensaba qen que algo me faltaba, ya que el programa corría perfectamente, pero al abrirse el Form2, y dar Click sobre el Label, se generaba una excepción, que cerraba el programa. Comencé a pensar, y aquí llego la solución: Si el llamado se hace desde el Form2, para que abra en el Form1 una nueva pestaña, y ubique un componente Browser, y navegue hacia determinada página, ¿Quien tiene en ese mismo momento el Foco? Lo tiene el Form2. Entonces, qué debería hacer primero? Aquí está codigo que hace el llamado desde el Form2, sin problema: Código:
procedure TForm2.LblFrequentlyAskedQuestionsClick(Sender: TObject);
begin
Form1.SetFocus;
Form1.ReleaseNotes1Click(Sender);
Form2.Close;
end;
Agradezco mucho, la gran ayuda prestada, y la colaboración que recibí. Este proyecto que desarrollo, hace parte de algo muy importante para mí, ya que no soy programador, soy comunicador Social y todo lo he ido aprendiendo sólo en mi casa, leyendo y practicando mucho, y contando con la ayuda de gente como la que hay en este buen lugar. Mil gracias de nuevo, y un gran saludo a todos. Julian Franco |
|
#3
|
|||
|
|||
|
Hola buen dia a todos, me pregunto si alguien peude asesorarme en cuanto a los procedimientos llamados desde un form diferente a donde se crearon, ya hice lo que aqui proponen pero me sigue dando el error en el nuevo form que dice asi Undeclared identifier: 'Grafica' que es el procedimiento que necesito ojala alguien me pueda auxiliar
|
|
#4
|
|||
|
|||
|
Hola rosalara.
Mira, creo que el continuar este tema es un error, porque lo que tratas no tiene una clara relación con el tema desarrollado hasta ahora. Además, el tema anterior se agotó en el 2009 y estamos en el 2011. Te sugeriría que abrieras un nuevo tema para tu consulta, que expliques el problema lo mejor posible y que, si puede ser, añadas el código que has escrito y que te produce un error. Asi será más fácil que recibas ayuda. Saludos. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| llamada a método de Form desde otros Forms | Bauhaus1975 | Varios | 4 | 19-12-2008 22:07:42 |
| llamar al evento click de un boton q se encuentra en un form desde otro form | TURBOIGOR | OOP | 6 | 02-12-2008 14:50:16 |
| Como llamar form desde otros form y regresar a la linea que se estaba ejecutando | Willy Rodrigo | C++ Builder | 1 | 03-08-2007 19:36:23 |
| llamar a procedimientos desde otro form | David | OOP | 8 | 06-09-2006 18:28:12 |
| Llamar una form desde otra form!!! | niogon | Varios | 2 | 30-09-2004 16:09:17 |
|