![]() |
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:
Thanx
TextRange: OleVariant;
begin TextRange := WebBrowser.OleObject.Document.selection.createRange; TextRange.moveToElementText(WebBrowser.OleObject.Document.body); TextRange.select; end; Salomon |
Re: Webbrowser Text markieren verhindern
Hallo!
Wuerde es auch helfen, wenn man die Maustasten wuerd den Webbrowser deaktiviert? |
Re: Webbrowser Text markieren verhindern
Zitat:
|
Re: Webbrowser Text markieren verhindern
Zitat:
|
Re: Webbrowser Text markieren verhindern
gabs da nicht html code für ie
XML-Code:
<body onselectstart="return false">Nicht Markierbarer Text</body>
|
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; |
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. |
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; |
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 20:45 Uhr. |
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