📄 unitmodify.pas
字号:
unit UnitModify;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, CheckLst, DB;
type
TFrmModify = class(TForm)
TimerModify: TTimer;
CLBoxVisualModify: TCheckListBox;
PanelEditLayerName: TPanel;
CBoxEditLayerName: TComboBox;
PanelFeatureType: TPanel;
CBoxFeatureType: TComboBox;
PanelLayerManage: TPanel;
EditSearchFeature: TEdit;
BBtnSearchFeature: TBitBtn;
SBtnClearEditSearchFeature: TSpeedButton;
CLBoxCanSelect: TCheckListBox;
LBoxModify: TListBox;
Image1: TImage;
Image2: TImage;
BBtnClose: TBitBtn;
Panel1: TPanel;
procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
procedure SetIniFrmModify();
procedure FormShow(Sender: TObject);
procedure TimerModifyTimer(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure upDate_CBoxEditLayerName();
procedure SetDrawTool();
procedure CBoxEditLayerNameChange(Sender: TObject);
procedure CBoxFeatureTypeChange(Sender: TObject);
procedure SBtnClearEditSearchFeatureClick(Sender: TObject);
procedure LBoxModifyClick(Sender: TObject);
procedure BBtnSearchFeatureClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SetLabelLayer();
procedure CLBoxVisualModifyClickCheck(Sender: TObject);
procedure CLBoxCanSelectClickCheck(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmModify: TFrmModify;
OnShowing: Boolean;
implementation
uses UnitMain, UnitDataModule, UnitSearchResult, UnitCommonModule;
{$R *.dfm}
procedure TFrmModify.WMNCPaint(var Msg: TWMNCPaint);
var
dc : hDc;
Pen : hPen;
OldPen : hPen;
OldBrush : hBrush;
begin
inherited;
dc := GetWindowDC(Handle);
msg.Result := 1;
Pen := CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
OldPen := SelectObject(dc, Pen);
OldBrush := SelectObject(dc, GetStockObject(NULL_BRUSH));
if OnShowing and TimerModify.Enabled then Windows.Rectangle(dc, 0, 0, Width+5, Height);
if Not TimerModify.Enabled then Windows.Rectangle(dc, 0, 0, Width, Height);
if Not OnShowing and TimerModify.Enabled then Windows.Rectangle(dc, 0, 0, Width-5, Height);
SelectObject(dc, OldBrush);
SelectObject(dc, OldPen);
DeleteObject(Pen);
ReleaseDC(Handle, Canvas.Handle);
end;
// 修改窗体的初始化设置
procedure TFrmModify.SetIniFrmModify();
var
i, j: Integer;
begin
// 加载图层显示管理 编辑图层
LBoxModify.Clear;
CLBoxVisualModify.Clear;
CLBoxCanSelect.Clear;
CBoxEditLayerName.Clear;
for i := 1 to FrmMain.Map1.Layers.Count do
begin
CBoxEditLayerName.Items.Add(FrmMain.Map1.Layers[i].Name);
LBoxModify.Items.Add(FrmMain.Map1.Layers[i].Name);
CLBoxVisualModify.Items.Add('');
CLBoxVisualModify.Checked[i-1] := FrmMain.Map1.Layers[i].Visible;
CLBoxCanSelect.Items.Add('');
CLBoxCanSelect.Checked[i-1] := FrmMain.Map1.Layers[i].Selectable;
end;
CBoxEditLayerName.ItemIndex := 0;
LBoxModify.ItemIndex := 0;
// 加载图元类型
CBoxFeatureType.Clear;
for j := 1 to CBoxEditLayerName.Items.Count do
for i := 1 to LayerToFtTypeArr[j].TypeNum do
CBoxFeatureType.Items.Add(LayerToFtTypeArr[j].FeatureTypeArr[i]);
CBoxFeatureType.ItemIndex := 0;
CBoxEditLayerNameChange(FrmModify);
CBoxFeatureTypeChange(FrmModify);
EditLayer := FrmMain.Map1.Layers['标记'];
end;
procedure TFrmModify.FormShow(Sender: TObject);
begin
Top := 95;
Left := 2;
Width := 0;
Height := 454;
OnShowing := True;
TimerModify.Enabled := True;
SetIniFrmModify();
end;
procedure TFrmModify.TimerModifyTimer(Sender: TObject);
begin
if OnShowing then
begin
Width := Width + 5;
if Width > 165 then TimerModify.Enabled := False;
end
else
begin
Width := Width - 5;
if Width < 25 then
begin
TimerModify.Enabled := False;
Close;
end;
end;
end;
procedure TFrmModify.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if Width > 25 then
begin
CanClose := False;
OnShowing := False;
TimerModify.Enabled := True;
end;
end;
procedure TFrmModify.upDate_CBoxEditLayerName();
var
i: Integer;
begin
// Loop through all layers and put their names in the combo box
// Set editing layer to be first layer in list
CBoxEditLayerName.Clear;
for i := 1 to FrmMain.Map1.Layers.Count do
CBoxEditLayerName.Items.Add(FrmMain.Map1.Layers.Item[i].Name);
CBoxEditLayerName.ItemIndex := 0;
if FrmMain.Map1.Layers.Count>0 then
begin
EditLayer := FrmMain.Map1.Layers.Item[CBoxEditLayerName.Text];
// ftrLayer := Map1.Layers.Item[ftrLayerCombo.Text];
end;
end;
procedure TFrmModify.SetDrawTool();
var
i, j: Integer;
DrawToolType: String;
begin
// 设置绘制工具
j := CBoxEditLayerName.ItemIndex;
i := CBoxFeatureType.ItemIndex;
DrawToolType := LayerToFtTypeArr[j+1].FeatureToolArr[i+1];
if CBoxEditLayerName.Text = '标记' then DrawToolType := '文字';
// 设置标注文字的属性
SetLabelStyle(CBoxFeatureType.Text);
// 设置绘制工具的属性
if DrawToolType = '符号' then
begin
// 设置符号的属性
SetSymbolStyle(CBoxFeatureType.Text);
// 屏蔽菜单和工具处理
with FrmMain do
begin
NCUSTOM_SYMBOL_TOOLClick(FrmMain);
LockMenuTButton();
// UnLockMenu Button
NCUSTOM_SYMBOL_TOOL.Enabled := True;
TBtnCUSTOM_SYMBOL_TOOL.Enabled := True;
end;
end else
if DrawToolType = '线' then
begin
// 设置线的属性
SetLineStyle(CBoxFeatureType.Text);
// 屏蔽菜单和工具处理
with FrmMain do
begin
NCUSTOM_LINE_TOOLClick(FrmMain);
LockMenuTButton();
// UnLockMenu Button
NCUSTOM_LINE_TOOL.Enabled := True;
TBtnCUSTOM_LINE_TOOL.Enabled := True;
NCUSTOM_POLYLINE_TOOL.Enabled := True;
TBtnCUSTOM_POLYLINE_TOOL.Enabled := True;
end;
end else
if DrawToolType = '区域' then
begin
// 设置区域的属性
SetRegionStyle(CBoxFeatureType.Text);
// 屏蔽菜单和工具处理
with FrmMain do
begin
NCUSTOM_REGION_TOOLClick(FrmMain);
LockMenuTButton();
// UnLockMenu Button
NCUSTOM_RECTANGLE_TOOL.Enabled := True;
TBtnCUSTOM_RECTANGLE_TOOL.Enabled := True;
NCUSTOM_CIRCULARREGION_TOOL.Enabled := True;
TBtnCUSTOM_CIRCULARREGION_TOOL.Enabled := True;
NCUSTOM_REGION_TOOL.Enabled := True;
TBtnCUSTOM_REGION_TOOL.Enabled := True;
end;
end else
begin
// 设置对应的标注属性
with FrmMain do
begin
NCUSTOM_TEXT_TOOLClick(FrmMain);
LockMenuTButton();
// UnLockMenu Button
NCUSTOM_TEXT_TOOL.Enabled := True;
TBtnCUSTOM_TEXT_TOOL.Enabled := True;
end;
end;
end;
procedure TFrmModify.CBoxEditLayerNameChange(Sender: TObject);
var
i, j: Integer;
begin
// change EditLayer
EditLayer := FrmMain.Map1.Layers.Item[CBoxEditLayerName.Text];
InfoLayerName := EditLayer.Name;
EditLayer.KeyField := 'ID';
// 添加类型刷新
CBoxFeatureType.Items.Clear;
if CBoxEditLayerName.Text = '标记' then
begin
for j := 1 to CBoxEditLayerName.Items.Count do
for i := 1 to LayerToFtTypeArr[j].TypeNum do
CBoxFeatureType.Items.Add(LayerToFtTypeArr[j].FeatureTypeArr[i]);
end else
for i := 1 to LayerToFtTypeArr[CBoxEditLayerName.ItemIndex+1].TypeNum do
CBoxFeatureType.Items.Add(LayerToFtTypeArr[CBoxEditLayerName.ItemIndex+1].FeatureTypeArr[i]);
CBoxFeatureType.ItemIndex := 0;
// 同步选择
LBoxModify.ItemIndex := CBoxEditLayerName.ItemIndex;
CLBoxCanSelect.ItemIndex := CBoxEditLayerName.ItemIndex;
CLBoxCanSelect.Checked[CBoxEditLayerName.ItemIndex] := True;
// 设置图层的编辑情况
SetLabelLayer();
FrmMain.Map1.Layers[CLBoxCanSelect.ItemIndex+1].Selectable := CLBoxCanSelect.Checked[CLBoxCanSelect.ItemIndex];
for i := 1 to CLBoxCanSelect.Count-1 do
if i <> CLBoxCanSelect.ItemIndex then
begin
FrmMain.Map1.Layers[i+1].Selectable := False;
CLBoxCanSelect.Checked[i] := False;
end;
SetDrawTool();
end;
procedure TFrmModify.CBoxFeatureTypeChange(Sender: TObject);
begin
SetDrawTool();
end;
procedure TFrmModify.SBtnClearEditSearchFeatureClick(Sender: TObject);
begin
// 清空查询图元名称框
EditSearchFeature.Text := '';
end;
procedure TFrmModify.LBoxModifyClick(Sender: TObject);
begin
// 同步图层选择
CBoxEditLayerName.ItemIndex := LBoxModify.ItemIndex;
CBoxEditLayerNameChange(Sender);
end;
procedure TFrmModify.BBtnSearchFeatureClick(Sender: TObject);
begin
// 模糊查询
DM.ADOQuerySearchAll.Close;
DM.ADOQuerySearchAll.SQL.Clear;
SQLString := 'SELECT *' + #13;
SQLString := SQLString + 'FROM ' + CBoxEditLayerName.Text + #13;
SQLString := SQLString + 'WHERE Name LIKE ''%' + EditSearchFeature.Text + '%''';
SQLString := SQLString + 'AND Type = ''' + CBoxFeatureType.Text + '''';
DM.ADOQuerySearchAll.SQL.Add(SQLString);
DM.ADOQuerySearchAll.Open;
if DM.ADOQuerySearchAll.RecordCount > 0 then
begin
FillResultData();
FrmSearchResult.Show;
FrmSearchResult.Caption := '修改查询结果';
FrmSearchResult.PanelTitle.Caption := '请选择查询结果';
FrmSearchResult.PanelResultNum.Caption := '共查出:'+IntToStr(DM.ADOQuerySearchAll.RecordCount)+'条记录';
FrmSearchResult.BBtnFind.SetFocus;
end else Application.MessageBox('满足条件的信息没有找到!', '提示', MB_OK);
end;
procedure TFrmModify.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FrmMain.NmiPanToolClick(FrmMain);
FrmMain.ToolBarDrawMapTool.Visible := False;
end;
// 标记层永远可编辑
procedure TFrmModify.SetLabelLayer();
begin
FrmMain.Map1.Layers[1].Visible := True;
FrmMain.Map1.Layers[1].Editable := True;
FrmMain.Map1.Layers[1].Selectable := True;
CLBoxVisualModify.Checked[0] := True;
CLBoxCanSelect.Checked[0] := True;
end;
procedure TFrmModify.CLBoxVisualModifyClickCheck(Sender: TObject);
begin
// 设置图层的显示情况
FrmMain.Map1.Layers[CLBoxVisualModify.ItemIndex+1].Visible := CLBoxVisualModify.Checked[CLBoxVisualModify.ItemIndex];
SetLabelLayer();
end;
procedure TFrmModify.CLBoxCanSelectClickCheck(Sender: TObject);
begin
CBoxEditLayerName.ItemIndex := CLBoxCanSelect.ItemIndex;
CBoxEditLayerNameChange(Sender);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -