Editor vizual html cu mâinile proprii

Luați în considerare principiul general de lucru cu aceste elemente. Ca și în cazul textului, mai întâi trebuie să creați un obiect de selecție (numiți Range):

Interfața IHTMLControlRange este special conceput pentru a efectua diverse operații asupra obiectelor selectate din pagină, cu toate acestea, este absolut imposibil să se aplice pentru lucrul cu o alocare de text - veți obține situația exclusivă EIntfCastError cu un mesaj că interfața selectată nu este acceptată (același lucru se întâmplă dacă utilizați IHTMLTxtRange pentru cu comenzi). Pentru a evita astfel de situații, câmpul Type_: widestring este introdus în interfața IHTMLSelectionObject. În funcție de tipul de selecție, va conține "Control" sau "Text" (dacă nu este selectat nimic, acest câmp va conține "Niciuna"). Iată un exemplu simplu despre cum puteți introduce o imagine într-un anumit loc într-un document (cum sa descris în primul articol modul de deschidere a unui document în modul de editare):







procedura TForm1.SpeedButton13Click (expeditor: TObject);
var
CtrlRange: IHTMLControlRange;
TextRange: IHTMLTxtRange;
începe
dacă editor.selection.type _ = 'Control' atunci
începe
CtrlRange: = (editor.selection.createRange ca IHTMLControlRange);
dacă nu CtrlRange.queryCommandEnabled ("InsertImage") atunci
Application.MessageBox ("Nu este suportat!", ");
altfel
CtrlRange.execCommand ('InsertImage', false, 'C: my filesporshe1.jpg') Sfârșit
altfel
începe
TextRange: = (editor.selection.createRange ca IHTMLTxtRange);
TextRange.execCommand ('InsertImage', fals, 'C: my filesporshe1.jpg')
se încheie;
se încheie;

Rețineți că atunci când obiectul este conținut, vom folosi metoda queryCommandEnabled pentru a vă asigura că această comandă poate fi efectuată pe controlul selectat. Acest lucru se datorează faptului că, de exemplu, cadrul încorporat nu poate fi înlocuit cu o imagine. De fapt, această verificare este opțională, însă recomand că aceasta să fie efectuată pentru a evita consecințele neplăcute. O altă metodă - queryCommandSupported (CmdID: WideString): boolean permite vyyanit sprijinit de comando dacă selectarea tipului de date. Aceleași metode există pentru interfața IHTMLTxtRange, dar în acest caz nu sunt necesare.







Cu mese, situația este mult mai complicată. Controalele, cum ar fi HTMLTable, HTMLRow și HTMLCell, conform documentației Microsoft, sunt concepute pentru a crea tabele atunci când construiește o pagină pe partea serverului. În consecință, în cazul nostru, există unele dificultăți: în special, cum să adăugați tabelul rezultat în document (în orice caz, nu am reușit). Ca o alternativă, propun următoarele: a crea tip de tabel HTMLTable, lucra cu ea ca și în cazul în care vom crea un document pe server, și apoi utilizați OuterHTML de proprietate. Acest câmp conține o reprezentare textuală a tabelului în format HTML. Să luăm în considerare această metodă mai detaliat cu exemplul: procedura TForm1.SpeedButton14Click (Sender: TObject);
var
Tabel: HTMLTable;
TextRange: IHTMLTxtRange;
rând: HTMLTableRow;
Col: HTMLTableCol;
i: întreg;
începe
dacă editor.selection.type_<>"Control" atunci
începe
table: = (editor.createElement ('Table') ca HTMLTable);
pentru i: = 0 la 3 nu
începe
rând: = (table.insertrow (i) ca DispHTMLTableRow);
col: = (rândul.insertCell (0) ca DispHTMLTableCol);
col.width: = '200';
col.style.borderColor: = '# FF0000';
col.innerText: = 'Cell #' + inttostr (i);
se încheie;
table.style.bordercolor: = '# 00FF00';
textrange: = (editor.selection.createrange ca IHTMLTxtRange);
textrange.pasteHTML (table.OuterHTML);
se încheie;
se încheie;

var
i, j: întreg;
ovTable: OleVariant;
t: HTMLTable;
începe
// Documentul trebuie să aibă un tabel, descris aproximativ în felul următor:
//

ovTable: = WebBrowser1.OleObject.Document.getElementsByName ( 'MyTable') produs (0).
//WebBrowser1.OleObject.Document.getElementsByName('MyTable ') -
// aceasta este o colecție de elemente (la urma urmei, pot avea mai multe elemente
// id este egal cu "MyTable"
pentru i: = 0 până la (ovTable.Rows.Length - 1)
pentru j: = 0 până la (ovTable.Rows.Item (i) .Cells.Length - 1) nu
ovTable.Rows.Item (i) .Cells.Item (j) .InnerText: = 'Text nou!';
se încheie;







Articole similare

Trimiteți-le prietenilor: