Введение
"DIRECTUM Помощник" производит вставку имен объектов платформы в текст обработки. В стандартном редакторе уже присутствует подобный функционал, вызывается он через команды главного меню "Вставка -> Имя реквизита/Имя справочника" и т.д. Я попытался реализовать этот инструмент в виде самостоятельной панели инструментов. По двойному нажатию на элемент(родительский или дочерний) в дереве объектов помощника, он выполняет вставку наименования или характеристик элемента в место расположения курсора непосредственно в редакторе DIRECTUM. Для получения списка объектов, помощник подключается к sql сереверу к базе данных DIRECTUM, авторизация выполняется по прямому паролю.
Главное окно
Вставка текста происходит по двойному нажатию на элемент в дереве объектов.
Настройки расположены в нижней части главного окна
Фильтр по названию объекта
Листинг
Помощник работает следующим образом:
1. получает активное окно функцией GetForegroundWindow;
2. проверяет это окно на наличие редактора TSLSynEdit через FindWindowEx;
3. если в окне программы присутствует окно ввода редактора обработок TSLSynEdit, он запоминает хенлд окна и редактора TSLSynEdit.
4. отправка текста в редактор DIRECTUM выполняется при помощи функции PostMessage
Проверка активного окна
procedure TDIRAssistant.connector_guardTimer(Sender: TObject);
var
new_handle, synedit:HWND;
begin
//Организация подключения к редактору-----------------------------------------
//смотрим активное окно
new_handle := GetForegroundWindow();
//если это не то окно которое мы уже захватили, тогда проверяем его на наличие компонента TSLSynEdit в котором выполняется редактирование кода в DIRECTUM
if new_handle <> editor_window_handle then
begin
synedit := FindWindowEx(new_handle, 0, 'TSLSynEdit', nil);
if synedit <> 0 then
ConnectToEditor(new_handle);
end;
//Если считаем что подключены, проверяем состояние окна, не закрыто ли оно
if connected then
if not IsWindow( editor_synedit_handle ) then
connected := false;
//Просто сообщение в строке статуса. Больше для разработчика чем для пользователя
if connected then
StatusBar.Panels[0].Text := 'Есть окно: ' + IntToStr( editor_window_handle )
else
StatusBar.Panels[0].Text := 'Нет окна';
//----------------------------------------------------------------------------
end;
//по сути просто дублирование проверки, сохранение хендла в общедоступной переменной и установка служебных флагов
procedure ConnectToEditor( possible_window:HWND );
var
synedit : HWND;
begin
if possible_window = 0 then exit;
synedit := possible_window;
synedit := FindWindowEx(synedit, 0, 'TSLSynEdit', nil);
if synedit <> 0 then
begin
editor_window_handle := possible_window;
editor_synedit_handle := synedit;
if editor_synedit_handle <> 0 then
begin
connected := true;
end
else
begin
connected := false;
end;
end;
end;
Следующая функция передает требуемый текст в окно редактора, в место расположения курсора
//Отправка текста в окно посимвольно
procedure PostString( str:string );
var
i:integer;
begin
str := ' ' + str;
for i:= 1 to Length( str ) do
begin
PostMessage( editor_synedit_handle, wm_Char, Word(str[ i ]), 0);
end;
SetForegroundWindow( editor_synedit_handle );
end;
Исходники программы прилагаются. В основе разработки лежат стандартные компоненты Delphi 7, все должно собираться без проблем и на других местах.
P.S. Данная разработка возникла в голове примерно в одно время вместе с замечательным материалом Дениса Баранова "Инспектор объектов", а реализацию получила только сейчас.
Вложения
Помощник.rar (431,91 Кб) (rev2)
Cтраница проекта http://code.google.com/p/directum-assistant/
P.P.S. То что я выложил это пока только концепт. То над чем работаю уверен будет интересно разработчикам и администраторам :)
Попробовал. Интересная программа. Сразу хочется несколько замечаний для улучшения:
В настройках подключения нужно допускать указание пустого пароля
Наряду с возможностью вставки имени реквизита, было бы хорошо иметь возможность вставить имя поля (не PreProcQuery)
Возможность вызвать утилиту горячими клавишами
Было бы круто если список баз, к которым можно подключиться брался из конфигуратора
Когда вызываешь Файл-> Настройки хорошо бы иметь кнопку Отмена (а то получается либо полный выход, либо снова переподключаться, если требуется оставить текущую базу)
На таскбаре в win7 у меня почему то крякозяблы вместо названия :)
Учел замечания. :)
>Наряду с возможностью вставки имени реквизита, было бы хорошо иметь возможность вставить имя поля (не PreProcQuery)
Внизу окна подведите мышку к настройкам, они раскроются, выберите "Имена реквизитов справочников". Оно?
Возможность вызвать утилиту горячими клавишами
Нужно найти ярлык требуемой программы, после чего вызвать контекстное меню по правой клавише мыши и открыть пункт меню "Свойства". Далее в открывшемся окне, в поле "Быстрый вызов" следует указать клавишу, которая будет отвечать за вызов данной программы.
Быстрый вызов осуществляется для ярлыков, расположенных на рабочем столе в меню "Пуск"
>> Нужно найти ярлык требуемой программы, после чего ...
Такая штука сработает только один раз для первого запуска программы. Если программа уже запущена, то не подойдет.
>> Внизу окна подведите мышку к настройкам, они раскроются, выберите "Имена реквизитов справочников". Оно?
Нет, я имел ввиду имя SQL поля соответствующего реквизита.
Еще в прошлый раз забыл написать - почему то быстрый поиск не ищет по коду справочника или типу карточки. Только если вбивать наименование. Было бы очень удобно если бы сразу искал и по коду и по имени.
P.S. также очень приятно, что вы выложили исходники.
Выложил вчера вечером изменения.
еще одно мелкое замечание, в окне настройки подключения, поменять бы порядок перехода по TAB, а то после поля БД переходим на кнопки
Я очень извиняюсь за TABы, за элементарными вещами не уследил.
Если что, там по ентеру попорядку переходит.
Готовлю новый материал по взаимодействию с проводником DIRECTUM через WinAPI, будет новый функционал для работы с типовыми маршрутами.
Инструмент потихоньку развивается. Промежуточные версии с "торчащими" элементами отладки можно смотреть в разделе загрузок на странице проекта.
Как накопиться изменений, обновлю описание инструмента и выложу более менее оформленную версию здесь же.
Арслан, а ведь это тянет на техническое решение на базе DIRECTUM!
Подумайте над публикацией в Каталог технических решений и сертификацией. Эта процедура описана в документе на сайте поддержки Правила публикации, сертификации и распространения технических решений партнеров DIRECTUM
Спасибо! Уже смотрю документы.
Продумайте запуск под Win-aутентификацией.
А также продумайте запуск с правами-Администратор или разработчик (для пользователя не должно быть прав).
Показал вашу утилиту на курсах по разработке.
Алексей, очень приятно слышать. Я значительно проработал инструмент с момента первой публикации, жаль, что не успел с публикацией изменений ранее и инструмент был продемонстрирован в таком зачаточном состоянии. Буду рад через некоторое время показать обновленный вариант.
Надежда, мне как раз вчера пришла в голову мысль как можно реализовать доменную авторизацию инструмента в системе, спасибо за высказанное пожелание.
http://club.directum.ru/post/Instrument-razrabotchika-DIRECTUM.aspx#comment
Авторизуйтесь, чтобы написать комментарий