Avatar billede rasmus_a Nybegynder
19. maj 2004 - 13:19 Der er 6 kommentarer og
1 løsning

Enter knap ikke "aktiv"

Hej

Jeg har lavet et delphiprogram der fungerer som en browser (delphi 7 + WebBrowser1) - men når "browseren" viser sider duer "enter" knappen ikke. Så jeg kan ikke hoppe en linie ned i f.eks. et <textarea> - Kan man rette på det?
Avatar billede dkn Nybegynder
19. maj 2004 - 13:49 #1
Avatar billede rasmus_a Nybegynder
19. maj 2004 - 13:58 #2
ok er ikke så skarpi delphi men prøver det senere. tak
Avatar billede hrc Mester
20. maj 2004 - 08:03 #3
Hvad mener du med det svar - dkn har vist præcis den løsning der er teknisk korrekt og det er et spørgsmål om at lave 30 linier kode. Swiss Delphi Center skriver:

...

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser; // Du kan have et andet navn
    Button1: TButton;
    Button2: TButton;
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private

    // Disse to er hvad du skal bruge - kopiér dem ind i din kode
    FOleInPlaceActiveObject: IOleInPlaceActiveObject;
    procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);

  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Kopiér disse tre procedurer ind i dit program (husk evt. at ændre klassenavnet)

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

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

procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean);
var
  iOIPAO: IOleInPlaceActiveObject;
  Dispatch: IDispatch;
begin
  Handled := assigned(WebBrowser1); // exit if we don't get back a webbrowser object
  if not Handled then
    Exit;

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

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

    if assigned(FOleInPlaceActiveObject) then
      if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
        ((Msg.wParam = VK_BACK) or (Msg.wParam = VK_LEFT) or (Msg.wParam = VK_RIGHT)) then
        //nothing - do not pass on Backspace, Left or Right arrows
      else
        FOleInPlaceActiveObject.TranslateAccelerator(Msg);
  end;
end;

Det er alt der er i det - at vi går ind og laver keyboard message snooping og tolker på det ret besværlige opgave at fange tastetryk i Windows, kan du se bort fra indtil du bliver nysgerrig.
Avatar billede rasmus_a Nybegynder
20. maj 2004 - 10:23 #4
det lykkedes, tak.
hrc> jeg mente jeg lige skulle bruge lidt tid på at sætte det sammen med mit delphi program...
Avatar billede hrc Mester
20. maj 2004 - 14:35 #5
Min skarpe pen igen. Hvis en spørger giver op uden at eksperimentere lidt, så kan den vækkes, pennen. Vi sidder alle og bruger, efterhånden dyrbar, tid på at hjælpe andre og hvis modtageren bare giver op, sååee.

Men det var ikke tilfældet her. Held og lykke med projektet.
Avatar billede rasmus_a Nybegynder
20. maj 2004 - 20:14 #6
no worries mate, min første besked var også lidt tvetydig. :)
Avatar billede xcc.dk Nybegynder
15. juni 2005 - 08:38 #7
Jeg kan slet ikke få denne kode til at virke i min Webbrowser ?? hvordan kan det være den skriver bare : [Error] Unit1.pas(51): Unsatisfied forward or external declaration: 'TForm1.MsgHandler'
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester