Страница 68 из 130

Добавлено: Чт мар 28, 2013 23:04
MVV
LonerD,
Долго думал, почему у тебя выезжает, а у меня остается в середине экрана, пока не догадался, что у тебя окно развернуто, о чем ты любезно умолчал. :)

В развернутом состоянии все окна в винде имеют отрицательные координаты и размеры, слегка превышающие размеры рабочей области - так винда убирает с экрана границы этих окон. На системах с несколькими мониторами эффект особенно забавен: на соседних мониторах видна выступающая часть окна.

Собственно, для решения твоей задачи просто замерь позицию окна и задавай её явно. В моем случае (Win7, тема на базе классической) это (-4, -4), размеры окна в моем случае 1608x1180, т.е. с каждой стороны по 4 пикселя окна обрезается, и это надо учесть в выражениях.

Добавлено спустя 13 минут:

Мда, да у тебя еще и панель задач сверху... Уточнять надо такие детали. Если панель снизу, высота окна задается корректно.

Добавлено спустя 14 минут:

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

Обновил TCFS2Tools.

Добавлено: Чт мар 28, 2013 23:53
Flasher
Я так и подумал, что какой -то нестандартный ход был. А про отрицательные размеры, конечно, уже тут речь велась. Вот панель наверху ещё вроде не рассматривали. Теперь вроде всё в порядке.
LonerD писал(а):Возможно, это тоже связано с тем, что TCFS2 не учитывает border окна Тотала
Это не TCFS2 не учитывает, это ты не учитываешь. Мы же с тобой разбирали примеры из статьи. Или всё подзабыл уже?

Добавлено: Пт мар 29, 2013 03:00
LonerD
замерь позицию окна и задавай её явно
Оказалось, это излишне.
В таком виде бордеры учитываются и отображаются, не съезжают, правда, только в случае с верхним и левым положением панели задач:
rleft=move(@-cxWorkArea, @-cyWorkArea, cxWorkArea/2, cyWorkArea)
Спасибо за обновление, теперь этот момент правильно работает.

Уточнять надо такие детали.

Я доверчивый... В ini-файле написано, что "cyWorkArea - высота рабочей области экрана без панели задач (если она сверху или снизу)". Раз написано - значит, это я что-то неправильно делаю :)


Flasher
Мы же с тобой разбирали примеры из статьи. Или всё подзабыл уже?
Разбирали, суть помню.

Добавлено спустя 1 час 8 минут:

MVV
Можешь просто добавить в TCFS2Tools переменную со значением положения панели задач - вверху, слева, справа, внизу ?

Добавлено: Пт мар 29, 2013 09:49
MVV
LonerD писал(а):без панели задач (если она сверху или снизу)
Да, есть такое, но не приходило мне в голову проверять с панелью сверху. Странно, что я пропустил момент, когда она слева. Возможно, потому, что на виртуальной машине у меня панель справа.
LonerD писал(а):Можешь просто добавить в TCFS2Tools переменную со значением положения панели задач - вверху, слева, справа, внизу ?
Вместо использования редкой функции оболочки лучше добавлю параметры для возврата верхней левой координаты рабочей области, это позволит определить её положение (или даже отбросит необходимость в этом):

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

xWorkArea=msg($433, tt_GetWorkArea, 2)
yWorkArea=msg($433, tt_GetWorkArea, 3)
Можете проверять. В моих тестах всё корректно:
[desktop]
w=1280
h=996
x=0
y=0

[desktop]
w=1220
h=1024
x=60
y=0

[desktop]
w=1280
h=996
x=0
y=28

[desktop]
w=1220
h=1024
x=0
y=0

Собственно, если надо узнать, сверху ли панель задач:

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

isTaskbarAtTop=xWorkArea==0 && yWorkArea>0

Добавлено: Пт мар 29, 2013 15:58
LonerD
MVV
Спасибо!!!
Теперь перемещение окна Тотала в левую половину экрана приняло вид:
rleft=move(xWorkArea ? @-cxWorkArea : 0, yWorkArea ? @-cyWorkArea : 0, cxWorkArea/2, cyWorkArea)
и работает при любом положении панели задач. Во всяком случае на Windows8.

И соответственно наконец-то решилась давно мучавшая меня ситуация с убиранием заголовка окна Тотала и отображением окна не на весь экран, а вместе с панелью задач где бы она ни находилась.

Добавлено: Пт мар 29, 2013 16:49
MVV
А мсьё, гляжу, знает толк в извращениях. :D

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

rleft=move(xWorkArea, yWorkArea, cxWorkArea/2, cyWorkArea)
При xWorkArea>0 всегда cxWorkArea+xWorkArea=@.

Добавлено: Вс мар 31, 2013 14:28
ask-rus
LonerD писал(а):И соответственно наконец-то решилась давно мучавшая меня ситуация с убиранием заголовка окна Тотала и отображением окна не на весь экран, а вместе с панелью задач где бы она ни находилась.
Однако, когда-то меня убедили, дав верное определение фуллскрину. Пример, большинство игр - полноэкранные приложения, где речи о показе панели задач нет в мыслях.

Добавлено: Вс мар 31, 2013 15:59
MVV
Задачи и желания бывают разные. Мне, например, неудобно, если панель задач скрыта. И не только мне.

Сделать окно действительно полноэкранным проще простого: спрятать заголовок окна и затем распахнуть его на весь экран, панель задач сама скроется. А вот сделать, чтобы окно было вроде бы и на весь экран, но при этом не полноэкранным, сложнее.

А вон в Win8 вообще новая мода пошла на полноэкранные программы в метро-стиле... Но мне на тему оформления Win8 смотреть тошно, но, к счастью, и не приходится.

Добавлено: Вт апр 02, 2013 10:31
sa
Почему-то у меня при попытке послать с помощью send двоеточие посылается точка с запятой…
Можно решить вопрос, послав +:, но непривычно как-то.

Добавлено: Вт апр 02, 2013 15:05
MVV
Символы преобразуются в реальные скан-коды клавиш, которые и посылаются. Регистр, раскладка клавиатуры и т.п. - всё это не имеет значения, скан-код не изменяется. То, для чего скан-код не может быть получен, посылается как символы юникода.

Бета 352.

В этой бете сделал, чтобы всё кроме предопределенного списка клавиш посылалось как юникод. Не знаю, будет ли такой вариант универсальным, потестировать надо.

Такие варианты кнопок вроде работают (оф. рус. перевод):

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

/ef "send(`%%фи%%s%%и`)"
/ef "send(`%%фгПривет, World!%%нПривет{tab}Hello`)"
Нашел баг с обработкой служебных символов ('|', ';') в строках.

Добавлено: Вт апр 02, 2013 16:19
sa
А '!' и '.' отрабатываются нормально?
А также '^+S'
кроме предопределенного списка клавиш
Это о каком списке речь?

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

/ef "send(`%%фи%%s%%и`)" 
у меня не срабатывал, пришлось разбить на части:

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

/ef "send(`%%фи`) send(`%%s%%и`)"
То, что не надо заботиться о смене RU/EN - здорово!

Добавлено: Вт апр 02, 2013 16:42
MVV
Это о каком списке речь?
О клавишах в фигурных скобках типа {tab} и {f5}.
А '!' и '.' отрабатываются нормально?
А вот и цветочки от перехода к отправке символов юникода...

Команда отправки:

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

/ef "send(` !"#${%%}&'{(}{)}*{+},-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]{^}_abcdefghijklmnopqrstuvwxyz{{}|{}}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—?™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя`)"
Печатаются символы:

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

 )*+,/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—?™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя
Проблемные символы:

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

!"#$%&'(-.
Так, с кавычкой понятно - это спецсимвол начала/конца параметра командной строки (по идее, через TCFS2.ini должно работать). А с остальными пока не ясно.

Почему-то точка даже через скан-код не отправляется. Остальные отправляются (кроме последнего символа с кодом 0x7F, но кому он нужен), но естественно в нижнем регистре. Ерунда какая-то.

Добавлено: Вт апр 02, 2013 17:46
sa
MVV писал(а):Почему-то точка даже через скан-код не отправляется.
В предыдущей (350) версии отправлялась, при английской раскладке.

Добавлено: Вт апр 02, 2013 18:32
MVV
А, точно, отправляется, это дурацкий символ 0x7F, стоящий после точки, убил её.

Но почему именно эти символы не отправляются с KEYEVENTF_UNICODE...

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

!"#$%&'(-.
А через скан-коды свои проблемы. Как сделать шифт, я разобрался, но как отправлять символы другой раскладки, не представляю...

Добавлено спустя 33 минуты:

Блиииин...
Я ж сам перед отправкой сравнивал скан-код с кодами десяти расширенных клавиш и ставил им особый флаг. :D

Бета 360.

Всё через KEYEVENTF_UNICODE, на этот раз без косяков. Но погонять всё равно надо.

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

test_hello_1=send(`%%фгПривет, World! ;{)}{tab}{del}%%нПривет|;{tab}Hello|:`)

Добавлено: Вт апр 02, 2013 19:03
sa
Остался открытым вопрос про '^+S', а так всё хорошо!