Avatar billede alvion Nybegynder
26. oktober 2000 - 13:12 Der er 3 kommentarer og
2 løsninger

Spørgsmål til Microsofts DHTML Editor

Jeg har brug for en løsning fra nogle, som har arbejdet med Microsofts DHTML Editor (den ActiveX control, som følger med Explorer 5)

Der findes en funktion kaldet \"ExecCommand\", som man kan give forskellige kommando-parametre til. F.eks.

DECMD_SETFONTNAME - Sæt et <font>-tag rundt om den markerede tekst og sæt fonten til den angivede.

DECMD_SETFONTSIZE - Ditto blot med font-størrelsen.

DECMD_SETBLOCKFMT - Formater den markerede tekst til en af de prædefinerede formater/tags <h1>, <h2>, <h3>, <p>, etc.

Mit spørgsmål: Findes der en tilsvarende kommando (eller en anden måde), hvor man kan putte et prædefineret stylesheet på den markerede tekst?

DECMD_SETBLOCKFMT kan ikke bruges - den giver som sagt kun mulighed for prædefinerede formater.

Kan det lade sig gøre, og i så fald: hvordan?
Avatar billede strato Nybegynder
26. oktober 2000 - 14:51 #1
Skal siden ændres som følge af et klik, el.anden event, eller skal dens style blot skrives dynamisk
når den loades? Skal problemmet løses med MS-DHTML editor?

Strato
Avatar billede strato Nybegynder
26. oktober 2000 - 15:23 #2
Hvis du istedet benytter javascript kan du dynamisk ændre stylesheets knyttet til en side.
Alle stylesheets knyttet til et HTML dok. er at
finde i array\'et document.styleSheets[].
Hvis du f.eks. vil ændre default et default styleSheet (hvis det er den eneste, eller det første i en række af styleSheets), skriver du
bare
<script>
document.styleSheets[0].href = newStyle.css
</script>

Du kan evt. gøre det som en del af en funktion, hvis det skal være via en event handler, f.eks.

<script>
function changeStyle() {
document.styleSheet[0].href = newStyle.css
}
</script>

og derefter tilføje en event handler, f.eks.
<DIV onMouseOver=\"changeStyle()\">Når musen føres henover denne tekst ændres stylesheet</DIV>

Ellers se:

http://msdn.microsoft.com/workshop/author/dynstyle/style_sheets.asp

mvh
Strato
Avatar billede jumper Nybegynder
27. oktober 2000 - 01:30 #3
Jeg vil som strato helt klart også anbefale at benytte Javascript udgaven af DHTML Editing Component. Du kan lave det samme (ved hjælp af execCommand og designMode) og brugeren skal ikke starte en ActiveX (hvilket giver en advarsel hos de fleste).

execCommand() finder du mere om på http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/execcommand.asp, hvor du også kan se at den virker på textRange objekter (http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/obj_TextRange.asp), hvilket gør at vi kan indsætte 100% valgfrit HTML-kode omkring det markerede:

var range = document.selection.createRange();
var oldHTML = range.htmlText; // HTML-koden i det markerede.
var newHTML = \'<b>\' + oldHTML + \'</b>\'; // Vi laver lidt HTML
range.pasteHTML(newHTML);// Og erstatter det gamle

I ovenstående eksempel tilføjes der blot <b> og </b> omkring det markerede, du kan selvf. indsætte hvad du har lyst til (span elementer med CSS, p elementer, osv., osv.)

/Thor
Avatar billede alvion Nybegynder
03. november 2000 - 18:19 #4
Beklager den sene tilbagemelding. Jeg har lige fået ny \'puter, som skulle installeres. :-)

Jumper, jeg forstår ikke helt hvad du mener med \"javascript udgaven af DHTML Editing Component\"?

Jeg prøver igen:

Jeg har lavet en scriptlet, som erstatter brugen af et textarea. Denne scriptlet instantierer DHTML-Editoren (altså ActiveX controllen) og eksponerer nogle metoder til \"parent\"-htmlfilen til at indsætte og læse tekst.

Det esentielle i koden er følgende:

form.htm
---------------
<script language=\"javascript\">
<!--
    function submitForm() {
        f = document.editForm;

        f.tekst.value = document.all.scrTekst.getHtml();

        f.submit();
    }
//-->
</script>

<form name=\"editForm\" method=\"post\" action=\"<%=formAction%>\">
    Tekst:<input type=\"hidden\" name=\"tekst\" value=\"\"><br>

    <object ID=scrTekst width=600 height=400 data=\"htmledit.htm\" type=\"text/x-scriptlet\"></object>

    <SCRIPT LANGUAGE=\"JavaScript\" FOR=scrTekst EVENT=\"onscriptletevent(name, eventData)\">
    <!--
        if (name == \"editorReady\")
            document.all.scrTekst.setHtml(\"<b>Noget html-tekst</b>\");
    //-->
    </script>

    <input type=\"button\" value=\"Gem\" onclick=\"submitForm();\">
</form>
-----------------------------------------------

htmledit.htm
----------------
<script>
    //////////////////////////////////////////////////////
    // Interface to the editor
    var public_description = new Editor

    function Editor() {
        this.setHtml = setHtml;
        this.getHtml = getHtml;
        this.setImageList = setImageList;
    }

    function getHtml() {
        return tbContentElement.DOM.body.innerHTML;
  }
 
  function setHtml(htmlSource) {
        tbContentElement.DOM.body.innerHTML = htmlSource;
  }
 
    function notifyClient() {
        window.external.raiseEvent(\"editorReady\", window.document);
    }
</script>

...

<object ID=\"tbContentElement\" CLASS=\"tbContentElement\" CLASSID=\"clsid:2D360201-FFF5-11d1-8D03-00A0C959BC0A\" VIEWASTEXT>
    <param name=Scrollbars value=true>
</object>
-----------------------------------------------

Der sker andre ting, men det skulle gøre det. Bla. er der også et knappanel, hvor brugeren kan udføre forskellige handlinger.

Hvis brugeren markerer noget tekst og trykker på \"Bold\" knappen i knappanelet, udfører mit script følgende kode:

tbContentElement.ExecCommand(DECMD_BOLD,OLECMDEXECOPT_DODEFAULT);

- helt uden at jeg skal bekymre mig om TextRanges.

Mit spørgsmål er så (igen ;-):

Findes der en tilsvarende kommando (eller en anden måde), hvor man kan putte et prædefineret stylesheet på den markerede tekst?
Avatar billede alvion Nybegynder
28. november 2000 - 00:26 #5
Jeg tror mit tykke hoved endelig har grejet, hvad det er i snakker om, så hermed en stak point til jer hver. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester