![]() |
TWebBrowser und Enter-Taste Leerzeile vermeiden
Hallo Zusammen,
ich habe die TWebBrowser Komponente im Einsatz und versetze Sie in Edit Modus. Damit kann ich einen einfachen HTML Editor erstellen. Schriftgrößen, Schriftarten, Fett, Kursiv, Unterstrichen und Schriftfarbe setzen ist beinhaltet. Was mich allerdings stört ist dass bei Enter-Taste ein neuen Paragraph erzeugt. Ich habe also eine zusätzliche Leerzeile zwischen den Zeilen. Um das zu umgehen muss der Anwender Shift+Enter drücken. Hat jemand eine Idee ob das umstellbar ist so dass <BR> erzeugt wir und nicht <p>. [Edit] Sorry hier gibt es bereits eine Lösung, muss ich noch umsetzen: ![]() |
AW: TWebBrowser und Enter-Taste Leerzeile vermeiden
Oh cool, so etwas mache ich auch grade. Ich bin in HTML+JavaScript nicht wirklich fit, aber ich hätte gedacht, das man das im verwendeten Editor (ich verwende den
![]() Weil eigentlich ist das doch auch genau das Verhalten was ich in jeder Textverarbeitung auch habe und überall erwarten würde:
|
AW: TWebBrowser und Enter-Taste Leerzeile vermeiden
Meine Anwender und ich übrigens auch, erwarten bei Enter eine normale Zeilenschaltung wie in jedem normalen Texteditor auch. :-)
|
AW: TWebBrowser und Enter-Taste Leerzeile vermeiden
Zitat:
![]() Zitat:
Zitat:
|
AW: TWebBrowser und Enter-Taste Leerzeile vermeiden
[QUOTE=jaenicke;1516187]Den nicht mehr unterstützten Internet Explorer als Basis zu nehmen, dessen Control vielerorts aus Sicherheitsgründen blockiert wird, ist zwar einfach, aber nicht schön. Leider gibt es allerdings nicht viele Alternativen. Diese ist zwar nicht ganz billig, aber für ernsthafte Zwecke sehr gut geeignet:
![]() Ich benötige den Editor NUR um Email Signaturen und Email-Body Texte zu erzeugen. Die Komponente habe ich mir auch schon angeschaut aber die ist einfach zu groß und zu teuer mit 2k€ für mein Vorhaben. |
AW: TWebBrowser und Enter-Taste Leerzeile vermeiden
Hallo Zusammen,
ich habe diesen Code in mein Projekt eingebaut und es funktioniert fast. Nachdem ich Enter betätige, wandert der Cursor um ein Zeichen nach rechts wenn ich ein weiteres Zeichen eingebe, dann wandert der Cursor wie erwarte in die nächste Zeile. Wenn ich nach dem Enter auf die Taste "Pfeil nach unten" klicke, wandert der Cursor in die nächste Zeile. Ok dachte ich, dann sende ich eben ein VK_DOWN, doch das wird ignoriert. Hat jemand eine Idee? ![]()
Delphi-Quellcode:
procedure TfrmHTMLEdit.HTMLEditorOnKeyDown(Sender: TObject;
EventObjIfc: IHTMLEventObj); var selectionRange: IHtmlTxtRange; htmlDoc: IHTMLDocument2; begin if not Assigned(HtmlEditor.Document) then Exit; htmlDoc := htmlEditor.Document as IHTMLDocument2; if htmlDoc.parentWindow.event.keyCode = VK_RETURN then begin selectionRange := htmlDoc.selection.createRange as IHtmlTxtRange; selectionRange.pasteHTML('<br>'); htmlDoc.parentWindow.event.returnValue := False; // htmlDoc.parentWindow.event.keyCode := 0; htmlDoc.parentWindow.event.keyCode := VK_DOWN; end; end; |
AW: TWebBrowser und Enter-Taste Leerzeile vermeiden
So scheint es halbwegs zu funktionieren.
Wenn ich jedoch am Textende bin und auf Enter klicke wird das Control manchmal verlassen. Das Control wird überhaupt verlassen wenn mit den Pfeiltasten oben, unten das Ende oder Anfang erreicht ist. Man merkt das dieses Control ein Fremdkörper ist, es verhält sich einfach anders. So ein Mist.
Delphi-Quellcode:
procedure TfrmHTMLEdit.HTMLEditorOnKeyDown(Sender: TObject;
EventObjIfc: IHTMLEventObj); var selectionRange: IHtmlTxtRange; htmlDoc: IHTMLDocument2; begin if not Assigned(HtmlEditor.Document) then Exit; htmlDoc := htmlEditor.Document as IHTMLDocument2; if htmlDoc.parentWindow.event.keyCode = VK_RETURN then begin selectionRange := htmlDoc.selection.createRange as IHtmlTxtRange; selectionRange.pasteHTML('<br>'); htmlDoc.parentWindow.event.returnValue := False; htmlDoc.parentWindow.event.keyCode := 0; Keybd_Event(VK_DOWN,0,0,0); //Taste drücken Keybd_Event(VK_DOWN,0,KEYEVENTF_KEYUP,0); //Taste loslassen end; end; |
AW: TWebBrowser und Enter-Taste Leerzeile vermeiden
Hallo Zusammen,
die untenstehende Version hat leider noch ein Manko. Wenn man mit Enter eine neue Zeile beginnt, funktioniert es. Ein weiteres Enter erzeugt nicht wie erwartet eine Leerzeile sondern verlässt das Control. Hat jemand eine Idee wie man das umgehen kann? Wie bei jedem Memo soll einfach bei jeder Enter-Taster ein ein <br> Tag hinzugefügt werden.
Delphi-Quellcode:
procedure TfrmHTMLEdit.HTMLEditorOnKeyDown(Sender: TObject;
EventObjIfc: IHTMLEventObj); var selectionRange: IHtmlTxtRange; htmlDoc: IHTMLDocument2; begin if not Assigned(HtmlEditor.Document) then Exit; htmlDoc := htmlEditor.Document as IHTMLDocument2; if htmlDoc.parentWindow.event.keyCode = VK_RETURN then begin selectionRange := htmlDoc.selection.createRange as IHtmlTxtRange; selectionRange.pasteHTML('<br>'); htmlDoc.parentWindow.event.returnValue := False; htmlDoc.parentWindow.event.keyCode := 0; Keybd_Event(VK_DOWN,0,0,0); //Taste drücken Keybd_Event(VK_DOWN,0,KEYEVENTF_KEYUP,0); //Taste loslassen end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 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