Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TWebBrowser und Enter-Taste Leerzeile vermeiden (https://www.delphipraxis.net/212081-twebbrowser-und-enter-taste-leerzeile-vermeiden.html)

Kostas 14. Dez 2022 20:30

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: https://www.delphipraxis.net/153404-...t2-events.html

Der schöne Günther 14. Dez 2022 20:45

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 SunEditor) vlt. einstellen kann? Oder du gehst halt nachträglich mit Delphi-Code über den erzeugten Content?

Weil eigentlich ist das doch auch genau das Verhalten was ich in jeder Textverarbeitung auch habe und überall erwarten würde:
  • Enter-Taste: Nächster Absatz
  • Shift+Enter: Zeilenumbruch

Kostas 14. Dez 2022 20:50

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. :-)

jaenicke 14. Dez 2022 22:02

AW: TWebBrowser und Enter-Taste Leerzeile vermeiden
 
Zitat:

Zitat von Kostas (Beitrag 1516184)
ich habe die TWebBrowser Komponente im Einsatz und versetze Sie in Edit Modus. Damit kann ich einen einfachen HTML Editor erstellen.

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:
https://www.delphihtmlcomponents.com/editor.html

Zitat:

Zitat von Kostas (Beitrag 1516186)
Meine Anwender und ich übrigens auch, erwarten bei Enter eine normale Zeilenschaltung wie in jedem normalen Texteditor auch. :-)

Üblich ist bei Dokumenteneditoren, egal ob Word, LibreOffice oder diversen HTML-Editoren genau das Verhalten des IE-Controls. Aber du hast ja schon gefunden, wie du das Verhalten ändern kannst.

Zitat:

Zitat von Der schöne Günther (Beitrag 1516185)
Ich bin in HTML+JavaScript nicht wirklich fit, aber ich hätte gedacht, das man das im verwendeten Editor (ich verwende den SunEditor) vlt. einstellen kann?

Genau darum geht es ja: Um das Entwickeln eines HTML-Editors. ;-)

Kostas 14. Dez 2022 22:35

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:
https://www.delphihtmlcomponents.com/editor.html

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.

Kostas 15. Dez 2022 12:47

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?

https://www.delphipraxis.net/153404-...t2-events.html

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;

Kostas 15. Dez 2022 13:08

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;

Kostas 7. Jan 2023 12:54

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 09:56 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