PDA

Ver la Versión Completa : grabar las paginas de mi navegador en un combobox


jeremiselxi
12-10-2008, 00:19:42
hola foro...
hice un navegador pero tiene deficiencia aunque tiene algo que es jevi cuando tienes una empresa y es que si quieres lo puedes programar para que solo navege en determinadas paginas y si se sale de ahi no despliega la pagina. lo primero que hare es mostrar los codigos de mi navegador y luego si les dire en lo que quiero que me ayuden. Mostrare los codigos y los componentes que uso para que si alguien quiere hacer un navegador tambien lo haga.

Incorpora los siguientes componentes:

- Un panel en la parte superior con su propiedad Align fijada a alTop (pegado arriba).

- Dentro del panel tenemos una etiqueta para la dirección.

- Un componente ComboBox llamado URL para la barra de direcciones.

- Tres botones para ir atrás, adelante y para detener.

- Una barra de progreso para mostrar la carga de la página web el cual llamaremos proceso.

- Un componente WebBrower ocupando el resto del formulario mediante su propiedad Align en alClient, de tal manera que si maximizamos la ventana se respete el posicionamiento de todos los componentes.

mas abajo dejo una imagen de como quedara este navegador.

http://bp3.blogger.com/_pysjFhCcEYY/RveaafOVVtI/AAAAAAAAAB8/z0IFMTF-Exs/s1600-h/webbrowser2.jpg

ahora los codigos


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, ComCtrls, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel;
Label1: TLabel;
url: TComboBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
progreso: TProgressBar;
WebBrowser1: TWebBrowser;
procedure urlKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure WebBrowser1ProgressChange(Sender: TObject; Progress,
ProgressMax: Integer);
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.urlKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key =vk_return then // si presionas Intro entonces
begin
webbrowser1.Navigate(url.Text ); //se mostrara la pagina
url.Items.Add(url.Text ); //y se guardara en el combobox llamado url
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
try
webbrowser1.GoBack; //para darle hacia atras
except
on EDivByZero do //para controlar un error
ShowMessage('ya estas en la primera pagina');
else
ShowMessage('ya estas en la primera pagina');
end;
//nota: si lo corres desde el mismo delphi te dara un error cuando le das atras
//el error es , un error inesperado, pero cuando vas al ejecutable y lo pruebas sale el mensaje
//ya estas en la primera pagina
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
try
webbrowser1.GoForward ;
except
on EDivByZero do //para controlar un error
ShowMessage('ya estas en la ultima pagina');
else
ShowMessage('ya estas en la ultima pagina');
end;
//lo mismo que el boton atras
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
webbrowser1.Stop ;//para darle un stop al navegador
end;

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
if Pos( 'google', URL ) = 0 then // esto es para que solo navege en paginas que se mustre la palabra google
Cancel := True; // si quieres puedes quitar estas dos lineas de codigos para que se vean todas las paginas

Progreso.Show; // esta la dejas para que se llene el progresbar
end;

procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress,
ProgressMax: Integer);
begin
progreso.Max := progressmax;
progreso.Position := progress;
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
progreso.Hide ;
end;

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);

begin
Cancel := True;
end;

end.


ahora bien, las deficiencias son
en este codigo



procedure TForm1.urlKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key =vk_return then // si presionas Intro entonces
begin
webbrowser1.Navigate(url.Text ); //se mostrara la pagina
url.Items.Add(url.Text ); //y se guardara en el combobox llamado url
end;
end;

ya que cuando escribo una direccion ejemplo google.com, me la muestra y me la graba en el combobox llamado url, pero cuando busco algo dentro de google, esos cambios de paginas que se hacen no se como guardarlas en un combobox, es decir, lo que quiero es que me ayuden a que cuando cambien de pagina se me guarde esas paginas en el combobox.

otro cosa, si nos fijamos en los navegadores ellos utilizan pagecontrol para mostrar los titulos de las paginas, lo que quiero es que me ayuden tambien a como poder agregarle un pagecontrol, y un popupmenu con una opcion que diga pagina nueva, y ahi la pagina que dijite se me cree un new page en el caption con el titulo de la pagina visitada. ayudenme para que otros tambien si quieren hacer este navegador, puedan tambien hacerlo, ya que como dije arriba, en nuestra empresa si queremos que los empleados visiten solo algunas paginas las podemos programar con este codigo


procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
if Pos( 'google', URL ) = 0 then // esto es para que solo navege en paginas que se mustre la palabra google
Cancel := True; // si quieres puedes quitar estas dos lineas de codigos para que se vean todas las paginas

Progreso.Show; // esta la dejas para que se llene el progresbar
end;


ahora, si queremos que navege en todas lo pones asi


procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
Progreso.Show; // esta la dejas para que se llene el progresbar
end;

cHackAll
17-10-2008, 16:09:16
TWebBrowser.OnBeforeNavigate2 y/ó TWebBrowser.OnNavigateComplete

//...

var Address: string;
begin
Address := URL;
if ComboBox1.Items.IndexOf(Address) = -1 then
ComboBox1.AddItem(Address, nil);

//...

jeremiselxi
19-10-2008, 12:35:53
muchas gracias baneado. me sirvio de mucho tu aportacion. mil gracias