Окно карты в Delphi

0 голосов
спросил 09 Сен, 05 от DmitryOrlov (540 баллов) в категории Программные продукты Esri

Приветствую!

Есть задача: в некоем дельфовом приложении открыть дочернюю форму на которой "показать" окно карты arcmap.

Написал нижеследующий код, он не работает: Panel2 - остается пустой, хотя mc стартует и mdx открывается.

Почему?

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, esriGeometry_TLB, StdCtrls,
  ExtCtrls, OleCtrls, ComObj, Dialogs, OleServer,
  esriMapControl_TLB, esriSystemUI_TLB, esriCarto_TLB, esriGeoDatabase_TLB, esriSystem_TLB, esriDisplay_TLB;

type
  TForm1 = class(TForm)
    Panel2: TPanel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  mc: IMapControlDefault;
  la: ILayer;
  anActiveView: IActiveView;
  aScreenDisplay: IScreenDisplay;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  mc:=nil;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  mc:=CreateComObject(CLASS_MapControl) as IMapControlDefault;
  mc.LoadMxFile('D:\arcgis_data\2.mxd', 0, 0);
  anActiveView:=mc.ActiveView;
  anActiveView.Get_ScreenDisplay(aScreenDisplay);
  aScreenDisplay.Set_hWnd(Panel2.Handle);
  aScreenDisplay.UpdateWindow;
//  anActiveView.Refresh; - пробовал - не помогает
  aScreenDisplay.UpdateWindow;
  anActiveView.Refresh;
end;

end.

 

6 Ответы

0 голосов
ответил 20 Сен, 05 от Гость (210,080 баллов)

Извини, на вопрос вопросом, коль ты в делфи пишишь: как инициализировать

pApp: IApplication;

0 голосов
ответил 22 Сен, 05 от DmitryOrlov (540 баллов)

Инициализировать или создать?

Как-то делал, не помню.

Может так:

pApp:=CoApplication.Create;

Далее можно: pApp.Visible:=True; // Если есть необходимость.

0 голосов
ответил 22 Сен, 05 от DmitryOrlov (540 баллов)

Нашел, как делал:

  pApp:=CreateComObject(CLASS_Application) as IApplication;
  pApp.Visible:=True;

0 голосов
ответил 23 Сен, 05 от Гость (210,080 баллов)

У меня  pApp:=CreateComObject(CLASS_Application) as IApplication;  не работает, а для  pApp:=CoApplication.Create as IApplication;   нужно наличие класса  Application, который находится в esriMx.olb.

Как к этой библиотеке получить доступ?


 

0 голосов
ответил 26 Сен, 05 от Гость (210,080 баллов)

У меня вопрос тем кто программирует на Делфи

У меня программа на Делфи, и нужно подключить карту для объектной визуализации данных /ArcGis

Каков последовательный ход действий

 

 

 

 

0 голосов
ответил 26 Сен, 05 от DmitryOrlov (540 баллов)

To Burkov: Надо сделать Project/Import ActiveX Library и импортировать esriFramework там есть IApplication.

To Aser: установить ESRI Engine, добавить в Дельфи ActiveX Component TMapObject - это объект, содержащий карту ArcGIS и работать с ним, активно юзая хелп девелоперски

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...