Открытые инструменты: дополнительные возможности в стандартном редакторе 

Арслан Абакаров
Дата создания: 8 июня 2011 в 18:52

Введение

"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. То что я выложил это пока только концепт. То над чем работаю уверен будет интересно разработчикам и администраторам :)

понравилась 15 пользователям

Комментарии (14)
Комментарии доступны только для зарегистрированных пользователей.




Теги
4.7 4.8 awards isbl is-builder sql server бизнес-решение введение в is-builder видео дайджест документ интеграция клик настройка отчет разработка сообщество справочник сценарий функция
показать все теги