Лоцман API

Автор dimks, 03.11.05, 14:16:44

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

dimks

сделала я в своем модуле все что положено, теперь мне надо перейти к определенному объекту в дереве. Как это сделать?
напрашивается чтото вроде
PostMessage(ClientHandle,WM_GOTONODE,,0)
не помогает....
подскажите господа разработчики!!!

Jeff_Greg

Попробуйте PostMessage(ClientHandle,wm_gotochild,ID_объекта,0);
Я сам долго страдал, пока не выяснил...=(

caduser

PostMessage(ClientHandle, WM_GOTOOBJECT, ID_объекта, 0);

100% работает

Jeff_Greg

ЦитироватьPostMessage(ClientHandle, WM_GOTOOBJECT, ID_объекта, 0);
 дык это переход СРАЗУ на объект? Т.е. независимо от вложенностей?

dimks

если кому интересно, то:
1. Перейти в дереве

var
  inObjID: integer
begin
  ...
  PostMessage(Client_HWND, WM_GOTOOBJECT, inObjID, 1);
  //Client_HWND - хендл окна БД/чекаута (второй)
  //WM_GOTOOBJECT = WM_USER + 9;
  //inObjID - идентификатор объекта/документа
  ...
end;

2. Открыть в новом окне
//Открыть один объект в новом окне

procedure OpenObjectInNewWindow(AppHandle: THandle; inID: integer; stDatabaseName: string; stCheckOutName: string = ’’);
begin
  with TPBShareMap.Create(nil) do
  try
    MapName := ’Loodsman’;
    MaxSize := 4096;
    AutoSynchronize := False;
    OpenMap;

    repeat
      sleep(100);
      ReadMap;
    until (Values[’_READY’] = ’TRUE’);

    Values[’_DATABASENAME’] := stDatabaseName;
    Values[’_CHECKOUTNAME’] := stCheckOutName;
    Values[’_ID_VERSION’]   := inttostr(inID);
   
    WriteMap;
    sleep(100);
    PostMessage(AppHandle, WM_OPENOBJECTINNEWWINDOW, 0, 0);
  finally Free; end;
end;


//Открыть несколько объектов в новом окне
procedure OpenObjectsInNewWindow(AppHandle: THandle; stIDList: string; stDatabaseName: string; stCheckOutName: string = ’’);
var
  SL: TStringList;
  i:integer;
begin
  with TPBShareMap.Create(nil) do
  try
    MapName := ’Loodsman’;
    MaxSize := 4096;
    AutoSynchronize := False;
    OpenMap;
    repeat
      sleep(100);
      ReadMap;
    until (Values[’_READY’] = ’TRUE’);
    MapStrings.Clear;
    MapStrings.Add(stDatabaseName);
    SL := TStringList.Create;
    try
      SL.Delimiter := ’;’; SL.DelimitedText := stIDList;
      for i:=0 to SL.Count-1 do MapStrings.Add(SL);
    finally SL.Free; end;
    WriteMap;
    sleep(100);
    PostMessage(AppHandle, WM_OPENOBJECTSINNEWWINDOW, 0, 0);
  finally Free; end;
end;

компонент прилагается


Максим

Цитата: dimks от 10.11.05, 09:00:56

 with TPBShareMap.Create(nil) do
 try
   MapName := 'Loodsman';

TPBShareMap что за тип?
а также интерисуют функции openmap,readmap,writemap.

Muk

Подниму эту тему. Пытаюсь, стоя на объекте Механообработка, перейти в плугине с помощью

PostMessage(ClientHandle, WM_GOTOCHILD, VersionID, 0);

к привязанному к этому объекту документу, и не получается. Курсор в УК скачет, только не туда, куда нужно.

Объсните кто-нибудь, в чем вообще разница между:
  WM_GOTOCHILD  = WM_USER + 5;
  WM_GOTONODE = WM_USER + 8;
  WM_GOTOOBJECT = WM_USER + 9;


Prog2

Здравствуйте!
Пытаюсь из плагина открыть объект в новом окне Лоцмана (т.е. выполнить действие аналогичное Ctrl+O, но только программно).
PostMessage(ClientHandle, WM_USER + 100, objID, 0) не даёт никакого эффекта.
Подскажите, как это можно реализовать?

Muk

Цитата: Prog2 от 20.11.09, 16:24:43
PostMessage(ClientHandle, WM_USER + 100, objID, 0) не даёт никакого эффекта.
Подскажите, как это можно реализовать?
Вообще-то выше dimks привел код...

Prog2

Цитата: Muk от 20.11.09, 17:17:04
Вообще-то выше dimks привел код...
Мне не всё понятно в этом коде...
Что такое TPBShareMap? Это какой-то встроенный тип в Делфи или отдельный компонент (который прилагается)?
Пытаюсь писать в MS Visual, чувствую там такого типа не найдётся...
Прокомментируйте, пожалуйста, код dimks'а, касающийся процедуры OpenObjectInNewWindow, а то не улавливаю о чём идёт речь (OpenMap, ReadMap...)

Muk

Цитата: Prog2 от 20.11.09, 20:31:06
Мне не всё понятно в этом коде...
Что такое TPBShareMap? Это какой-то встроенный тип в Делфи или отдельный компонент (который прилагается)?
Бесплатный, можно найти в Инете.

Цитата: Prog2 от 20.11.09, 20:31:06
Пытаюсь писать в MS Visual, чувствую там такого типа не найдётся...
Прокомментируйте, пожалуйста, код dimks'а, касающийся процедуры OpenObjectInNewWindow, а то не улавливаю о чём идёт речь (OpenMap, ReadMap...)
Боюсь, что придется разбираться в реализации TPBShareMap и переписывать. Там используются разделяемые файлы и свой формат записи данных в них.
Если только Аскон не реализовал в свежих версиях альтернативный способ.