Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1123612655
Aleksandrrr
2005-08-09 22:37
2005.08.28
Блокировка выделенных клавиш !!!


3-1121373663
Kraft
2005-07-15 00:41
2005.08.28
Функция Locate


11-1106058725
Dimona 33321
2005-01-18 17:32
2005.08.28
Проблема с формами MCK


4-1120681463
ronyn
2005-07-07 00:24
2005.08.28
Как минимизировать программу в панель задач?


5-1091523502
Зинец Виктор
2004-08-03 12:58
2005.08.28
published -> private - как бы сделать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский