AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials EmbeddedWB, TinyMCE und eigene Form.Submit-Calls

EmbeddedWB, TinyMCE und eigene Form.Submit-Calls

Ein Tutorial von Codehunter · begonnen am 26. Jul 2012
Antwort Antwort
Benutzerbild von Codehunter
Codehunter
Registriert seit: 3. Jun 2003
Hallo!

Ich bin beim gemütlichen Programmierfluss auf ein gemeines Problemchen gestoßen. Das Szenario sah wie folgt aus: Ein Form, darauf ein Button und ein EmbeddedWB (kann aber auch ein TWebbrowser sein). Im Browser ein HTML-Formular mit einer Textarea, welche mit TinyMCE "aufgepeppt" wird. Vom Webserver wird der Textarea ein Default-Wert vorgegeben.
Code:
<form action="index.php" method="post">
  <textarea name="ta1" id="ta1" class="ta1">Original content</textarea>
  <input type="submit" value="Save">
</form>
jetzt soll der Button im Delphi-Form das Submit-Procedere des HTML-Dokumentes auslösen. Dazu habe ich zunächst die übliche Variante hergenommen. Also das Objekt des HTML-Forms besorgen und die Submit-Methode auslösen:
Delphi-Quellcode:
var
  Doc: IHTMLDocument2;
  Forms: IHTMLElementCollection;
  Form: IHTMLFormElement;
begin
  Doc:= BrowserControl.Document as IHTMLDocument2;
  Forms:= Doc.Forms as IHTMLElementCollection;
  Form:= Forms.Item(0,'') as IHTMLFormElement;
  if Assigned(Form) then Form.submit;
end;
Das Auslösen des Submits funktioniert so zwar, aber man wird schnell feststellen, dass dabei nicht der vom User geänderte Inhalt des TinyMCE abgeschickt wird sondern der "Original content" wie im obigen Beispiel. Die Lösung findet sich im MSDN (Abschnitt "Remarks"). Zitat: "The IHTMLFormElement:: submit method does not invoke the HTMLFormElementEvents:: onsubmit event handler."

Also muss man den widerborstigen IE ein wenig überlisten. Lustigerweise wird der Delphi-Code dadurch wesentlich übersichtlicher. Zuerst aber muss man sein HTML ein bisschen anpassen, indem man dem Submit-Button eine ID verpasst:
Code:
<input type="submit" id="subm1" value="Save">
Nun holt man sich einfach das Objekt dieses Buttons und löst seine Click-Prozedur aus:
Delphi-Quellcode:
begin
  BrowserControl.ElementByID['subm1'].click;
end;
Und siehe da: Jetzt wird auch der vom User geänderte Inhalt vom TinyMCE richtig abgeschickt. Da nun aber zwei Submit-Buttons etwas übertrieben wären (einer im HTML-Dokument, einer auf dem Delphi-Form) kann man den im HTML via CSS verstecken:
Code:
<input type="submit" id="subm1" value="Save" style="visibility: hidden;">
Und wiedereinmal hat man die IE-Welt gerettet
 
Themen-Optionen Tutorial durchsuchen
Tutorial durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 06:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf