⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitcommonmodule.~pas

📁 在delphi下基于MapX5.0的GIS程序
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
unit UnitCommonModule;

interface
uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   MapXLib_TLB, Registry, ADODB, DB, Menus, ComCtrls, Dialogs, QStdCtrls,
   ExtCtrls, Mask, Spin, Buttons, StdCtrls, ShellAPI, ComObj, IniFiles;

  type
// 选择编辑图层  记录添加类型对应的类型
    LayerToFtType = record
      TypeName: String;
      TypeNum: Integer;
      FeatureTypeArr: Array[1..50] of String;
      FeatureToolArr: Array[1..50] of String;
    end;
// 公交车次的信息
    BusSpotInf = record
      Bus_WayName: String;
      BusSpotNum: Integer;
      BusSpotArr: Array[1..20] of String;
    end;
// 通过公交站点的公交车次信息
    PassWayInf = record
      Bus_SpotName: String;
      PassWayNum: Integer;
      PassWayArr: Array[1..10] of BusSpotInf;
    end;
// 记录连接用户的信息    
    UserInfo = record
      Num: Integer;             // 连接用户的数量
      Name: Array[1..100] of String;  // 连接用户的用户名
      SocketID: Array[1..100] of String; // 连接用户的标识号对应的ID
      LoginTime : Array[1..100] of String;  // 用户的登入时间
    end;

// 删除字符窜中的空格
  function DelStrBlank(Str: String): String;
// 得到汉字字符窜的拼音转换 如你好--NH
  function PYConvert(hzchars:string): String;
// 得到字符窜中中文的字数
  function ChineseNum(Str: String): Integer;
// 数据库连接成功初始化设置
  procedure DMIni();
// 系统运行初始化设置
  procedure ApplicationIni();
// 图层绑定及查找
  procedure BindLayerToDataset();
// 更新图层的图元类型
  procedure upDate_LayerToFtTypes();
// 创建自定义工具
  procedure CreatCustomTool();
//  设置菜单的选中和按钮的按下
  procedure Set_MenuCheck_BtnDown(Var NTool: TMenuItem;  TBtnTool: TToolButton);
// 屏蔽菜单和工具
  procedure LockMenuTButton();
// 地图显示变化处理
  procedure SetMapViewChanged();
//  设置标注文字的属性
  procedure SetLabelStyle(TypeName: String);
//  设置符号的属性
  procedure SetSymbolStyle(TypeName : String);
//  设置线的属性
  procedure SetLineStyle(TypeName : String);
//  设置区域的属性
  procedure SetRegionStyle(TypeName : String);
// 打开数据库以省缺的 SELECT * 打开
  procedure OpenADOQueryALL(Query: TADOQuery; TableName: String);
// 打开数据库以加WHERE的形式打开
  procedure OpenADOQueryAllL(Query:TADOQuery; TableName, LikeName: String);
// 没有呢   添加图元的标注 ID
  procedure AddFeatureLabelID(IniPoint: MapXLib_TLB.Point; IniText: String);
// 在对应的图层中得到一个合法的随机名称
  function SetRandomNameValue(Layer: MapXLib_TLB.Layer; FeatureType: String): String;
// 处理图元字段的初始化值
  procedure SetFeatureRowValue(LayerName, FieldValue : String);
// 窗体上控件建立锁定
  procedure LockEdit(Frm: TForm);
// 窗体上控件解除锁定
  procedure UnLockEdit(Frm: TForm);
// 窗体上控件Text清空
  procedure ClearEdit(Frm: TForm);
// 窗体上控件Text类获得焦点的处理
  procedure EnterEdit(Frm: TForm);
// 处理标记的Text:加空格字符
  procedure SetLabelStr(InfoText: String);
// 处理选择图元及对应的标注属性
  procedure SetFeatureAndLabel(IniEditName, EditName: String);
// 得到标记对应的图元的图层名
  function TypeToLayer(TypeValue: String): String;
// 删除图元及对应的数据  标记图元及数据
  procedure DeleteFeatureLabelData(IDValue : String);
// 在新建图元时初始化窗体设置
  procedure IniNewFormData(Frm: TForm);
// 在选择图元时初始化窗体设置
  procedure IniSelectFormData(Frm: TForm);
// 在查询图元时初始化窗体设置
  procedure IniSearchFormData(Frm: TForm);
// 信息窗体修改按钮点击
  procedure EditBtnClick(Frm: TForm);
// 添加随机的数据信息
  procedure AddRandomData();
// 从数据库中下载地图
  procedure LoadMap();
// 上载地图
  procedure UpLoadMap();
// 删除地图
  procedure DeleteMap();  
// 加载地图及初始化设置
  procedure  LoadMapSetIniMap();
// 地图加标记工具用完时
  procedure LabelToolUsed();
// 添加查询结果显示框
  procedure FillResultData();
// 周边环境查询
  procedure CenterFeatureFind(FeatureName: String; Dist: Integer; LayerName: String);
// 查找公交转车的车次
  procedure FindBus_Way();
// 处理画线到边上可以移动地图的操作
  procedure SetMapPos(Shift: TShiftState);
//表复制
  procedure CopyTable(LayerName:string; SourceMap:TMap);
// 设置显示的图层
  procedure SetViewLayer();
// 写日志
  procedure FillRecord(Level, ConStr: String);
// 退出写日志
  procedure FillRecordE(UserName, SocketID, ComeTime: String);
// 管理员退出  添日志
  procedure SFillRecordE();
// 根据不通的用户设置窗体及权限
  procedure SetUserForm(UserType: Integer);

Const
// Custom Tool Constants
  CUSTOM_SYMBOL_TOOL = 1;           //  CreateSymbol
  CUSTOM_LINE_TOOL = 2;             //  CreatLine
  CUSTOM_POLYLINE_TOOL = 3;         //  CreatPolyLine
//  CUSTOM_ARC_TOOL = 4;              //  CreateArc
  CUSTOM_CIRCULARREGION_TOOL = 5;   //  CreateCircularRegion
  CUSTOM_ELLIPTICALREGION_TOOL = 6; //  CreateEllipticalRegion
//  CUSTOM_MULTIPOINT_TOOL = 7;       //  Multipoint
  CUSTOM_REGION_TOOL = 8;           //  CreateRegion
  CUSTOM_TEXT_TOOL = 9;             //  CreateText
  CUSTOM_INFO_TOOL = 10;            //  View Information Tool
//  CUSTOM_ERASE_TOOL = 11;           //  EraseFeature
  CUSTOM_RECTANGLE_TOOL = 12;       //   Creatrectangle
//  CUSTOM_ZOOMIN_TOOL = 13;           //  ZoomInTool
//  CUSTOM_ZOOMOUT_TOOL = 14;          //  ZoomOutTool
  CUSTOM_LABEL_TOOL = 15;           //  LabelTool
  CUSTOM_ZOOMIN_TOOL = 16;           //  ZoomInTool
  CUSTOM_ZOOMOUT_TOOL = 17;           //  ZoomOutTool
{
  Remarks:

  Map_Tool
  miArrowTool = $000003E8;          1000
  miPanTool = $000003E9;            1001
  miCenterTool = $000003EA;         1002
//  miZoomInTool = $000003EB;         1003
//  miZoomOutTool = $000003EC;        1004
//  miSymbolTool = $000003ED;         1005
  miTextTool = $000003EE;           1006
  miSelectTool = $000003EF;         1007
  miRadiusSelectTool = $000003F0;   1008
  miRectSelectTool = $000003F1;     1009
  miPolygonSelectTool = $000003F2;  1010
//  miLabelTool = $000003F3;          1011
//  miAddLineTool = $000003F4;        1012
//  miAddPolylineTool = $000003F5;    1013
//  miAddRegionTool = $000003F6;      1014
//  miAddPointTool = $000003F7;       1015
  CUSTOM_SYMBOL_TOOL = 1;           //  CreateSymbol
  CUSTOM_LINE_TOOL = 2;             //  CreatLine
  CUSTOM_POLYLINE_TOOL = 3;         //  CreatPolyLine
//  CUSTOM_ARC_TOOL = 4;              //  CreateArc
  CUSTOM_CIRCULARREGION_TOOL = 5;   //  CreateCircularRegion
  CUSTOM_ELLIPTICALREGION_TOOL = 6; //  CreateEllipticalRegion
  CUSTOM_MULTIPOINT_TOOL = 7;       //  Multipoint
  CUSTOM_REGION_TOOL = 8;           //  CreateRegion
//  CUSTOM_TEXT_TOOL = 9;             //  CreateText
  CUSTOM_INFO_TOOL = 10;            //  View Information Tool
//  CUSTOM_ERASE_TOOL = 11;           //  EraseFeature
  CUSTOM_RECTANGLE_TOOL = 12;       //   Creatrectangle
//  CUSTOM_ZOOMIN_TOOL = 13;           //  ZoomInTool
//  CUSTOM_ZOOMOUT_TOOL = 14;          //  ZoomOutTool
  CUSTOM_LABEL_TOOL = 15;           //  LabelTool
}

// 图元信息显示类型
  NEW_FEATURE = 1;          // 新添的图元
  SELECT_FEATURE = 2;       // 点击修改的图元
  SEARCH_FEATURE = 3;       // 查询显示的图元
// 地图发大的倍数约定
  MINZOOM = 50;
  MAXZOOM = 1764;

var
  ExeFilePath: String;   // Application's FilePath
  IniFile: TIniFile;
// 登入
  CanLogin: Boolean = False;
  IsServer: Boolean;
  ClientStr, CSocketID, CIp, CUser, CPassword: String;
  CLevel: Integer;
  SLoginTimeStr, CLoginTimeStr: String;  // 记录登入时间

  ServerHost: String;   // 服务器的ip地址
  SUser, SPassword, SDataS, SDataC: String;
  SendUserNum: Integer;                 // 要发送的用户的ID
  Users: UserInfo;


  Empty, Nothing: Variant;        // Empty variant
  EditLayer : MapXLib_TLB.Layer;   // Layer variable to hold current edit layer
  infoFeature : MapXLib_TLB.Feature; // Global value to hold selected feature for Info Tool
  newObj: MapXLib_TLB.Feature;  // new Feature
  Ftrs : MapXLib_TLB.Features;   // Used for storing collection of features
  RowVal: MapXLib_TLB.RowValue;   // 单个字段的数据
  RowVals: MapXLib_TLB.RowValues; //  复合字段的数据
  FoundObj: Variant;   //  查找到的图元
  Pt: Variant; // 记录一个点
  lyr: MapXLib_TLB.Layer;
  ds: MapXLib_TLB.Dataset;
  LoadedMap: Boolean;
//  Ftr : Variant;

// 图像视图参数
  IniMapZoom, IniMapZoomPosX, IniMapZoomPosY: Double;     // Record Initial Map Zoom CenterX CenterY
  PrevMapZoom, PrevMapZoomPosX, PrevMapZoomPosY: Double;  // Record Previous Map Zoom CenterX CenterY
  CurMapZoom, CurMapZoomPosX, CurMapZoomPosY: Double;     // Record Current Map Zoom CenterX CenterY

// 鹰眼实现的参数
  EagleEye_Layer: MapXLib_TLB.Layer;   // 鹰眼图上临时图层
  EagleEye_Fea: MapXLib_TLB.Feature;   // 鹰眼图上反映 Map1 窗口位置的Feature
  Have_EagleEye: Boolean=False;        // 记录是否已经加载鹰眼
  EagleEye_CanMove: Boolean=False;     // 记录在鹰眼上移动Map1的标识

// 选择编辑图层  记录添加类型对应的类型
  LayerToFtTypeArr : Array[1..30] of LayerToFtType;

// 记录图元信息显示类型
  infFormViewType: Integer;

// SQL
  SQLString: String;

// 属性变量
  SetStyle: Variant;

// 可以标注
  LabelStr : String;
  LabelStrArr : Array[1..50] of String;
  LabelStrArrX : Array[1..50] of Double;
  LabelStrArrY : Array[1..50] of Double;
  DataHaved: Boolean;  // 数据是否已经入库

// 记录在修改前的图元名字
  IniFeatureName: String;
// 在删除图元时查找的对应的图层名称
  DelLayerName: String;
  DeleteNumi: Integer; //记录被删除的图元在selection中的编号

// 随机产生的标注名称
  RandomNameValue: String;
// 可以改变查询结果的放大倍数
  CanChangeZoom: Boolean;

// 显示信息窗体的名称
  InfoLayerName: String;

  FeatureFound: Boolean;

// 公交转车起始、终止站点信息
  Bus_SpotS, Bus_SpotE: PassWayInf;
  MouseX, MouseY: Integer;
// 记录公交线路信息
  BusWay1: Array[1..20] of String;
  BusWay2S, BusWay2E: Array[1..20] of String;
  BusWay2Spot: Array[1..20] of String;
//  记录错误信息
  ErrorInf: String;
// 右下角的图标
  aIcon: HICON;
  aIconData: TNotifyIconData;


implementation

uses UnitMain, UnitDataModule, UnitModify, UnitSearchResult, UnitByBus,
  UnitSearchResultBus_Way, UnitNavigation, UnitEagleEye, UnitLogin,
  UnitClientManage;

// 删除字符窜中的空格
function DelStrBlank(Str: String): String;
var
  i: Integer;
  S: String;
begin
  S := '';
  for i := 1 to Length(Str) do
    if Str[i] <> ' ' then S := S+Str[i];
  result := S;
end;

// 获取指定汉字的拼音索引字母,如:“汉”的索引字母是“H”
function GetPYIndexChar( hzchar:string):char;
begin
  case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of
    $B0A1..$B0C4 : result := 'A';
    $B0C5..$B2C0 : result := 'B';
    $B2C1..$B4ED : result := 'C';
    $B4EE..$B6E9 : result := 'D';
    $B6EA..$B7A1 : result := 'E';
    $B7A2..$B8C0 : result := 'F';
    $B8C1..$B9FD : result := 'G';
    $B9FE..$BBF6 : result := 'H';
    $BBF7..$BFA5 : result := 'J';
    $BFA6..$C0AB : result := 'K';
    $C0AC..$C2E7 : result := 'L';
    $C2E8..$C4C2 : result := 'M';
    $C4C3..$C5B5 : result := 'N';
    $C5B6..$C5BD : result := 'O';
    $C5BE..$C6D9 : result := 'P';
    $C6DA..$C8BA : result := 'Q';
    $C8BB..$C8F5 : result := 'R';
    $C8F6..$CBF9 : result := 'S';
    $CBFA..$CDD9 : result := 'T';
    $CDDA..$CEF3 : result := 'W';
    $CEF4..$D188 : result := 'X';
    $D1B9..$D4D0 : result := 'Y';
    $D4D1..$D7F9 : result := 'Z';
  else
    result := char(32);
  end;
end;

// 得到汉字字符窜的拼音转换 如你好--NH
function PYConvert(hzchars:string): String;
var
  I: Integer;
  PY: string;
  s: string;
begin
  s := '' ;
  I := 1;
  while I <= Length(hzchars) do
  begin
    PY := Copy(hzchars, I , 1);
    if PY >= Chr(128) then
    begin
      Inc(I);
      PY := PY + Copy(hzchars, I , 1);
      s := s + GetPYIndexChar(PY);
    end
    else
      s := s + PY;
    Inc(I);
  end;
  result := s;
end;

// 得到字符窜中中文的字数
function ChineseNum(Str: String): Integer;
var
  i, c:integer;
begin
  c:=0;
  for i:=1 to Length(Str) do
  begin
//    if (ord(Str[i])>=33)and(ord(Str[i])<=126) then
//    begin
//      inc(e);
//      label1.caption:='英文个数:'+inttostr(e);
//    end
    if (Ord(Str[i])>=127) then Inc(c);
  end;
  result := c div 2;
end;

// 注册MapX
procedure RegMapX();
var
  Reg: TRegistry;
begin
// 注册
  Reg:=Tregistry.Create ;
  Reg.RootKey :=HKEY_LOCAL_MACHINE;
  Reg.OpenKey ('SOFTWARE\Mapinfo\MapX\5.0',true);
  Reg.WriteString('GeoDictionary',ExeFilePath+'Maps\GeoDict.DCT');
  Reg.CloseKey;
  Reg.Destroy;
end;

// 数据库连接成功初始化设置
procedure DMIni();
begin
  DM.ADOQueryLayerToTable.Open;
  DM.ADOQueryText.Open;
end;

//  从系统文件中读初始化信息
procedure ReadIniFile();
begin  
  if Not FileExists(ExeFilePath+'System.ini') then
  begin
    IniFile:=TiniFile.Create(ExeFilePath+'System.ini');
    IniFile.WriteString('Login', 'ServerHost', '10.80.10.31');
  end else IniFile:=TiniFile.Create(ExeFilePath+'System.ini');
  ServerHost := IniFile.ReadString('Login', 'ServerHost', ServerHost);
  IniFile.Destroy;
end;

// 系统运行初始化设置
procedure ApplicationIni();
//var
//  ZAppName: array[0..127] of char;
//  Hold: String;
//  Found: HWND;
begin
{
// 防止运行多次
  Hold := Application.Title;
  Application.Title := 'OnlyOne'+IntToStr(HInstance); // 暂时修改窗口标题
  StrPCopy(ZAppName, Hold); // 原窗口标题
  Found := FindWindow(nil, ZAppName); // 查找窗口
  Application.Title := Hold; // 恢复窗口标题
  if Found<>0 then begin
  // 若找到则激活已运行的程序并结束自身
    ShowWindow(Found, SW_RESTORE);
  // 去掉右下角的图标
    Shell_NotifyIcon(NIM_DELETE,@aIconData);
    Application.ProcessMessages;
    Application.Terminate;
  end;
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -