Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi EnterKey activate ? (https://www.delphipraxis.net/115761-enterkey-activate.html)

toms 20. Jun 2008 07:01

Re: EnterKey activate ?
 
Hab's noch etwas abgeändert. Sollte nun funktionieren.
(Alternative: Den EmbeddedWB verwenden)

Delphi-Quellcode:
function TForm1.GetCurrentWB: TWebbrowser;
begin
  Result := nil;
  with PageControl1 do
    if ActivePage.Controls[0] is TWebbrowser then
      Result := (TWebbrowser(ActivePage.Controls[0]));
end;

procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean);
const
  StdKeys = [VK_TAB, VK_RETURN]; { standard keys }
  ExtKeys = [VK_DELETE, VK_BACK, VK_LEFT, VK_RIGHT]; { extended keys }
  fExtended = $01000000; { extended key flag }
var
  CurrentWB: TWebbrowser;
begin
  CurrentWB := FCurrentWB;
  // exit if we don't get back a webbrowser object
  if not Assigned(CurrentWB) then
  begin
    Handled := False;
    Exit;
  end;

  if IsChild(CurrentWB.Handle, Msg.Hwnd) then
  begin
    if (Msg.Message = WM_CLOSE) then
      msg.message := 0
    else
      if ((Msg.Message >= WM_KEYFIRST) and (Msg.Message <= WM_KEYLAST)) and
        ((Msg.wParam in StdKeys) or (GetKeyState(VK_CONTROL) < 0) or
        (Msg.wParam in ExtKeys) and ((Msg.lParam and fExtended) = fExtended)) then
      begin
        Handled := (CurrentWB.Application as IOleInPlaceActiveObject).TranslateAccelerator(Msg) = S_OK;
        if not Handled then
        begin
          Handled := True;
          TranslateMessage(Msg);
          DispatchMessage(Msg);
        end;
      end;
  end;
end;

procedure TForm1.PageControl1Change(Sender: TObject);
begin
begin
  FCurrentWB := GetCurrentWB;
end;

Mini-Programmierer 20. Jun 2008 08:31

Re: EnterKey activate ?
 
Vielen Dank Toms. Es hat jetzt geklappt :spin2:
Ich musste auch FCurrentWB := GetCurrentWB; in FormCreate dazu anlegen
mfg

toms 20. Jun 2008 08:46

Re: EnterKey activate ?
 
Zitat:

Zitat von Mini-Programmierer
Vielen Dank Toms. Es hat jetzt geklappt :spin2:
Ich musste auch FCurrentWB := GetCurrentWB; in FormCreate dazu anlegen
mfg

Kannst es auch so schreiben:

Delphi-Quellcode:
  //..
  CurrentWB := FCurrentWB;
  // exit if we don't get back a webbrowser object
  if not Assigned(CurrentWB) then
  begin
    FCurrentWB := GetCurrentWB;
  end;

  if IsChild(CurrentWB.Handle, Msg.Hwnd) then
  begin
  //..

Mini-Programmierer 20. Jun 2008 10:41

Re: EnterKey activate ?
 
Der Code funktioniert wunderbar in meinem Demo
Aber wenn ich versuche den Code in mein Programm zu verwenden, funktioniert es nicht
Mein Programm hat auch in Form1 mehrere Tabsheets. Also identisch :|
Wo kann das Problem vielleicht liegen ?

toms 20. Jun 2008 10:43

Re: EnterKey activate ?
 
Zitat:

Zitat von Mini-Programmierer
Wo kann das Problem vielleicht liegen ?

:glaskugel: -- wenn du möchtest kannst du mir den Source schicken?

Mini-Programmierer 20. Jun 2008 15:52

Re: EnterKey activate ?
 
Hallo
ich habe den Ursacher erwischt
Wenn ich eine Label auf Tabsheet, wo auch Webbrowser drauf liegt, lege, dann wird die Enter-Taste in Webbrowser nicht aktiviert. Wenn ich die Label lösche, dann funktioniert's wieder
Das Problem ist nur mit Label. Wenn ich einen Edit drauf hinzufüge dann ist kein Problem
Warum ?!

toms 20. Jun 2008 16:37

Re: EnterKey activate ?
 
Zitat:

Zitat von Mini-Programmierer
Wenn ich eine Label auf Tabsheet, wo auch Webbrowser drauf liegt, lege, dann wird die Enter-Taste in Webbrowser nicht aktiviert. Wenn ich die Label lösche, dann funktioniert's wieder
Das Problem ist nur mit Label. Wenn ich einen Edit drauf hinzufüge dann ist kein Problem
Warum ?!


Das Problem liegt hier:

Delphi-Quellcode:
function TForm1.GetCurrentWB: TWebbrowser;
begin
  Result := nil;
  with PageControl1 do
    if ActivePage.Controls[0] is TWebbrowser then
      Result := (TWebbrowser(ActivePage.Controls[0]));
end;

Konkret hier:

Delphi-Quellcode:
TWebbrowser(ActivePage.Controls[0]));
Das Umschreiben / Verbessern der Funktion überlasse ich mal dem Fragesteller.

Mini-Programmierer 20. Jun 2008 18:19

Re: EnterKey activate ?
 
erlich gesagt, keine Ahnung :oops:
d.h. ich muss den Tabsheet immer als ActivePage machen, wenn auf den Tabsheet andere Objekte dazu liegen ?

toms 21. Jun 2008 05:45

Re: EnterKey activate ?
 
Zitat:

Zitat von Mini-Programmierer
erlich gesagt, keine Ahnung :oops:
d.h. ich muss den Tabsheet immer als ActivePage machen, wenn auf den Tabsheet andere Objekte dazu liegen ?


@Mini-Programmierer: Was macht denn?

Delphi-Quellcode:
TWebbrowser(ActivePage.Controls[0]));
Du hast erwähnt, dass du auf dem TabSheet noch einen TLabel platziert hättest.

Warum funktioniert dann der obige Zugriff nicht mehr?

Mini-Programmierer 21. Jun 2008 08:56

Re: EnterKey activate ?
 
ich habe eine Schleife in der Funktion eingebaut aber hat es trotzdem nicht geklappt :
Delphi-Quellcode:
function TForm1.GetCurrentWB: TWebbrowser;
var
  i: integer;
begin
  result := nil;
  for i:= 0 to PageControl1.ActivePage.ControlCount -1 do
  begin
    if (PageControl1.ActivePage.Controls[i] is TWebBrowser) then
      result := (PageControl1.ActivePage.Controls[i] as TWebBrowser)

  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.
Seite 2 von 3     12 3      

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