View previous topic :: View next topic |
Author |
Message |
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
|
Back to top |
|
|
LocKtaR-o-DarK
Joined: 12 Aug 2005 Posts: 349 Location: Москва
|
(Separately) Posted: Sat Sep 24, 2005 11:23 Post subject: |
|
|
Посмотрел сайт, но, честно говоря, большинство описанных операций делаются тоталом и без применения скриптов. |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Sun Sep 25, 2005 10:41 Post subject: |
|
|
Многие скрипты весьма накручены и в них даже трудновато разобраться. А некоторые просто некий набор клавиатурных команд, посылаемых Тоталу, тоесть могут быть реализованы и без тяжелой артиллерии PowerPro.
ЗЫ Вахмурка, нарисуй скрипт для установки разделителя файловых панелей в определенное положение. Я потом свой вариант покажу. Померяемся |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Sun Sep 25, 2005 20:18 Post subject: |
|
|
LocKtaR-o-DarK wrote: | Посмотрел сайт, но, честно говоря, большинство описанных операций делаются тоталом и без применения скриптов. |
Разумеется. Ничего другого и ждать было нельзя. Но можно попробовать с секундомером засечь, что быстрее.
Вот это, разве что, ТС не делает ну никак:
http://pprotcmd.narod.ru/Scripts/TabTools.htm
Сделаешь - напиши как. Всем будет интересно.
А вообще скрипты (имеется в виду именно приложение их к ТС) не могут сделать того, что выходит за рамки возможностей самого ТС. Скрипт упрощает и ускоряет работу, но не более того. Об этом я написал во Введении.
2Volniy
Quote: | Многие скрипты весьма накручены и в них даже трудновато разобраться |
И не надо. Где надо разбираться, я пометил синеньким.
Напишешь то же проще - пришли, выложу.
Quote: | А некоторые просто некий набор клавиатурных команд, посылаемых Тоталу, тоесть могут быть реализованы и без тяжелой артиллерии PowerPro |
Пиши - выложу.
Quote: | Вахмурка, нарисуй скрипт для установки разделителя файловых панелей в определенное положение. Я потом свой вариант покажу. Померяемся |
Не обещаю. Оно мне не надо. А это очень трудно - писать то, что не надо. _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Tue Sep 27, 2005 21:03 Post subject: |
|
|
2Volniy
Volniy, ты редиска. Ты меня взял на слабо, как сопливого пацана. И я в течение часа занимался тем, что я никогда не буду использовать. Только чтобы слиться с тобой в экстазе "компаративной фаллометрии". Бяка ты, Volniy.
Ну, а если серьезно. Ты не совсем четко поставил задачу, и я имел право решить ее для частного случая, а именно:
1) используются только "стандартные положения" разделителя;
2) предполагается, что разделитель вертикальный, а не горизонтальный.
Больше мериться с тобой не буду (обещала лиса кур не таскать...). Хотя пути решения могу наметить, если хочешь, там все тривиально.
Code: |
;arg(1) is "1" for 20% from left, "2" for 30%, ... etc ..., "7" for 80%
local Where = arg(1)
local i
local Hand = win.handle("c=TTOTAL_CMD")
flag set 1
for(i = 1; 1; i = i + 1)
hh = childwin.handle(Hand, i)
if(hh != "" && win.width(hh) == 3) do
flag clear 1
break
endif
endfor
if(pproflag(1))
quit
local HCenter = (win.left(hh) + win.right(hh))/2
local VCenter = (win.top(hh) + win.bottom(hh))/2
local expr = "ab " ++ HCenter ++ " " ++ VCenter
win.mouse(expr)
wait.for(10)
mouse rightdown
wait.for(10)
mouse rightup
for(i = 1; i <= Where; i = i + 1)
*keys {down}
endfor
*keys {enter}
|
|
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Wed Sep 28, 2005 15:47 Post subject: |
|
|
Вахмурка wrote: | Бяка ты, Volniy.
Ну, а если серьезно. Ты не совсем четко поставил задачу, и я имел право решить ее для частного случая |
То, что я бяка спорить не стану Даже больше, чем бяка, потому как скрипта на PowerPro я и не собирался писать (хотя, могу и попробовать, конечно). Все гораздо проще: в моем варианте это скрипт на моем TC WSH Helper-е. Там для этой цели я написал отдельный метод (ну просто для понту). То есть установить разделитель в нем можно всего лишь одной командой.
Quote: | Больше мериться с тобой не буду (обещала лиса кур не таскать...). Хотя пути решения могу наметить, если хочешь, там все тривиально. |
В принципе да, произвольная установка тоже достаточно просто реализуется (поиск окна панели разделителя - установка указателя мышки на нем - программное перемещение указателя в нужную позицию экрана - отпускание ), но и мне повозиться прилично пришлось. Но зато теперь этот метод может установить разделитель (пока тоже только вертикальный) в нужное положение (при любом положении и размере окна Тотала) с точностью 0,1% (!, только кому это нафиг нужно ).
Ты зря подумал, что я до тебя докапываюсь или типа того. Мне наоборот, даже слегка стыдно стало, что вот человек такую работу нифиговую проделал, а я никак свой хелпер в релиз не выпущу, все лень матушка... |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Thu Sep 29, 2005 14:42 Post subject: |
|
|
Volniy wrote: | с точностью 0,1% (!, только кому это нафиг нужно . |
2Volniy
Золотые слова! Хватит позориться нам с тобой, зас...ая инет бессмысленными скриптами.
У меня к тебе проф. вопрос. Задача: закрыть заданную вкладку, не активизируя ее (если путь указывает в несуществующее место, например). Среда разработки не имеет никакого значения. Там фишка - в арифметике: учесть количество вкладок, названия, ширину окна. Если все аккуратно продумать, можно точно указать координату над нужной вкладкой. Остается открыть вкладочное меню и послать Ctrl+W.
Есть какие-нибудь мысли на этот счет? Если хочешь, вдвоем что-нибудь сваляем. Цель стоящая, по себе знаю. Часто приходится такое делать. Я написал скрипт http://pprotcmd.narod.ru/Scripts/Subs/Subs.htm#PathVal, который лишь находит "тухлую" вкладку, но закрывать ее приходится врукопашную, а это не есть хорошо. _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Fri Sep 30, 2005 02:01 Post subject: |
|
|
Вахмурка wrote: |
У меня к тебе проф. вопрос. Задача: закрыть заданную вкладку, не активизируя ее (если путь указывает в несуществующее место, например). Среда разработки не имеет никакого значения. Там фишка - в арифметике: учесть количество вкладок, названия, ширину окна. Если все аккуратно продумать, можно точно указать координату над нужной вкладкой. Остается открыть вкладочное меню и послать Ctrl+W.
Есть какие-нибудь мысли на этот счет? |
Есть. Я бы (сходу) предложил 2 варианта:
1) Отредактировать файл с вкладками и загрузить его (или изменить непосредственно сам ини-файл Тотала и перезагрузить последний)
2) Послать немножко мессаг таб контролам TMyTabControl
TCM_GETITEMCOUNT -> в цикле TCM_GETITEM -> для невалидных TCM_DELETEITEM.
Второй вариант точно работает, но нужно еще проверить, что будет после перезагрузки Тотала (он о таком удалении может ничего и не узнать).
PS Твой вариант пока не продумывал. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Sun Oct 02, 2005 12:58 Post subject: |
|
|
Volniy wrote: |
1) Отредактировать файл с вкладками и загрузить его (или изменить непосредственно сам ини-файл Тотала и перезагрузить последний) |
Это очевидное решение, но относительно долгое и некрасивое - на экране мигание сплошное, окна то открываются, то закрываются...
Quote: |
2) Послать немножко мессаг таб контролам TMyTabControl
TCM_GETITEMCOUNT -> в цикле TCM_GETITEM -> для невалидных TCM_DELETEITEM.
|
Volniy, а где про это почитать? Я сейчас на С++ пишу, хотя раньше много на чем писал, но ведь здесь немножко не то - ТС на Дельфи написан... Я понимаю, что посылка сообщений от языка не зависит, но в Микрософтовских продуктах, насколько я понимаю, эти сообщения пишутся не как TCM_... а как WM_... Не силен я пока в посылке сообщений, просто другими темами занимался. Не подкинешь ссылочку на мануал?
Quote: | Второй вариант точно работает, но нужно еще проверить, что будет после перезагрузки Тотала (он о таком удалении может ничего и не узнать). |
...и, скорее всего, последствия будут грустные.
Так или иначе, за ответ спасибо. А мое предложение, согласись, и покрасивее и поуниверсальнее будет. Если его реализовать, конечно... _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Sun Oct 02, 2005 14:36 Post subject: |
|
|
Вахмурка wrote: | Volniy, а где про это почитать? Я сейчас на С++ пишу, хотя раньше много на чем писал, но ведь здесь немножко не то - ТС на Дельфи написан... Я понимаю, что посылка сообщений от языка не зависит, но в Микрософтовских продуктах, насколько я понимаю, эти сообщения пишутся не как TCM_... а как WM_... Не силен я пока в посылке сообщений, просто другими темами занимался. Не подкинешь ссылочку на мануал? |
Язык программирования тут ни причем - Tab это же из Common Controls. Эта ссылка на статьи MSDN в сетке, файлик из CD версии MSDN называется Shellcc.chm. А для экспериментов с окнами и сообщениями настоятельно рекомендую InqSoft Window Scanner (must have однозначно!).
Quote: | Второй вариант точно работает, но нужно еще проверить, что будет после перезагрузки Тотала (он о таком удалении может ничего и не узнать). |
Quote: | ...и, скорее всего, последствия будут грустные. |
Не торопись... Я вот сейчас попробовал реализовать все это - и не обнаружил никаких проблем (только не удаляй активную вкладку, а она легко определяется через мессагу TCM_GETCURSEL).
Короче, я считаю, что этот мой вариант все-таки COOL Будет время и желание - впихну как новый метод в свой TC Helper. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Mon Oct 03, 2005 20:03 Post subject: |
|
|
MSDN у меня и самого есть . Я даже прогу писал с табконтролами. Я пока не разобрался с посылкой сообщений извне. То есть когда я сам создал табконтрол, послать ему сообщение - как два байта об асфальт. А вот из скрипта, да еще в чужое приложение... У-у-у!
Ладно, Volniy, если ты считаешь, что sapienti sat est (для умного достаточно), буду делать вид, что я умный. Спасибо |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Tue Oct 04, 2005 02:16 Post subject: |
|
|
Вахмурка wrote: | То есть когда я сам создал табконтрол, послать ему сообщение - как два байта об асфальт. А вот из скрипта, да еще в чужое приложение... У-у-у! |
Странно, что тебя это смущает...Ты же в своих скриптах шлешь мессаги окну Тоталу? Тут те же яйца Чтобы послать сообщение Tab контролу всего-то надо вычислить хендл его окна (для этого достаточно FindWindow(Ex). Я не пойму, в чем тут у тебя загвоздка? Или в PowerPro недостает функциональности (извини, плохо знаю набор его функций) ? Мне-то кажется найти окно по классу там просто плевое дело. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Wed Oct 05, 2005 23:07 Post subject: |
|
|
Видимо, ты прав. У меня до этого просто руки не дошли (надеюсь, что уже доросли, но просто не дошли). Я мыслил в точности так, как ты написал, только надо было просто сесть и попробовать. Есть, есть в PowerPro средства посылки сообщения окну с известным хэндлом (сиречь декриптором). И хэндл определить я умею. В любом случае, ты мне очень продуктивно советуешь. Если удастся все это сделать, пропишу тебя в качестве соавтора скрипта.
Еще раз спасибо. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Thu Nov 24, 2005 15:18 Post subject: |
|
|
2Volniy
Предлагаю отчет о достигнутых успехах и вопрос. Напомню - ты предложил использовать сообщения TCM_ для управления вкладками.
Пункт I. Команда TCM_DELETEITEM
1. Открываем две вкладки: корни дисков c и d;
2. Делаем текущей первую (c);
3. Пытаемся удалить вкладку №0 (т. е. c). Выходит очень грустная картина, о чем ты и предупреждал;
4. Теперь вместо п. 2 делаем текущей вторую (d);
5. Опять удаляем №0. На первый взгляд - все зашибись. Сохранив конфигурацию, видим отсутствие раздела [righttabs], как и должно быть. Но:
а) Несмотря на то, что флаг "Show tab header also when there is only one tab" сброшен, действительность противоречит настройке;
б) При попытке выдать команду opentabs "что-нибудь.tab" вылезает скукота.
6. Продолжаем. Теперь открываем три вкладки: c, d и е;
7. Делаем активной третью;
8. Удаляем первую;
9. Получаем следующее: две вкладки "с вывесками" d и е. Казалось бы, зашибись. Но "под вывеской" d видим корень c (это написано в строке Current directory). А вот вкладка с названием е: показывает на е:. То же происходит с бОльшим числом вкладок - заголовки вкладок уничтожаются, а список файлов, путь, содержание вкладки, как хочешь назови - нет. Получается асинхронность;
10. Команда opentabs по-прежнему ведет к скукоте.
Так что скажи мне честно, Volniy: это в голове моей опилки и руки не оттуда растут, или Тотал просто не приспособлен к такому насилию над собой?
Пункт II. Команда TCM_DELETEALLITEMS
Ну о-очень грустный результат...
Пункт III. Команды TCM_GETCURFOCUS, TCM_GETCURSEL, TCM_GETITEMCOUNT, TCM_GETROWCOUNT,
TCM_GETUNICODEFORMAT, TCM_SETCURFOCUS, TCM_SETCURSEL, TCM_SETMINTABWIDTH
Работают!
Пункт IV. Команда TCM_HIGHLIGHTITEM
Забавно выходит... Может, когда-нибудь и использую. Странно, что этого не сделал Гислер. _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Thu Nov 24, 2005 17:54 Post subject: |
|
|
Вахмурка wrote: | Так что скажи мне честно, Volniy: это в голове моей опилки и руки не оттуда растут, или Тотал просто не приспособлен к такому насилию над собой? |
Да нормально у тебя с головой, раз уж так лихо с посылкой сообщений разобрался Скорее тут второе, и я это предполагал. Я думаю, что Ghisler ведет какой-то свой учет закладок и их индексацию тоже, не сверяясь с их реальным количеством (да и чего ему сверяться-то, он ведь ощущает себя полным хозяином, а ту мы со своими хаковыми делами влезаем). В любом случае нужно будет еще хорошенько подумать до использования этих команд в скриптах. А жаль.
Кстати, я тут на днях пробовал посылать файловым панелям сообщения для списков, они в основном тоже работают (например, можно произвольно выставлять высоту строк). |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|