📄 unitcommonmodule.~pas
字号:
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 + -