unitsearchresultbus_way.~pas

来自「在delphi下基于MapX5.0的GIS程序」· ~PAS 代码 · 共 234 行

~PAS
234
字号
unit UnitSearchResultBus_Way;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, StdCtrls, Buttons, ExtCtrls, MapXLib_TLB,
  ComCtrls;

type
  TFrmSearchResultBus_Way = class(TForm)
    TimerSearchResult: TTimer;
    TimerFlash: TTimer;
    GBoxInfo: TGroupBox;
    BBtnClose: TBitBtn;
    PanelResultNum: TPanel;
    PanelTitle: TPanel;
    SGrid1: TStringGrid;
    SGrid2: TStringGrid;
    MemoInfo: TMemo;
    TBarZoom: TTrackBar;
    Label3: TLabel;
    BBtnViewInfo: TBitBtn;
    BBtnFind: TBitBtn;
    procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
    procedure TimerSearchResultTimer(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormShow(Sender: TObject);
    procedure TimerFlashTimer(Sender: TObject);
    procedure TBarZoomChange(Sender: TObject);
    procedure BBtnFindClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure SGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure SGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure SGrid2SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure SGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure BBtnViewInfoClick(Sender: TObject);
    procedure SGrid1DblClick(Sender: TObject);
    procedure SGrid2DblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmSearchResultBus_Way: TFrmSearchResultBus_Way;
  OnShowing: Boolean;
  iNum: Integer=0;
  Col, Row, SGridNum: Integer;

implementation

uses UnitDataModule, UnitMain, UnitCommonModule, UnitComInfo, UnitCompanys,
  UnitComWay, UnitLabelInfo;

{$R *.dfm}

procedure TFrmSearchResultBus_Way.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 TimerSearchResult.Enabled then Windows.Rectangle(dc, 0, 0, Width+5, Height);
  if Not TimerSearchResult.Enabled then Windows.Rectangle(dc, 0, 0, Width, Height);
  if Not OnShowing and TimerSearchResult.Enabled then Windows.Rectangle(dc, 0, 0, Width-5, Height);
  SelectObject(dc, OldBrush);
  SelectObject(dc, OldPen);
  DeleteObject(Pen);
  ReleaseDC(Handle, Canvas.Handle);
end;

procedure TFrmSearchResultBus_Way.TimerSearchResultTimer(Sender: TObject);
begin
  if OnShowing then
  begin
    Left := Left - 5;
    Width := Width + 5;
    if Width > 165 then TimerSearchResult.Enabled := False;
  end
  else
  begin
    Left := Left + 5;
    Width := Width - 5;
    if Width < 25 then
    begin
      TimerSearchResult.Enabled := False;
      Close;
    end;
  end;
end;

procedure TFrmSearchResultBus_Way.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if Width > 25 then
  begin
    CanClose := False;
    OnShowing := False;
    TimerSearchResult.Enabled := True;
  end;
end;

procedure TFrmSearchResultBus_Way.FormShow(Sender: TObject);
begin
  Top := 95;
  Left := 776;
  Width := 0;
  Height := 454;
  OnShowing := True;
  TimerSearchResult.Enabled := True; 
end;

procedure TFrmSearchResultBus_Way.TimerFlashTimer(Sender: TObject);
begin
  iNum := (iNum + 1) mod 2;
  with FrmMain do
  begin
   if iNum = 0 then Map1.Layers.Item['公交线路'].Selection.ClearSelection
     else Map1.Layers.Item['公交线路'].Selection.SelectByPoint(infoFeature.CenterX, infoFeature.CenterY, miSelectionAppend, miSearchResultDefault);
  end;
end;

procedure TFrmSearchResultBus_Way.TBarZoomChange(Sender: TObject);
begin
  if CanChangeZoom then
    FrmMain.Map1.ZoomTo((TBarZoom.Position+1)*20, infoFeature.CenterX, infoFeature.CenterY);
end;

procedure TFrmSearchResultBus_Way.BBtnFindClick(Sender: TObject);
var
  FindName: String;
begin
  // 定位
  CanChangeZoom := True;
  With FrmMain do
  begin
    if SGridNum = 1 then FindName := BusWay1[Row+1]
    else if Col = 0 then FindName := BusWay2S[Row+1]
            else FindName := BusWay2E[Row+1];
    FoundObj := Map1.Layers['公交线路'].Find.Search(PYConvert(FindName), '');
    if (FoundObj.Findrc Mod 10 = 1) then
    begin
       FeatureFound := True;
       Map1.ZoomTo((TBarZoom.Position+1)*20, FoundObj.CenterX, FoundObj.CenterY);
       Map1.Layers.ClearSelection;
       Map1.Layers['公交线路'].Selection.SelectByPoint(FoundObj.CenterX, FoundObj.CenterY, miSelectionAppend, miSearchResultDefault);
       Map1.Layers['公交线路'].KeyField := 'ID';
       infoFeature := Map1.Layers['公交线路'].Selection.Item[1];
    end
    else begin
           Application.MessageBox('信息不能定位!', '提示', MB_OK);
           FeatureFound := False;
         end;
  end;
end;

procedure TFrmSearchResultBus_Way.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  TimerFlash.Enabled := False;
  FrmMain.Map1.Layers.ClearSelection;
end;

procedure TFrmSearchResultBus_Way.SGrid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  SGrid1.Canvas.Brush.Color := clRed;
end;

procedure TFrmSearchResultBus_Way.SGrid2DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  SGrid2.Canvas.Brush.Color := clRed;
end;

procedure TFrmSearchResultBus_Way.SGrid2SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  SGridNum := 2;
  Col := ACol;
  Row := ARow;
  MemoInfo.Lines.Add('乘'+BusWay2S[Row+1]);
  MemoInfo.Lines.Add('在'+BusWay2Spot[Row+1]+'下车');
  MemoInfo.Lines.Add('再乘'+BusWay2E[Row+1]+'可以达到');
end;

procedure TFrmSearchResultBus_Way.SGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  SGridNum := 1;
  Row := ARow;
  MemoInfo.Clear;
  MemoInfo.Lines.Add('乘'+BusWay1[Row+1]+'可以直接达到');
end;

procedure TFrmSearchResultBus_Way.BBtnViewInfoClick(Sender: TObject);
begin
// 定位
  BBtnFindClick(Sender);
  if FeatureFound then
  begin
    EditLayer := FrmMain.Map1.Layers['公交线路'];
    InfoLayerName := '公交线路';
    infFormViewType := SEARCH_FEATURE;
    TimerFlash.Enabled := True; 
    FrmComWay.ShowModal;
  end;
end;

procedure TFrmSearchResultBus_Way.SGrid1DblClick(Sender: TObject);
begin
  BBtnFindClick(Sender);
end;

procedure TFrmSearchResultBus_Way.SGrid2DblClick(Sender: TObject);
begin
  BBtnFindClick(Sender);
end;

end.

⌨️ 快捷键说明

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