19. maj 2004 - 13:19Der 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?
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;
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.
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.
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'
Synes godt om
Ny brugerNybegynder
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.