Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Webbrowser Text markieren verhindern (https://www.delphipraxis.net/43255-webbrowser-text-markieren-verhindern.html)

Salomon 31. Mär 2005 13:53


Webbrowser Text markieren verhindern
 
Hallo,
ich benutze in meinem Programm den IE, den ich über ActiveX importiert habe (Delphi 5)um Informationstexte anzuzeigen. Allerdings stört es mich das man denn Text markieren kann, da
es dann immer so aussieht als könnte man den Text bearbeiten.

Habt ihr eine Idee wie man das verhindern kann?

Mit dem folgenden Code kann man den gesammten text makieren. Evtl. kann man ja den zu markierenden Bereich auf null setzen und das dann in einem Event des Browser unterbringen...

Delphi-Quellcode:
  TextRange: OleVariant;
begin
   TextRange := WebBrowser.OleObject.Document.selection.createRange;
   TextRange.moveToElementText(WebBrowser.OleObject.Document.body);
   TextRange.select;
end;
Thanx
Salomon

toms 31. Mär 2005 14:13

Re: Webbrowser Text markieren verhindern
 
Hallo!

Wuerde es auch helfen, wenn man die Maustasten wuerd den Webbrowser deaktiviert?

PierreB 31. Mär 2005 14:28

Re: Webbrowser Text markieren verhindern
 
Zitat:

Zitat von toms
Hallo!

Wuerde es auch helfen, wenn man die Maustasten wuerd den Webbrowser deaktiviert?

Aber da es ein Webbrowser ist, wie willst du dann Links, etc. anklicken ?

toms 31. Mär 2005 14:31

Re: Webbrowser Text markieren verhindern
 
Zitat:

Zitat von PierreB
Zitat:

Zitat von toms
Hallo!

Wuerde es auch helfen, wenn man die Maustasten wuerd den Webbrowser deaktiviert?

Aber da es ein Webbrowser ist, wie willst du dann Links, etc. anklicken ?

Die Links koennte man per GetElementAtPos ermitteln und entsprechend behandeln.

Orbmu2k 31. Mär 2005 14:34

Re: Webbrowser Text markieren verhindern
 
gabs da nicht html code für ie

XML-Code:
<body onselectstart="return false">Nicht Markierbarer Text</body>

toms 31. Mär 2005 14:47

Re: Webbrowser Text markieren verhindern
 
Habe nun ein Beispiel gemacht. Damit wird verhindert, dass Code selektiert werden kann
und das Popupmenu erscheint auch nicht.


Delphi-Quellcode:
uses
  MSHTML;

function GetElementAtPos(Doc: IHTMLDocument2; x, y: Integer): IHTMLElement;
begin
  Result := nil;
  Result := Doc.elementFromPoint(x, y);
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  MausPos: TPoint;
  Element: IHTMLElement;
  Doc: IHTMLDocument2;
begin
  if (Msg.Message = WM_RBUTTONDOWN) or (Msg.Message = WM_LBUTTONDOWN) or
    (Msg.Message = WM_RBUTTONDBLCLK) then
  begin
    if IsChild(Webbrowser1.Handle, Msg.hwnd) then
    begin
      Doc := Webbrowser1.Document as IHTMLDocument2;
      if Assigned(doc) then
      begin
        GetCursorPos(MausPos);
        mauspos := Webbrowser1.ScreenToClient(mauspos);
        Element := GetElementAtPos(doc, MausPos.x, MausPos.y);
        if Assigned(Element) then
        begin
          if element.tagName = 'A' then // evtl. auf weitere Tags ueberpreufen
            Exit;
        end;
      end;
      Handled := True;
    end;
  end;
end;

Salomon 31. Mär 2005 14:59

Re: Webbrowser Text markieren verhindern
 
Wow, sind ja schon einige Anworten :-D

Der HTML Tag onselectstart="return false" gibt im IE unter WinXP mit SP 2 eine Sicherheitswarnung aus, wenn er nicht in einem Frame geladen wird. Wenn man die Seite aber einzeln im Programm lädt gibt es keine Sicherheits Meldung :)

@toms: Coole Funktion, dass sie mir das PopUp Menü gleich noch mit unterbindet ist natürlich genial. Werd ich wohl verwenden. Danke.

toms 31. Mär 2005 17:25

Re: Webbrowser Text markieren verhindern
 
Habe gemerkt, dass man mit Strg+A das Dokument immer noch markieren kann.
Diese Funktion deaktiviert nun das Popupmenue, Strg+A, markieren mit der Maus.

Delphi-Quellcode:
function GetElementAtPos(Doc: IHTMLDocument2; x, y: Integer): IHTMLElement;
begin
  Result := nil;
  Result := Doc.elementFromPoint(x, y);
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  ShiftState: TShiftState;
var
  MousePos: TPoint;
  Element: IHTMLElement;
  Doc: IHTMLDocument2;
begin
  // only handle Webbrowser messages
  if IsChild(Webbrowser1.Handle, Msg.hwnd) then
  begin
    // Convert keyboard message data to TShiftState
    ShiftState := KeyDataToShiftState(Msg.lParam);
    // ctrl + A
    if (ShiftState = [ssCtrl]) and (Msg.message = WM_KEYDOWN) and
      (Msg.wParam = ord('A')) then
    begin
      // event subsequent processing of the message
      Handled := True;
      Exit;
    end;
    // right-, left-, double click
    if (Msg.Message = WM_RBUTTONDOWN) or (Msg.Message = WM_LBUTTONDOWN) or
      (Msg.Message = WM_RBUTTONDBLCLK) then
    begin
      Doc := Webbrowser1.Document as IHTMLDocument2;
      if Assigned(doc) then
      begin
        GetCursorPos(MousePos);
        MousePos := Webbrowser1.ScreenToClient(MousePos);
        // get the element under the mouse
        Element := GetElementAtPos(doc, MousePos.x, MousePos.y);
        if Assigned(Element) then
        begin
          // if a link
          if element.tagName = 'A' then
            Exit;
        end;
      end;
      // if not a link, don't process the message
      Handled := True;
    end;
  end;
end;

torud 9. Mai 2006 10:56

Re: Webbrowser Text markieren verhindern
 
Ich habe es gerade bei mir probiert und ich kann nach wie vor alles einfach so markieren. Muss ich die Prozedure vielleicht noch irgendwo dranhängen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 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