Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Twwebbrowser "return" Problem (https://www.delphipraxis.net/27543-twwebbrowser-return-problem.html)

rickleimbach 11. Aug 2004 23:53


Twwebbrowser "return" Problem
 
Hi Leute !

Bin gerade dabei mir anfänglich einen eigenen Browser zu Programmieren (oder besser zusammenzubasteln) nun muss ich dazu sagen das ich ein totaler newb, und sobald ich vor einem Problem stehe sofort auf die Hilfe ander angewiesen bin :) :wall: :gruebel:

So hier mein Problem:

In der komponente twebbrowser funktioniert die "return" also die entertaste nicht sprich wenn ich in einem forum wie diesen einen bericht schreiben möchte kann ich keinen zeilenumbruch machen :( ich habe zwar schon die lösung des problems gefunden kann sie aber nicht ntzen :wiejetzt: :

http://www.swissdelphicenter.ch/de/showcode.php?id=1055

Unter dem gegebenen link ist ein code zur lösung des problems, nun hab ich das Problem, wie genau setze ich diesen code ein ? muss ich den irgendwo reinkopieren oder wie ? :?:

Würde mich sehr über ne Antwort freuen mfg rickleimbach ach hier noch mein zurzeitiger code:

Delphi-Quellcode:
unit webbrows;

interface

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

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Edit1: TEdit;
    Button1: TButton;
    button2: TButton;
    Button3: TButton;
    Button4: TButton;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Beenden1: TMenuItem;
    Hilfe1: TMenuItem;
    Version1: TMenuItem;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
    procedure button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Beenden1Click(Sender: TObject);
    procedure Version1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses webbrowsform2;

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if
key=      #13//
then
webbrowser1.navigate(edit1.text)

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
webbrowser1.GoBack;
end;

procedure TForm1.button2Click(Sender: TObject);
begin
Webbrowser1.GoForward;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
webbrowser1.Stop;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
webbrowser1.Refresh;
end;

procedure TForm1.Beenden1Click(Sender: TObject);
begin
application.Terminate;
end;

procedure TForm1.Version1Click(Sender: TObject);
begin
form2.showmodal;
end;

end.

digleu 12. Aug 2004 02:34

Re: Twwebbrowser "return" Problem
 
das schreibste' ans Ende (vor das letzte end. mit dem Punkt):
Delphi-Quellcode:
procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean);
const
  DialogKeys: set of Byte = [VK_LEFT, VK_RIGHT, VK_BACK, VK_UP, VK_DOWN,
    $30..$39, $41..42, $44..$55, $57, $59..$5A];
var
  iOIPAO: IOleInPlaceActiveObject;
  Dispatch: IDispatch;
begin
  { exit if we don't get back a webbrowser object } 
  if (WebBrowser1 = nil) then
  begin
    Handled := System.False;
    Exit;
  end;

  Handled := (IsDialogMessage(WebBrowser1.Handle, Msg) = System.True);

  if (Handled) and (not WebBrowser1.Busy) then
  begin
    if FOleInPlaceActiveObject = nil then
    begin
      Dispatch := WebBrowser1.Application;
      if Dispatch <> nil then
      begin
        Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
        if iOIPAO <> nil then
          FOleInPlaceActiveObject := iOIPAO;
      end;
    end;

    if FOleInPlaceActiveObject <> nil then
      if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
        (Msg.wParam in DialogKeys) then
        // nothing - do not pass on the DialogKeys
      else
        FOleInPlaceActiveObject.TranslateAccelerator(Msg);
  end;
end;

initialization
  OleInitialize(nil);

finalization
  OleUninitialize;
das schreibste in deine Klassendeklaration unter public:
Delphi-Quellcode:
    FOleInPlaceActiveObject: IOleInPlaceActiveObject;
    procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);
das schreibste in das OnDestroy-Event vom Form (Formular markieren und bei Events doppelt in das Feld hinter OnDestroy klicken):
Delphi-Quellcode:
  FOleInPlaceActiveObject := nil;
das ins OnCreate vom Form (s.o.):
Delphi-Quellcode:
  Application.OnMessage := MsgHandler;
so das dürfte funktionieren ;)

mfg Lars

flomei 12. Aug 2004 10:35

Re: Twwebbrowser "return" Problem
 
Natürlich wird das funktionieren aber was bringt es ihm?
Er möchte es ja gerne auch verstehen... :roll:

MfG Florian :hi:

rickleimbach 12. Aug 2004 12:10

Re: Twwebbrowser "return" Problem
 
naja funktioniert nich wirklich sobald ich dann das programm starten möchte markiert er mir die klassendeklaration unter public rot ??? Also folgendes :

Delphi-Quellcode:
FOleInPlaceActiveObject: IOleInPlaceActiveObject;
wobei der blinkende cursor hinter des ";" nach IOleInPlaceActivateObjekt

springt ? :witch:

Matze 12. Aug 2004 15:19

Re: Twwebbrowser "return" Problem
 
Vielleicht hilft dir das hier.

Edit: :wall: steht ja ganz oben...

Du musst deine Unit nur mit der vergleichen und entsprechend erweitern, bei mir funzt das dann.


Edit2: Was kommt denn für ein Fehler?

rickleimbach 12. Aug 2004 15:28

Re: Twwebbrowser "return" Problem
 
blub ? Matze oben lesn hab den link schon :)

Also hier mein code nach der änderung :

Delphi-Quellcode:
unit webbrows;

interface

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

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Edit1: TEdit;
    Button1: TButton;
    button2: TButton;
    Button3: TButton;
    Button4: TButton;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Beenden1: TMenuItem;
    Hilfe1: TMenuItem;
    Version1: TMenuItem;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
    procedure button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Beenden1Click(Sender: TObject);
    procedure Version1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    FOleInPlaceActiveObject: IoleInPlaceActiveObject;
    procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);
  end;

var
  Form1: TForm1;

implementation

uses webbrowsform2;

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if
key=      #13//
then
webbrowser1.navigate(edit1.text)

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
webbrowser1.GoBack;
end;

procedure TForm1.button2Click(Sender: TObject);
begin
Webbrowser1.GoForward;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
webbrowser1.Stop;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
webbrowser1.Refresh;
end;

procedure TForm1.Beenden1Click(Sender: TObject);
begin
application.Terminate;
end;

procedure TForm1.Version1Click(Sender: TObject);
begin
form2.showmodal;
end;
procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean);
const
  DialogKeys: set of Byte = [VK_LEFT, VK_RIGHT, VK_BACK, VK_UP, VK_DOWN,
    $30..$39, $41..42, $44..$55, $57, $59..$5A];
var
  iOIPAO: IOleInPlaceActiveObject;
  Dispatch: IDispatch;
begin
  { exit if we don't get back a webbrowser object } 
  if (WebBrowser1 = nil) then
  begin
    Handled := System.False;
    Exit;
  end;

  Handled := (IsDialogMessage(WebBrowser1.Handle, Msg) = System.True);

  if (Handled) and (not WebBrowser1.Busy) then
  begin
    if FOleInPlaceActiveObject = nil then
    begin
      Dispatch := WebBrowser1.Application;
      if Dispatch <> nil then
      begin
        Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
        if iOIPAO <> nil then
          FOleInPlaceActiveObject := iOIPAO;
      end;
    end;

    if FOleInPlaceActiveObject <> nil then
      if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
        (Msg.wParam in DialogKeys) then
        // nothing - do not pass on the DialogKeys
      else
        FOleInPlaceActiveObject.TranslateAccelerator(Msg);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FOleInPlaceActiveObject := nil;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := MsgHandler;
end;

initialization
  OleInitialize(nil);

finalization
  OleUninitialize;

end.
so und er markiert mir die oben angegebene zeile (siehe die antwort von mir weiter oben) rot .

Matze 12. Aug 2004 15:30

Re: Twwebbrowser "return" Problem
 
Bei den uses ganz oben muss Folgendes stehen (laut SDC):

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw_TLB, ActiveX, StdCtrls;

Matze 12. Aug 2004 15:42

Re: Twwebbrowser "return" Problem
 
In Delphi:

Komponente - ActiveX impostieren

dort Microsoft Internet Controls auswählen und dann auf "Unit anlegen"

rickleimbach 12. Aug 2004 16:00

Re: Twwebbrowser "return" Problem
 
So gut funzt alles hat sich damit erledigt vielen dank @matze ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz