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

📄 unitmodify.~pas

📁 在delphi下基于MapX5.0的GIS程序
💻 ~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
//  模糊查询
  SQLString := '';
  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 + -