Как прорисовать неактивное окно?

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Как прорисовать неактивное окно?

Post by iva »

Возникла задача перерисовать неактивное окно редактора, которое торчит из-под окна viewer в http://forum.farmanager.com/viewtopic.php?f=4&t=9613
Я знаю его (редактора) ID. Почитав энциклопедию, уверился, что editor.Redraw(ID) должно сработать, однако не работает. Нашёл способ с помощью far.AdvControl сделать активным нужное окно, тогда оно само прорисовывается. Тем не менее, некоторая неудовлетворённость осталась, в связи с чем возникли два вопроса:
1. Если editor.Redraw не перерисовывает неактивное окно, то зачем вообще нужен вызов этой функции с указанием ID?
2. Есть ли способ прорисовать окно, не делая его активным?
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Как прорисовать неактивное окно?

Post by Shmuel »

ACTL_REDRAWALL попробуйте.
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Как прорисовать неактивное окно?

Post by iva »

Спасибо, но ACTL_REDRAWALL не помогло.
Я понимаю так:
1. были панели;
2. запустили редактор - его окно нарисовалось поверх окна с панелями;
3. запустили просмотрщик в сдвинутом окне - из под его окна торчит часть окна редактора;
4. по F11 снова сделали активными панели - их окно нарисовалось поверх;
5. по F11 переключились в просмотрщик - он нарисовался, но из-под него торчит не редактор, а панели.
Если я все окна перерисую, они не изменят своего порядка наложения. Мне нужно именно вытащить наверх окно редактора. ACTL_SETCURRENTWINDOW это делает, но попутно делает окно активным. В данном случае это не так страшно, но если я попробую так-же действовать в случае двух редакторов, то придётся озаботиться тем, чтобы не зациклился обработчик события EE_GOTFOCUS. А хотелось этого избежать.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Как прорисовать неактивное окно?

Post by Shmuel »

Если это у вас макрос, попробуйте flags="EnableOutput".
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Как прорисовать неактивное окно?

Post by iva »

Это event обработчик GOTFOCUS.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Как прорисовать неактивное окно?

Post by zg »

давайте минимальный пример для воспроизведения.
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Как прорисовать неактивное окно?

Post by iva »

Насчёт минимального не знаю, а вот работающий, вроде, вариант (приложен).
Вместо кода, выделенного комментариями НАЧАЛО - КОНЕЦ, хотелось просто вызвать
editor.Redraw(EID), или что-нибудь простое другое.
Attachments
view2.lua.7z
(842 Bytes) Downloaded 67 times
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Как прорисовать неактивное окно?

Post by iva »

Ещё вопрос в догонку. Почему при CtrlO не приходит событие GOTFOCUS? Ну или, если приходит, то почему у меня не работает перерисовка?
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Как прорисовать неактивное окно?

Post by zg »

  1. editor.Redraw(EID)
  2.  
  3. far.AdvControl(F.ACTL_COMMIT)
вполне себе работает.
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Как прорисовать неактивное окно?

Post by iva »

Может я неправильно понял, но если я заменяю код между НАЧАЛО - КОНЕЦ на editor.Redraw(EID)
far.AdvControl(F.ACTL_COMMIT), у меня (на 4386 х86) перерисовки не происходит.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Как прорисовать неактивное окно?

Post by zg »

я открыл просмотр, переключился в панели, переключился в панели, обратно в просмотр, редактор перерисовался. без коммита слева виден кусок панелей.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Как прорисовать неактивное окно?

Post by sToLp »

iva wrote:заменяю код между НАЧАЛО - КОНЕЦ на editor.Redraw(EID) far.AdvControl(F.ACTL_COMMIT) ... перерисовки не происходит.
Аналогично. Win7 Ult Ru, Far 3.0.4394 x86.

В ходе теста последовательно загружены сабжевым макросом 4 файла. И затем они последовательно сбрасывались эскейпом.
Привожу и архив с этими и другими получившимися снимками экрана.
Attachments
test61.7z
(841.75 KiB) Downloaded 50 times
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Как прорисовать неактивное окно?

Post by zg »

на ACTL_COMMIT это у меня с каким-то макросом/плагином интерференция. на чистом фаре не помогает. на самом деле редактор перерисовывается, но он расположен под панелями, поэтому его не видно.
Post Reply

Return to “Нужна помощь”