Я придумал какое-то решение проблемы с перестройкой после закрытия боковых панелей.Он включает в себя вызов метода doVerb контейнера ole для обновления документа в контейнере.Однако это визуально непривлекательно и немного отнимает много времени, и его следует вызывать только при необходимости, то есть когда панель на стороне Word фактически закрыта.Это не легко обнаружить.Нет никаких событий VBA и т. Д. Он включает в себя ловушку мыши, чтобы перехватить мышь вниз с анализом окна, которое находится ниже мыши.К сожалению, классы окон и заголовки окон кнопки выхода на различных боковых панелях Word совпадают с общей панелью инструментов, которая также обычно содержит раскрывающееся меню, позволяющее перемещать, изменять размеры и закрывать.Выпадающее меню имеет другое имя класса, но каждый из пунктов меню имеет то же имя класса, что и меню.Короче говоря, невозможно сказать только по именам классов, нажата ли кнопка выхода.Клад, который я придумал, - это добавить таймер с интервалом около 250 миллисекунд.Функция ловушки включает таймер, а событие таймера проверяет, исчезла ли боковая панель.Я изложил код, который я разработал для этого.Я уверен, что это вполне может быть улучшено.
Внутри процедуры ловушки:
var
hw: hwnd;
clsName, wText: array [0 .. 255] of Char;
PT: tpoint;
begin
GetCursorPos(pt);
HW:= WindowFromPoint (PT);
GetClassName (HW, clsName, 256);
GetWindowText (HW, wText, 256);
if (uppercase(clsName) = 'MSOCOMMANDBAR')
Or ((uppercase(clsName) = 'MSOCOMMANDBARPOPUP')
And (uppercase(wText) = 'WORKPANE OPTIONS MENU')) then begin
HookMsg.Result := 0;
Timer1.Enabled := true;
end;
end;
Внутри события onTimer:
var
PT: TPoint;
HW: hwnd;
clsName, wText: array [0 .. 255] of Char;
begin
timer1.Enabled:=false;
GetCursorPos(PT);
Hdl := WindowFromPoint (PT);
GetClassName (HW, clsName, 256);
GetWindowText (HW, wText, 256);
if (uppercase(clsName) <> 'MSOCOMMANDBAR')
And (uppercase(clsName) <> 'MSOCOMMANDBARPOPUP')
And (uppercase(wText) <> 'WORKPANE OPTIONS MENU') then
OLEContainer1.DoVerb(ovSHow);
end;
Насколько я могу работатьимена двух классов одинаковы для всех боковых панелей Word.