Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   HTML WYSIWYG Editor (https://www.delphipraxis.net/181888-html-wysiwyg-editor.html)

machstuhl 15. Sep 2014 14:34

HTML WYSIWYG Editor
 
Hallo zusammen,

ich möchte gerne das meine Nutzer eine E-Mail-Signatur in einem WYSIWYG-Editor anlegen können.
Dieser Editor soll mir am Ende dann einen mit HTML-Tags versehenen String ausgeben.

Ich habe schon ein wenig im Internet gesucht, und habe nix passendes gefunden (TMS HTML Pack eignet sich nicht, TRichView ist zu überladen).

Hat wer einen Tipp woher ich so einen Editor bekommen kann? Oder zumindest eine Komponente die HTML verschiedene Fonts zulässt, damit ich mir zur Not selbst was basteln kann. TRichMemo eignet sich leider nicht, da man dort nur zeilenweise verschiedene Formatierungen angeben kann.

Gruß und Kuss

Bummi 15. Sep 2014 15:11

AW: HTML WYSIWYG Editor
 
Du könntest gegf. TWebBrowser dafür verwenden:

Delphi-Quellcode:
implementation
uses MSHTML;
{$R *.dfm}

var
  DocInterface:IHTMLDocument2;



procedure TMiniDemoForm.InitalisierenClick(Sender: TObject);
begin
  WebBrowser1.Navigate('file:///C:/temp/empty.html');
  DocInterface := (WebBrowser1.Document as IHTMLDocument2);
  DocInterface.DesignMode := 'On';
end;

procedure TMiniDemoForm.Selection_FettClick(Sender: TObject);
begin
  DocInterface.execCommand('Bold', false,0);
end;

procedure TMiniDemoForm.Schrift30Click(Sender: TObject);
begin
   DocInterface.execCommand('FontSize', false,30);
end;


procedure TMiniDemoForm.GetHTMLClick(Sender: TObject);
begin
  Showmessage(DocInterFace.body.InnerHTML)
end;
Für einen Zeilenumbruch benötigst Du CTRL+ENTER, da ENTER speichern möchte.

mquadrat 16. Sep 2014 06:31

AW: HTML WYSIWYG Editor
 
Wir verwenden aktuell, die arg sperrige Lösung alles zwischen HTML und RTF hin und her zu wandeln und dann TRichView zu nehmen.

GS Auftrag von Sage verwendet den CK Editor, wahrscheinlich innerhalb eines TWebBrowser. Das ist im Moment auch meine favorisierte Variante, wobei der nicht ganz billig ist.

Mschmidt 16. Sep 2014 07:24

AW: HTML WYSIWYG Editor
 
schau mal hier http://www.entwickler-ecke.de/viewtopic.php?t=50584

mfg
Mathias

machstuhl 26. Sep 2014 10:18

AW: HTML WYSIWYG Editor
 
Das mit dem Webbrowser funktioniert ganz gut. Man kann den ja sogar mit StringStreams füllen :-)

Nächstes Problem. Wenn ich im WebBrowser im EditMode bin und einen Zeilenumbruch mache, füllt der Webbrowser immer <p> anstatt <br> ein.

Hat irgendwer eine Idee wie ich die doofen Absätze beim Zeilenumbruch weg bekommen kann?

mjustin 26. Sep 2014 10:25

AW: HTML WYSIWYG Editor
 
Zitat:

Zitat von machstuhl (Beitrag 1273895)
Nächstes Problem. Wenn ich im WebBrowser im EditMode bin und einen Zeilenumbruch mache, füllt der Webbrowser immer <p> anstatt <br> ein.

Hat irgendwer eine Idee wie ich die doofen Absätze beim Zeilenumbruch weg bekommen kann?

Was ist das konkrete Problem, der Zeilenabstand (der bei br und p unterschiedlich hoch ist)? Das kann man durch das Auftragen von etwas CSS beheben.

machstuhl 26. Sep 2014 10:57

AW: HTML WYSIWYG Editor
 
Zitat:

Zitat von mjustin (Beitrag 1273899)
Zitat:

Zitat von machstuhl (Beitrag 1273895)
Nächstes Problem. Wenn ich im WebBrowser im EditMode bin und einen Zeilenumbruch mache, füllt der Webbrowser immer <p> anstatt <br> ein.

Hat irgendwer eine Idee wie ich die doofen Absätze beim Zeilenumbruch weg bekommen kann?

Was ist das konkrete Problem, der Zeilenabstand (der bei br und p unterschiedlich hoch ist)? Das kann man durch das Auftragen von etwas CSS beheben.

In der Tat. Der Webbrowser soll ein WYSIWYG Editor für Endanwender werden damit diese sich ihre eigene EMail Signatur basteln können. Diese wird als String in der Datenbank gespeichert.
Wie stellst du dir das mit dem CSS vor? Kann man nicht irgendwie dem Webbrowser sagen, dass er <br>s anstatt <p>s einfügen soll?

edit: hab es... das Interface hat eine StyleSheet-Property. Wie praktisch :-)
Danke!

fs999 26. Sep 2014 15:59

AW: HTML WYSIWYG Editor
 
...

machstuhl 30. Sep 2014 09:03

AW: HTML WYSIWYG Editor
 
Ich raffs doch nicht so ganz wie ich jetzt die <p> so umbiege, dass sie wie <br> angezeigt bekomme. Kann mir wer evtl mit nem Codebeispiel auf die Sprünge helfen?

Code:
procedure TFormHTMLText.FormShow(Sender: TObject);
const
  CSS = 'p {'#13#10
        + '   margin-top: 0;'#13#10
        + '   margin-bottom: 0;'#13#10
        + '}';
var
  StylesheetIndex: Integer;
  Stylesheet: IHTMLStyleSheet;
begin
  // Ein Navigate muss gemacht werden
  WebBrowser1.Navigate('about:blank');
  FDocInterface := (WebBrowser1.Document as IHTMLDocument2);
  LoadDocFromString(WebBrowser1, FHTMLString);

  // CSS StyleSheet laden
  StylesheetIndex := FDocInterFace.StyleSheets.Length;
  if stylesheetIndex > 31 then
     raise Exception.Create(Lan('Maximal 32 Stylesheets erlaubt.'));
  Stylesheet := FDocInterFace.createStyleSheet('', StylesheetIndex);
  Stylesheet.cssText := CSS;

  // String in Browser laden
  LoadDocFromString(WebBrowser1, FHTMLString);

  DesignMode(True);
end;
macht leider keine <br> aus den <p> (bzw stellt <p> als <br> dar).

WM_CLOSE 30. Sep 2014 14:07

AW: HTML WYSIWYG Editor
 
Das ist leider ein ganz typisches Verhalten, das auch Word und Konsorten zeigen.
Um nur einen Zeilenumbruch zu machen müsste man [Strg]+[Return] drücken.
Wie man dieses Verhalten unterdrückt, weiß ich auf Anhieb jetzt nicht.

Dejan Vu 1. Okt 2014 10:56

AW: HTML WYSIWYG Editor
 
Wieso ist das 'leider' ein 'ganz typisches Verhalten'? Das ist so, denn bei Texten geht es um Fließtext. Wenn Du das als 'Zeilen' ansehen willst, dann definiere den Absatzendeabstand entsprechend. Falls ein Absatz im Blocksatz formatiert werden soll, würde ein <br> dazu führen, das die Zeile auf die gesamte Breite gezogen wird und dagegen hat man i.A. etwas (einfach weil es Kacke aussieht).

WM_CLOSE 2. Okt 2014 13:31

AW: HTML WYSIWYG Editor
 
Ich meinte "leider", weil viele Leute schlicht [Return] drücken um eine neue Zeile zu machen. Auch mehrmal hintereinander, damit der Abstand größer wird. Und zwar vom unbedarften, briefschreibenden Opa bis zur erfahrenen Sekretärin. Eben weil es geht und meiner Erinnerung nach nie einen (sichtbaren) Unterschied machte.

Den Absatzabstand an den Zeilenabstand anzugleichen ist aber mehr als kurzsichtig, denn viele Empfänger haben E-Mail-Programme die nicht standardkonform arbeiten und z.B. kein CSS auswerten. Das würde vielleicht scheiße aussehen.

Ein Lösungsansatz wäre den Code so abzuändern, dass beim Drücken der [Return]-Taste der gleiche Ablauf erfolgt wie bei [Strg]+[Return].


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