AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TWebBrowser und Enter-Taste Leerzeile vermeiden
Thema durchsuchen
Ansicht
Themen-Optionen

TWebBrowser und Enter-Taste Leerzeile vermeiden

Ein Thema von Kostas · begonnen am 14. Dez 2022 · letzter Beitrag vom 7. Jan 2023
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

TWebBrowser und Enter-Taste Leerzeile vermeiden

  Alt 14. Dez 2022, 21:30
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

Geändert von Kostas (14. Dez 2022 um 21:46 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TWebBrowser und Enter-Taste Leerzeile vermeiden

  Alt 14. Dez 2022, 21:45
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
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: TWebBrowser und Enter-Taste Leerzeile vermeiden

  Alt 14. Dez 2022, 21:50
Meine Anwender und ich übrigens auch, erwarten bei Enter eine normale Zeilenschaltung wie in jedem normalen Texteditor auch.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TWebBrowser und Enter-Taste Leerzeile vermeiden

  Alt 14. Dez 2022, 23:02
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

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.

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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: TWebBrowser und Enter-Taste Leerzeile vermeiden

  Alt 14. Dez 2022, 23:35
[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.
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: TWebBrowser und Enter-Taste Leerzeile vermeiden

  Alt 15. Dez 2022, 13:47
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;
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: TWebBrowser und Enter-Taste Leerzeile vermeiden

  Alt 15. Dez 2022, 14:08
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;
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: TWebBrowser und Enter-Taste Leerzeile vermeiden

  Alt 7. Jan 2023, 13:54
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 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