OpenOffice.org/DOCX/FB2 Viewer

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Ник писал(а):Не понял - он же для всех файлов одинаковый - на фига он там, а не в директории плагина?
Он был в директории плагина. Вначале. Но для fb2 это не работает: нельзя ссылаться на xsl в директории плагина, т.к. там есть еще один xsl (FB2_2_html_basics.xsl), который из дир плагина не подцепится...
Я пробовал..
Ник
Сообщения: 1256
Зарегистрирован: Ср дек 15, 2004 09:33
Откуда: Москва

Сообщение Ник »

А кто мешает делать временные файлы в директории плагина и стирать потом?
Или это не годится для портейбл вариантов?
Xubuntu
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Как раз не годится для portable вариантов... Вот еще на флешке может быть мало места, а ты начинавешь вьювить 10Мбайтный fb2.. КОнечно такие fb2 редко встречаются, но все-таки :)


Edit: директория плагина тоже может быть с русским именем.
Starina
Сообщения: 13
Зарегистрирован: Вт ноя 06, 2007 14:29

Сообщение Starina »

C клавишами для Lister'а получается что-нибудь или нет?
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Starina
Пока нет, пока этот код не пробовал. //Есть другие дела.
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Starina
Пока выложил код сюда, "WLXViewer_NewTesting". Не получается заменить TWebBrowser на TCustomizedWebBrowser: все виснет при старте плагина, посмотри плс, что там поправить надо в TCustomizedWB..
Starina
Сообщения: 13
Зарегистрирован: Вт ноя 06, 2007 14:29

Сообщение Starina »

Забрал. Посмотрю.
Starina
Сообщения: 13
Зарегистрирован: Вт ноя 06, 2007 14:29

Сообщение Starina »

Смысл в том, что надо описывать все методы интерфейса.

Код: Выделить всё

type

  TDocHostUIInfo = packed record
    cbSize: ULONG;
    dwFlags: DWORD;
    dwDoubleClick: DWORD;
  end;

const
  DOCHOSTUIFLAG_DIALOG                  = 1;
  DOCHOSTUIFLAG_DISABLE_HELP_MENU       = 2;
  DOCHOSTUIFLAG_NO3DBORDER              = 4;
  DOCHOSTUIFLAG_SCROLL_NO               = 8;
  DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE = 16;
  DOCHOSTUIFLAG_OPENNEWWIN              = 32;
  DOCHOSTUIFLAG_DISABLE_OFFSCREEN       = 64;
  DOCHOSTUIFLAG_FLAT_SCROLLBAR          = 128;
  DOCHOSTUIFLAG_DIV_BLOCKDEFAULT        = 256;
  DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY = 512;
const
  DOCHOSTUIDBLCLK_DEFAULT               = 0;
  DOCHOSTUIDBLCLK_SHOWPROPERTIES        = 1;
  DOCHOSTUIDBLCLK_SHOWCODE              = 2;
type

  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;

type
  TCustomizedWebBrowser = class(TWebBrowser, IDocHostUIHandler)
    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;

implementation

uses
  Dialogs, Messages;

{ TCustomizedWebBrowser }

function TCustomizedWebBrowser.EnableModeless(
  const fEnable: BOOL): HRESULT;
begin
  Result := S_OK;
end;

function TCustomizedWebBrowser.FilterDataObject(const pDO: IDataObject;
  out ppDORet: IDataObject): HRESULT;
begin
  ppDORet := nil;
  Result := S_FALSE;
end;

function TCustomizedWebBrowser.GetDropTarget(
  const pDropTarget: IDropTarget; out ppDropTarget: IDropTarget): HRESULT;
begin
  ppDropTarget := nil;
  Result := E_FAIL;
end;

function TCustomizedWebBrowser.GetExternal(
  out ppDispatch: IDispatch): HRESULT;
begin
  ppDispatch := nil;
  Result := E_FAIL;
end;

function TCustomizedWebBrowser.GetHostInfo(
  var pInfo: TDOCHOSTUIINFO): HRESULT;
begin
  Result := S_OK;
end;

function TCustomizedWebBrowser.GetOptionKeyPath(var pchKey: POLESTR;
  const dw: DWORD): HRESULT;
begin
  Result := E_FAIL;
end;

function TCustomizedWebBrowser.HideUI: HRESULT;
begin
  Result := S_OK;
end;

function TCustomizedWebBrowser.OnDocWindowActivate(
  const fActivate: BOOL): HRESULT;
begin
  Result := S_OK;
end;

function TCustomizedWebBrowser.OnFrameWindowActivate(
  const fActivate: BOOL): HRESULT;
begin
  Result := S_OK;
end;

function TCustomizedWebBrowser.ResizeBorder(const prcBorder: PRECT;
  const pUIWindow: IOleInPlaceUIWindow; const fRameWindow: BOOL): HRESULT;
begin
  Result := S_FALSE;
end;

function TCustomizedWebBrowser.ShowContextMenu(const dwID: DWORD;
  const ppt: PPOINT; const pcmdtReserved: IInterface;
  const pdispReserved: IDispatch): HRESULT;
begin
  Result := S_FALSE;
end;

function TCustomizedWebBrowser.ShowUI(const dwID: DWORD;
  const pActiveObject: IOleInPlaceActiveObject;
  const pCommandTarget: IOleCommandTarget; const pFrame: IOleInPlaceFrame;
  const pDoc: IOleInPlaceUIWindow): HRESULT;
begin
  Result := S_OK;
end;

function TCustomizedWebBrowser.TranslateAccelerator(const lpMsg: PMSG;
  const pguidCmdGroup: PGUID; const nCmdID: DWORD): HRESULT;
begin
  Result := S_FALSE;
  
  with lpMsg^ do
    if (message = WM_KEYDOWN) and (GetKeyState(VK_CONTROL) >= 0) then
      begin
        MessageDlg(Char(wParam), mtWarning, [mbOK], 0);

        Result := S_OK;
      end
end;

function TCustomizedWebBrowser.TranslateUrl(const dwTranslate: DWORD;
  const pchURLIn: POLESTR; var ppchURLOut: POLESTR): HRESULT;
begin
  Result := E_FAIL;
end;

function TCustomizedWebBrowser.UpdateUI: HRESULT;
begin
  Result := S_OK;
end;

Но прикол в том, что вызываются все методы кроме нужного.
Буду смотреть дальше.
volovyan
Сообщения: 51
Зарегистрирован: Пн дек 03, 2007 20:34
Откуда: Vancouver, Canada

Сообщение volovyan »

Я в своем плагине (PDF-Filter) это делал, не помогло, как не работали клавиши, так и не работают. После плясок с бубнами с CustomizedBrowser, EmbeddedBowser, etc., понял, что
нужно смотреть на установку хука с помощью SetWindowsHookEx, с этим все работает отлично (спасибо IEView, там именно так и сделано).
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

volovyan писал(а):После плясок с бубнами с CustomizedBrowser, EmbeddedBowser, etc., понял, что
нужно смотреть на установку хука с помощью SetWindowsHookEx
Ясно, спасибо. У меня есть пример плагина с хуком, но я в нем не разобрался. Не хватило терпения. :?
volovyan
Сообщения: 51
Зарегистрирован: Пн дек 03, 2007 20:34
Откуда: Vancouver, Canada

Сообщение volovyan »

У меня после установки хука работает отлично. Код пришлю сегодня (7 дек) вечером (по нашему местному времени :) на работе работаю :) )
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Пример плагина с WebBrowser и хуком?- спасибо.
volovyan
Сообщения: 51
Зарегистрирован: Пн дек 03, 2007 20:34
Откуда: Vancouver, Canada

Сообщение volovyan »

См. ЛС
Ник
Сообщения: 1256
Зарегистрирован: Ср дек 15, 2004 09:33
Откуда: Москва

Сообщение Ник »

Новостей не будет?
Xubuntu
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

С тем, что сказал Volovyan? нет. Нет времени этим заниматься,- встраиванием хука в плагин и тестированием потом, как это все работает то в Тотале, то в Universal Viewer.

Тем более я хуки не люблю, не программировал с ними ничего..
Ответить