Форум: "Начинающим";
Текущий архив: 2011.05.01;
Скачать: [xml.tar.bz2];
ВнизМакрос Найти похожие ветки
← →
faiwer © (2011-01-23 21:40) [0]Доброго времени суток.
Задача:
1. Пользователь выделяет текст
2. Пользователь зажимает доп. кнопку мыши
3. Срабатывает драйвер мыши и запускает мою программу (консольную)
4. Программа копирует выделенный текст
5. Обрабатывает
6. Заменяет на обработанный
Всё что до 4 пункта работает, и вообще не моего ума дело. Всё что после должна решать моя программа.
4. Скопировать тест я смог послав глобально Ctrl+C, а затем получив его из Clipboard.asText
5. Тут проблемы тоже нет
6. А вот тут я не знаю что делать.
Пробовал вот так:Clipboard.SetTextBuf(PChar(mes));
PostKeyEx32(Ord("V"), [ssCtrl], False);
Однако вставлялся старый тест. Поставил между ними таймер - после 500 мс стало работать, но только в окне RAD Studio, но в нетбинсе (собсно ради него всё и затевалось) вставляется свежескопированный текст, а не изменённый. Увеличение sleep-а до 3 секунд не помогает. Зато помогает вызов ShowMessage, затем о5 ожидание 3 секунд, клик по окну (ибо оно изза диалога теряет фокус).
Простая вставка символов работает, но такой вариант не годится, ибо текст с которым я работаю содержит разные спецсимволы (< > # & и т.д.). Пробовал компоненту SendKey - она не справляется с етими символами.
Решил попробовать отправку сообщений окну. Ничего не получается =( Пробую так:dwTargetOwner := GetWindowThreadProcessId(GetForegroundWindow, nil);
dwThreadID := GetCurrentThreadId(); //указатель на текущий процесс
if (dwTargetOwner <> dwThreadID) then // если не один и тот же процесс
Result := AttachThreadInput(dwThreadID, dwTargetOwner, TRUE); //подключение
h:=GetFocus;
SetWindowText(h, PChar("OLOLO") );
SendMessage( h, WM_SETTEXT, 0, LPARAM(PChar("OLOLO2")) );
h - находит какой то дескриптор (не 0), но ничего не происходит (кроме смены заголовка окна). ТТ...
Вопрос, как реализовать пункт 6?
Если интересна сама задача - комментирование\раскомментирование кода (xls, css, php etc...)
P.S. D2010, W7, WXP
← →
Andy BitOff © (2011-01-23 22:39) [1]> 4. Скопировать тест я смог послав глобально Ctrl+C, а затем
> получив его из Clipboard.asText
А если у меня там пароль лежит от випа или лететбита, и сраницу я уже закрыл, и не записал, т.к. не думал, что какой-то ... без моего ведома будет мой же буфер обмена затирать.
← →
Anatoly Podgoretsky © (2011-01-23 23:50) [2]Вот теперь будешь знать, что и среди программистов есть уроды.
← →
Германн © (2011-01-24 02:15) [3]
> т.к. не думал, что какой-то ... без моего ведома будет
А при "Пользователь зажимает доп. кнопку мыши" всегда "какой-то" "что-то" делает без твоего ведома. Так что не стоит так уж волноваться.
← →
Inovet © (2011-01-24 02:37) [4]> [3] Германн © (24.01.11 02:15)
> А при "Пользователь зажимает доп. кнопку мыши" всегда "какой-
> то" "что-то" делает без твоего ведома.
Здесь неявное затирание буфера, то же можно и на любые другие события навешать: нажатие клавиши F11, например, или выбор пункта меню "Заменить выделенный текст" вдруг затрёт буфер.
← →
Германн © (2011-01-24 03:01) [5]
> Inovet © (24.01.11 02:37) [4]
>
> > [3] Германн © (24.01.11 02:15)
> > А при "Пользователь зажимает доп. кнопку мыши" всегда
> "какой-
> > то" "что-то" делает без твоего ведома.
>
> Здесь неявное затирание буфера, то же можно и на любые другие
> события навешать: нажатие клавиши F11, например, или выбор
> пункта меню "Заменить выделенный текст" вдруг затрёт буфер.
>
Ну и?
В многозадачной среде "затирание буфера" вполне допустимо всегда. Буфер один, а приложений куча. Тут главное, что буфер "затирается" по "требованию" пользователя.
← →
Inovet © (2011-01-24 03:09) [6]> [5] Германн © (24.01.11 03:01)
> "затирается" по "требованию" пользователя.
Так нет требования, пользователь знать не знает, что его действие влияет на буфер, что программист, не зная как по-другому, сделал через буфер.
← →
Германн © (2011-01-24 03:35) [7]
> Inovet © (24.01.11 03:09) [6]
>
> > [5] Германн © (24.01.11 03:01)
> > "затирается" по "требованию" пользователя.
>
> Так нет требования, пользователь знать не знает, что его
> действие влияет на буфер, что программист, не зная как по-
> другому, сделал через буфер.
>
Требование есть! Кто-то нажал на доп.кнопку мыши.
И если в документации это нажатие описано, значит тому и быть!
В конце концов всяк, прошедший курс "информатики", обязан знать, что после Ctr+C, должно по возможности сделать Ctr+V сразу, а не нажимать другие кнопки.
← →
faiwer © (2011-01-24 04:50) [8]
> А если у меня там пароль лежит от випа или лететбита, и
> сраницу я уже закрыл, и не записал, т.к. не думал, что какой-
> то ... без моего ведома будет мой же буфер обмена затирать.
>
1. Ну никто не мешает его скопировать в отдельную переменную, а затем восстановить. Сейчас макрос в стадии реализации, и такие мелочи я оставил на потом
2. Программа исключительно для собственного использования, так что никто посторонний не пострадает, не переживайте :)
> Ну и?
> В многозадачной среде "затирание буфера" вполне допустимо
> всегда. Буфер один, а приложений куча. Тут главное, что
> буфер "затирается" по "требованию" пользователя.
Кстати да :) Но о5 же, повторюсь, единственным пользователем программы буду я сам.
А буфер я использую ввиду не понимания того, как иначе получить выделенный текст :) Может там есть какой шаманский вариант с WM_COPY или типа того? Но не приведёт ли он к тому же самому? + Как мне добраться до Handle контрола? Способ выше (найдено в сети), даёт мне опр.значение, но судя по всему не то =(
← →
Leonid Troyanovsky © (2011-01-25 13:15) [9]
> faiwer © (24.01.11 04:50) [8]
http://delphimaster.net/view/4-1259844425/
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.05.01;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.005 c