Страница 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
Собственно, если надо узнать, сверху ли панель задач:
Добавлено: Пт мар 29, 2013 15:58
LonerD
MVV
Спасибо!!!
Теперь перемещение окна Тотала в левую половину экрана приняло вид:
rleft=move(xWorkArea ? @-cxWorkArea : 0, yWorkArea ? @-cyWorkArea : 0, cxWorkArea/2, cyWorkArea)
и работает при любом положении панели задач. Во всяком случае на Windows8.
И соответственно наконец-то решилась давно мучавшая меня ситуация с убиранием заголовка окна Тотала и отображением окна не на весь экран, а вместе с панелью задач где бы она ни находилась.
Добавлено: Пт мар 29, 2013 16:49
MVV
А мсьё, гляжу, знает толк в извращениях.
Код: Выделить всё
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'
кроме предопределенного списка клавиш
Это о каком списке речь?
у меня не срабатывал, пришлось разбить на части:
То, что не надо заботиться о смене 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 минуты:
Блиииин...
Я ж сам перед отправкой сравнивал скан-код с кодами десяти расширенных клавиш и ставил им особый флаг.
Бета 360.
Всё через
KEYEVENTF_UNICODE, на этот раз без косяков. Но погонять всё равно надо.
Код: Выделить всё
test_hello_1=send(`%%фгПривет, World! ;{)}{tab}{del}%%нПривет|;{tab}Hello|:`)
Добавлено: Вт апр 02, 2013 19:03
sa
Остался открытым вопрос про '^+S', а так всё хорошо!