Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
ВнизHTML Редактор от Microsoft Найти похожие ветки
← →
Алексей Петухов (2005-07-23 21:01) [0]Здравствуйте, уважаеме мастера.
Вот пытаюсь работать сActiveX
сомпонентомTDHTMLEdit
.
на второй формеDHTMLEdit1:TDHTMLEdit
На первой форме кликаем кнопочкуprocedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.Create(nil);
Form2.ShowModal;
Form2.Free;
end;
И если на второй форме срабатывает какое либо обращение кDHTMLEdit1.DOM
, то получаем"Access Violation"
приForm2.Free
;
Помогите, чем можете :-)
А то я скоро кипятком писать начну :-)
← →
Алексей Петухов (2005-07-23 21:04) [1]Извините, добавлю:
...Хотя если используется одна форма в проекте, на которую кладем пресловутыйTDHTML,
то отрабатывает без ошибок....
← →
Алексей Петухов (2005-07-24 12:34) [2]Есть предположения?
← →
lookin © (2005-07-24 12:55) [3]>>На первой форме кликаем кнопочку
>>procedure TForm1.Button1Click(Sender: TObject);
>>begin
>> Form2:=TForm2.Create(nil);
>> Form2.ShowModal;
>> Form2.Free;
>>end;
>>на второй форме DHTMLEdit1:TDHTMLEdit
Не понял, а где на второй форме этот Едит?
← →
Алексей Петухов (2005-07-25 08:35) [4]
> Не понял, а где на второй форме этот Едит?
Прям на формеForm2
.
← →
Алексей Петухов (2005-07-26 17:35) [5]Кто - нибудь? Помогите, пожалуйста.
← →
Term © (2005-07-26 17:46) [6]
> Form2.Free;
всё правильно, я бы тоже кричал
> получаем "Access Violation"
← →
Term © (2005-07-26 17:46) [7]
> Form2.Free;
почитай про то что происходит с объектом в этом случае
← →
Джо © (2005-07-26 17:57) [8]
> И если на второй форме срабатывает какое либо обращение
> к DHTMLEdit1.DOM
Приведи код этого обращения.
← →
Term © (2005-07-26 18:05) [9]хотя да чтото он темнит приведи как код, а то чтото невразумительное складывается
← →
Плохиш © (2005-07-26 18:27) [10]Form2.Release; ?
← →
Алексей Петухов (2005-07-26 18:30) [11]Ну например:
DHTMLEdit1.DOM.charset:="windows-1251";
или (в событииonmouseup
)html:=DHTMLEdit1.DOM.parentWindow.event.srcElement.outerHTML;
П.С. Да не темню я. Просто не хотел заморачивать Вас "лишней" информацией.
П.С.№2. Может - ну его - этотTDHTMLEdit
? Посоветуйте пожалйста другую компоненту с такой-же функциональностью.
← →
Алексей Петухов (2005-07-26 18:33) [12]
> Form2.Release; ?
Не помогает
← →
Джо © (2005-07-26 18:37) [13]
> [12] Алексей Петухов (26.07.05 18:33)
> Не помогает
[8] Джо © (26.07.05 17:57)
← →
Алексей Петухов (2005-07-26 18:42) [14]Не понял Вас Джо.
← →
Term © (2005-07-26 18:43) [15]
> Не помогает
от того что ты приводиш кусками, тебе тоже советы будут давать кусками.
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> Form2:=TForm2.Create(nil);
> Form2.ShowModal;
> Form2.Free;
> end;
как я понял ты хочеш чтобы форма уничтожилась после закрытия
так для этого можно использовать Action:=caFree в событии OnClose, или я чтото не понял. Скажи какой рез-т хочеш получить
← →
Джо © (2005-07-26 18:45) [16]
> [14] Алексей Петухов (26.07.05 18:42)
> Не понял Вас Джо.
Вы пишете
> И если на второй форме срабатывает какое либо обращение
> к DHTMLEdit1.DOM
Я ответил, в [8] посте:
> Приведи код этого обращения.
Что непонятного?
← →
Алексей Петухов (2005-07-26 18:48) [17]1) Я хочу чтобы форма закрылаь без Exeption-ов.
2) Весь код, необходимый для осмысления проблемы, приведен в [1]
3) Вообще задача - элементарный редактор HTML с минимальным набором опций.
← →
Алексей Петухов (2005-07-26 18:49) [18]To
> Джо © (26.07.05 18:45) [16]
смотри пункт [11]
← →
Джо © (2005-07-26 18:50) [19]
> [17] Алексей Петухов (26.07.05 18:48)
> 2) Весь код, необходимый для осмысления проблемы, приведен
> в [1]
Если так уверен, осмысливай... Причем здесь тогда форум? Здесь же не гадалки собираются, а программисты.
← →
Джо © (2005-07-26 18:51) [20]
> [18] Алексей Петухов (26.07.05 18:49)
Сорри, у меня что-то клиент глюкнул, не показал [11]. Сейчас гляну.
← →
Алексей Петухов (2005-07-26 18:53) [21]
> Джо © (26.07.05 18:50) [19]
Не расстраивайтесь. Я не хотел Вас обидеть.
← →
Алексей Петухов (2005-07-26 18:56) [22]Вот еще обращение (к вопросу [8][9]):
OleVariant(heEditor.DOM.selection.createRange).pasteHTML("<a href="""+s+""">Перейти на "+s+"</a>");
← →
pasha_golub © (2005-07-26 19:11) [23]А ежели так?
Application.CreateForm();
← →
Джо © (2005-07-26 19:12) [24]Черт его знает, у меня уже любое обращение к
DHTMLEdit1.DOM
вызывает "Catastrophic failure" внезависимости от места вызова.
← →
pasha_golub © (2005-07-26 19:16) [25]А может этот самый DOM (Document Object Model) создавать и заполянть надобно?
← →
Джо © (2005-07-26 19:18) [26]
> [25] pasha_golub © (26.07.05 19:16)
Так отож. Хто его знает. В отладчике пока гоняю, там черт ногу сломит, когда он должен создаваться. DefaultInterface вроде создан - а дальше - темный лес. Никак не вникну :(
← →
Алексей Петухов (2005-07-26 20:26) [27]
> любое обращение к DHTMLEdit1.DOM вызывает "Catastrophic
> failure"
Попробуй обращаться к DOM только после того, как DHTMLEdit уже нарисовался на экране.
Например на обработчики кнопок повесь.
← →
Джо © (2005-07-26 20:29) [28]
> [27] Алексей Петухов (26.07.05 20:26)
Пробовал и так, разумеется. Но больше не буду - снес к чертовой матери этот самый ActiveX из пакетов. Из-за него Делфи стала некорректно этот пакет грузить. Так что - извини, помочь не смогу :0)
← →
Алексей Петухов (2005-07-27 09:18) [29]Что-же делать?
Может все-таки есть подобные компоненты?
← →
Amido (2005-07-27 10:53) [30]"3) Вообще задача - элементарный редактор HTML с минимальным набором опций."
Вот вам и редактор:
//...EmbeddedWb1.go(ExtractFileDir(ParamStr(0))+"\test.html");
while Embeddedwb1.Busy do
Application.ProcessMessages;
(EmbeddedWB1.document as IHTMLDocument2).designMode := "On";
//...
← →
Алексей Петухов (2005-07-27 14:17) [31]А что такое EmbeddedWb1?
← →
Amido (2005-07-27 15:18) [32]Посетите:
http://www.euromind.com/iedelphi/
← →
Amido (2005-07-27 15:55) [33]А если уж совсем просто (и быстро) хотите слелать "элементарный редактор HTML с минимальным набором опций" то в Делфи7 есть уже почти готовое решение:
C:\Program Files\Borland\Delphi7\Demos\CoolStuf
Остается только подключить MSHTML_TLB (поищите в интернете).
Добавить его в Uses. Бросить на готовый Делфинцкий пример кнопочку с названием типа "Edit":
//--- Knopka "Edit"
procedure TMainForm.Button1Click(Sender: TObject);
begin
(WebBrowser1.document as IHTMLDocument2).designMode := "On";
end;
И "наслаждаться" =] Если же захотите "копать глубже" - примите мои соболезнования =DDD
← →
Алексей Петухов (2005-07-28 20:26) [34]А есть ли у
TWebBrowser
или уTEmbeddedWB
методы, аналогичные следующим уTDHTMLEdit
?DHTMLEdit.ExecCommand(DECMD_BOLD, OLECMDEXECOPT_DONTPROMPTUSER);
DHTMLEdit.ExecCommand(DECMD_ITALIC, OLECMDEXECOPT_DONTPROMPTUSER);
DHTMLEdit.ExecCommand(DECMD_UNDERLINE, OLECMDEXECOPT_DONTPROMPTUSER);
DHTMLEdit.ExecCommand(DECMD_ORDERLIST, OLECMDEXECOPT_DONTPROMPTUSER);
и главное:DHTMLEdit.ExecCommand(DECMD_FONT, OLECMDEXECOPT_PROMPTUSER);
Очень надо :-)
← →
Джо © (2005-07-28 20:57) [35]
> [34] Алексей Петухов (28.07.05 20:26)
Да, конечно, они же реализуют один и тот же интерфейс, IHTMLDocument2.
Примерно так:procedure TForm1.Button1Click(Sender: TObject);
begin
// открываем страницу
WebBrowser1.Navigate("http://www.ya.ru");
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Doc: IHTMLDocument2;
begin
// делаем ее редактируемой
Doc := WebBrowser1.Document as IHTMLDocument2;
Doc.designMode := "On";
// вызываем различные другие методы интерфейса...
Doc.all.toString....
Doc.execCommand(...)
end;
← →
Amido (2005-07-29 10:35) [36]2Алексей Петухов
Если еще не разобрались, то вот несколько примеров Doc.execCommand(...) как продолжение к описанию
//Джо © (28.07.05 20:57) [35]
Doc.execCommand("Cut",false,0);
Doc.execCommand("Copy",false,0);
Doc.execCommand("Paste",false,0);
Doc.execCommand("Delete",false,0);
Doc.execCommand("Undo",false,0);
Doc.execCommand("Bold",false,0);
Doc.execCommand("Italic",false,0);
Doc.execCommand("Underline",false,0);
Doc.execCommand("StrikeThrough",false,0);
Doc.execCommand("InsertUnorderedList",false,0);
Doc.execCommand("JustifyLeft",false,0);
Doc.execCommand("JustifyRight",false,0);
Doc.execCommand("JustifyCenter",false,0);
Doc.execCommand("FontName",false,vFont.Name);
Doc.execCommand("FontSize",false,vFont.Size);
Doc.execCommand("ForeColor",false,vFont.Color);
← →
Алексей Петухов (2005-07-31 17:03) [37]Большое спасибо за помощь.
Буду пробовать.
> Amido (29.07.05 10:35) [36]
А где можно почитать описание методаDoc.execCommand
и его параметров?
← →
Алексей Петухов (2005-07-31 18:17) [38]И еще:
1. Как получить атрибуты шрифта выделенного текста?
2. Как сделать обработчик собылия OnMouseUp?
3. Как определить редактировалось ли содержание (onChange)?
4. как определить текущий (под курсором) таг (аналогично DHTMLEdit.DOM.parentWindow.event.srcElement;)
Заранее благодарю.
← →
Алексей Петухов (2005-08-01 13:38) [39]Есть предложения
← →
Admido (2005-08-01 13:48) [40]Алексей Петухов (31.07.05 17:03) [37]
"А где можно почитать описание метода Doc.execCommand и его параметров?"
Вот тут:
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/mshtml/reference/ifaces/document2/execcommand.asp
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.042 c