Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сделать из компонента TWebBrowser и формы .DLL? Сделать из компонента TWebBrowser и форм 
:(
    Опции темы
Pcrepair
Дата 10.3.2012, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



Добрый день!
есть код модуля на базе компонента TWebBrowser. модулю передается параметр в виде URL, модуль выдает строковый массив данных (ХТМЛ-код страницы) и флаг об окончании загрузки
////////////////////////////////////////////////////////////////////////////////
Код

var
  Form1: TForm1;
  UrlSearch : String; //входные параметры
  DataOut : String;  //выходные параметры
  Flag1 : boolean;   //окончание загрузки страницы

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Flag1 := False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Flags, TargetFrameName, PostData, Headers: Olevariant;
begin
if UrlSearch <> '' then
begin
   Timer1.Enabled := False;
   Flag1 := False;
   URL1 := UrlSearch;
  Flags := 0;
  TargetFrameName := 0;
  Postdata := 0;
  Headers := 0;
  WebBrowser1.Navigate(UrlSearch, Flags, TargetFrameName, PostData, Headers);
     repeat
       Application.ProcessMessages;
       until WebBrowser1.ReadyState >= READYSTATE_COMPLETE;
        if WebBrowser1.Document <> nil then
         DataOut := (WebBrowser1.Document as IHTMLDocument2).body.innerhtml;
         Application.ProcessMessages;
         begin
           T := TStringList.Create;//это в другом модуле
           T.Text := DataOut;
           //вызов процедур обработки кода. в отдельном модуле
         end;
        Flag1 := True;
       UrlSearch := '';
      URL1 := '';
    Timer1.Enabled := True;
  end;
end;

initialization
Set8087CW($133F);
end.


Вопрос программистам, хорошо знающим компонент TWebBrowser:
1. можно ли сделать все выше перечисленное в виде DLL, учитывая наличие формы и то что сам TWebBrowser вызывает DLL из ОС
2. будет ли все это работать стабильно, или есть косяки
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
Чучмек
Дата 10.3.2012, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Можно, весь фокус в oleinitialize.
Насколько косячить будет? Не знаю, но думаю что будет.
dll-
Код

library Project2;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,Classes,forms,activex,
  unit1;



{$R *.res}
procedure fshow;
begin
oleinitialize(nil);
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
oleuninitialize;
end;

Unit1 - модуль с формой
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    WebBrowser1: TWebBrowser;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
webbrowser1.Navigate('ya.ru');
end;

end.


Host Application
Код

program run;

uses
  windows;


   var h:cardinal;
   p:procedure;
begin
h:=loadlibrary('project2.dll');
p:=getprocaddress(h,'fshow');
p;
end.






--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Pcrepair
Дата 10.3.2012, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



получается что ДЛЛ вызывает ТВебБраузер с формой
а потом все это вызывается консолью(Host Application)?

вообще предполагалось немного иное:
- есть работающй код в виде формы, маленький кусочек большой программы, которая конечно имеет форму и на этой форме много всего
- хотелось этот код(уже работающий) обособить в виде ДЛЛ, ну чтоб листинг программы(которую еще долго писать и тестировать) был проще, а то там запутаться легко, несмотря на наличие комментариев
возможно ли это? в виде ДЛЛ. или все лучше в виде модуля, подключаемого к основной программе
там вообще этот код как раз вызывается периодически, постоянно его в ОЗУ держать и не надо, как раз ДЛЛ
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
Чучмек
Дата 10.3.2012, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Цитата(Pcrepair @  10.3.2012,  20:36 Найти цитируемый пост)
получается что ДЛЛ вызывает ТВебБраузер с формой

Нет получается dll содержит форму с TWebBrowser
Цитата(Pcrepair @  10.3.2012,  20:36 Найти цитируемый пост)
или все лучше в виде модуля

Лучше в виде модуля. Нервы сохранишь.
Цитата(Pcrepair @  10.3.2012,  20:36 Найти цитируемый пост)
 есть работающй код в виде формы

Ну и укажи в dll юнит этой формы. Методы application замени на TForm1.create, Form1.Show/ShowModal.
Поищи по запросу 
Цитата

delphi форма в dll





--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0455 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.