как убрать рамку вокруг Twebbrowser ?

Тема в разделе "Delphi - Система", создана пользователем milkyway, 24 янв 2006.

Статус темы:
Закрыта.
  1. milkyway

    milkyway Гость

    Сабж собственно.
    При открытии TWebBrowserом лоальных директорий кстати рамка не появляется, а когда открываю все остальное -- она совершенно портит дизайн приложения
    (это презентация, тут важен хороший дизайн)

    Цель: снести нах
    Вопрос: как?
    зы: или я слепой, или никаких свойств типа border там нет...
    Заранее пасиба за помощь.
     
  2. Barmutik

    Barmutik Гость

    Нужно использовать IDOCHOSTUIHANDLER...у него есть GetHostInfo а у WebBrowser есть параметр No3DBorder...

    Его устанавливаете и вероятно будет то что Вам надо ...

    Ну единственное что надо породить наследника и мплементнуть этот интерфейс .. но а если это делать лень, то можно воспользоваться готовым компонентом который это уже делает ...
     
  3. Guest

    Guest Гость

    Пасиб конечно за помощь... а можно более подробно (и несколько строчек кода для примера, есди не сложно) написать, как это сделать
     
  4. Barmutik

    Barmutik Гость

    Такккк ...

    Делайте наследника от TWebBrowser и у него имплементите IDocHostUIHandler,
    далее на GetHostInfo

    Код (Text):
    DOCHOSTUIFLAG_NO3DBORDER = $0004; // константа у Микрософта из хелпа

    function TXXX.GetHostInfo(var pInfo: TDOCHOSTUIINFO): HRESULT;
    begin
    pInfo.cbSize := SizeOf(pInfo);
    pInfo.dwFlags := DOCHOSTUIFLAG_NO3DBORDER;
    pInfo.dwDoubleClick := DOCHOSTUIDBLCLK_DEFAULT;
    Result := S_OK;
    end;
    И будет Вам счастье .. надеюсь :( ... Ну у меня по крайней мере всё это работает ..

    Там вот сколькими параметрами играться можно ...
    Код (Text):
     DOCHOSTUIFLAG_DIALOG = $0001;
    DOCHOSTUIFLAG_DISABLE_HELP_MENU = $0002;
    DOCHOSTUIFLAG_NO3DBORDER = $0004;
    DOCHOSTUIFLAG_SCROLL_NO = $0008;
    DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE = $0010;
    DOCHOSTUIFLAG_OPENNEWWIN = $0020;
    DOCHOSTUIFLAG_DISABLE_OFFSCREEN = $0040;
    DOCHOSTUIFLAG_FLAT_SCROLLBAR = $0080;
    DOCHOSTUIFLAG_DIV_BLOCKDEFAULT = $0100;
    DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY = $0200;
    DOCHOSTUIFLAG_OVERRIDEBEHAVIORFACTORY = $0400;
    DOCHOSTUIFLAG_CODEPAGELINKEDFONTS = $0800;
    DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8 = $1000;
    DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8 = $2000;
    DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE = $4000;
    DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION = $10000;
    DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION = $20000;
    DOCHOSTUIFLAG_THEME = $40000;
    DOCHOSTUIFLAG_NOTHEME = $80000;
    DOCHOSTUIFLAG_NOPICS = $100000;
    DOCHOSTUIFLAG_NO3DOUTERBORDER = $200000;
    DOCHOSTUIFLAG_DISABLE_EDIT_NS_FIXUP = 1;
    DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK = 1;
    DOCHOSTUIFLAG_DISABLE_UNTRUSTEDPROTOCOL = 1;
    Опять же похожим способом можно играться и с настройками откачки...

    Код (Text):
    DLCTL_DLIMAGES
    DLCTL_VIDEOS
    DLCTL_BGSOUNDS
    DLCTL_NO_SCRIPTS
    DLCTL_NO_JAVA
    DLCTL_NO_RUNACTIVEXCTLS
    DLCTL_NO_DLACTIVEXCTLS
    DLCTL_DOWNLOADONLY
    DLCTL_NO_FRAMEDOWNLOAD
    DLCTL_RESYNCHRONIZE
    DLCTL_PRAGMA_NO_CACHE
    DLCTL_NO_BEHAVIORS
    DLCTL_NO_METACHARSET
    DLCTL_URL_ENCODING
    DISABLE_UTF8
    DLCTL_URL_ENCODING_ENABLE_UTF8
    DLCTL_FORCEOFFLINE
    DLCTL_NO_CLIENTPULL
    DLCTL_SILENT
    DLCTL_OFFLINE
    Очень полезно когда надо отключить откачку картинок в отдельно выделнном браузере или допустим сделать что бы он не выкидывал ошибки на скриптах...
     
  5. milkyway

    milkyway Гость

    Пасиб. огромное, щас пойду делать наследника :(
     
  6. Barmutik

    Barmutik Гость

    Нет проблем .. главное что бы наследник хороший получился :( :( ;)
     
  7. mamba

    mamba Гость

    Мальчики, подскажите пожалуйста, как этого наследника делать?
    Это значит создать класс, осонованый на TWebBrowser?
    Обьясните плиз, на примере кода?
     
  8. Barmutik

    Barmutik Гость

    :D

    Код (Text):
     TMambaBrowser = class(TWebbrowser, IDocHostShowUI, IDocHostUIHandler,
       IDocHostUIHandler2)
    end;
    Наследник от TWebBrowser, который собирается импелементнуть перечисленные интерфейсы...
     
  9. mamba

    mamba Гость

    Для: Barmutik
    Спасибо вам большущее и пламенное!
    Мы сделали мне такого хорошего потомка.
    Только эээ, что с этим потомком теперь делать?
    Ну, вот обычно я просто перетаскиваю компонент на форму и все.
    А куда же нашего потомка засунуть?
    Вот так вы, мужики, всегда -- как потомка сделать -- 5 минут и готово.
    А вот что с ним дальше то?
    :(
    Подскажие, плиз.
    Буду очень признательна.
     
  10. Barmutik

    Barmutik Гость

    Гммм.. потомок то явно хороший .. вопросов нет ;)

    Что бы Вы могли его перетащить на форму нужно его зарегестрировать как компонент... но до этого нужно имплементуть все его интерфейсы который Вы унаследовали в потомке...

    Ну тут работы скажем не на 5 минут ;) .. но я ж не знаю что Вам от этого потомка надо то .. я просто написал что сами делали ..

    И зачем Вам вообще наследоваться ? Что стандартного браузера не хватает ?


    P.S. Нормальные мужчины знают немного побольше того, как потомка сделать за 5 минут.. ну например как его сделать за 30 минут ;)
     
  11. bndr

    bndr Гость

    В продолжение темы:::

    Создал компоненту:

    Код (Text):
    unit CustomWB;

    interface
    uses
    Windows, Classes, SHDocVw;

    type TDOCHOSTUIINFO = packed record
    cbSize: ULONG;
    dwFlags: DWORD;
    dwDoubleClick: DWORD;
    end;

    type IDocHostUIHandler = interface(IUnknown)
     ['{bd3f23c0-d43e-11cf-893b-00aa00bdce1a}']
    function GetHostInfo(var pInfo: TDOCHOSTUIINFO): HRESULT; stdcall;
    end;

    type
     TCustomizedWebBrowser = class(TWebBrowser, IDocHostUIHandler)
    Private
     function GetHostInfo(var pInfo: TDOCHOSTUIINFO): HRESULT;  stdcall;
    end;

    procedure Register;

    const

     DOCHOSTUIFLAG_FLAT_SCROLLBAR = $0080;
     DOCHOSTUIFLAG_DIV_BLOCKDEFAULT = $0100;

    implementation

    procedure Register;
    begin
     RegisterComponents('Internet', [TCustomizedWebBrowser]);
    end;

    function TCustomizedWebBrowser.GetHostInfo(var pInfo: TDOCHOSTUIINFO): HRESULT; stdcall;
    begin
     pInfo.dwFlags := DOCHOSTUIFLAG_FLAT_SCROLLBAR or DOCHOSTUIFLAG_DIV_BLOCKDEFAULT;
     Result := S_OK;
    end;

    end.
    И этот код не работает. В том плане что открывая страницу
    webbrowser1.navigate() , webbrowser подвисает и наведя на него стрелку, курсор меняется на стрелку с часиками. при попытке открыть снова какую нить страницу программа говорит что требуемый ресурс занят.

    Что я делаю не так подскажите....
    Мучаюсь уже дня три наверное

    Заранее спасибо за ответ..
     
  12. Barmutik

    Barmutik Гость

    Вообще-то вот полное описание интерфейса... а кто остальное будет имплементить?

    Код (Text):
     IDocHostUIHandler = interface(IUnknown)
    ['{bd3f23c0-d43e-11cf-893b-00aa00bdce1a}']
    function ShowContextMenu(const dwID: DWORD; const ppt: PPOINT;
    const pcmdtReserved: IUnknown; const pdispReserved: IDispatch): HRESULT; stdcall;
    function GetHostInfo(var pInfo: TDOCHOSTUIINFO): HRESULT; stdcall;
    function ShowUI(const dwID: DWORD; const pActiveObject: IOleInPlaceActiveObject;
    const pCommandTarget: IOleCommandTarget; const pFrame: IOleInPlaceFrame;
    const pDoc: IOleInPlaceUIWindow): HRESULT; stdcall;
    function HideUI: HRESULT; stdcall;
    function UpdateUI: HRESULT; stdcall;
    function EnableModeless(const fEnable: BOOL): HRESULT; stdcall;
    function OnDocWindowActivate(const fActivate: BOOL): HRESULT; stdcall;
    function OnFrameWindowActivate(const fActivate: BOOL): HRESULT; stdcall;
    function ResizeBorder(const prcBorder: PRECT;
    const pUIWindow: IOleInPlaceUIWindow;
    const fRameWindow: BOOL): HRESULT; stdcall;
    function TranslateAccelerator(const lpMsg: PMSG; const pguidCmdGroup: PGUID;
    const nCmdID: DWORD): HRESULT; stdcall;
    function GetOptionKeyPath(var pchKey: POLESTR; const dw: DWORD): HRESULT; stdcall;
    function GetDropTarget(const pDropTarget: IDropTarget;
    out ppDropTarget: IDropTarget): HRESULT; stdcall;
    function GetExternal(out ppDispatch: IDispatch): HRESULT; stdcall;
    function TranslateUrl(const dwTranslate: DWORD; const pchURLIn: POLESTR;
    var ppchURLOut: POLESTR): HRESULT; stdcall;
    function FilterDataObject(const pDO: IDataObject;
    out ppDORet: IDataObject): HRESULT; stdcall;
    end; // IDocHostUIHandler
    И вот пример реализации того метода что Вам надо:
    Код (Text):
    XXX.GetHostInfo(var pInfo: TDOCHOSTUIINFO): HRESULT;
    begin
    pInfo.cbSize := SizeOf(pInfo);
    pInfo.dwFlags := AAA or BBB or CCC or ...;
    end;
    Это точно работает...
     
  13. bndr

    bndr Гость

    Ага, пасиб я уже все сделал, просто я не знал что нужно описывать полностью интерфейс, думал надо только те которые собираешься испльзовать, оказалось нет...

    Пасиб за ответ!
     
  14. Barmutik

    Barmutik Гость

    Удачи!
     
  15. 4uf

    4uf Гость

    Помогите плис!

    У IDocHostUIHandler интерфейс описан,все компилится, но когда пытаюсь создать наследника:
    type
    TCustomizedWebBrowser = class(TWebBrowser, IDocHostUIHandler)
    end;
    выдает ошибку:Unsatisfied forward or external declaration 'ShowContextMenu'
    Unsatisfied forward or external declaration 'GetHostInfo'
    и т. д.
    что делать подскажите...
     
  16. Barmutik

    Barmutik Гость

    Ну так Вы в наследнике то функции объявите IDocHostUIHandler и перестанет компилятор ругаться...
     
  17. 4uf

    4uf Гость

    извиняюсь !!! до етого он писал:
    undeclared identifier:'GetHostInfo'

    а после того как я эти функции в наследнике объявлял
    он писал:
    Unsatisfied forward or external declaration: 'TCustomizedWebBrowser.GetHostInfo'
     
  18. Barmutik

    Barmutik Гость

    Мммм.. а имплеменатцию Вы этих функций сделали? Судя по ошибке Вы их только объявили а реализацию не сделали...
     
  19. 4uf

    4uf Гость

    Тогда как сделать реализацию??
    или где взять файлик в котором они реализованы?
    или я что то нето говорю....
     
  20. 4uf

    4uf Гость

    все получилось!!!
    статья на англиском, но ведь есть исходник....
    спасибо большое всем кто уделил внимание
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей