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

📄 jiedianweihuscr.~pas

📁 报警地图电子显示源代码
💻 ~PAS
字号:
unit JieDianWeiHuScr;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, jpeg, DB, ADODB;

type
  TFormjiedian = class(TForm)
    Panel1: TPanel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    ImageMap: TImage;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtnStartDrag(Sender: TObject;
      var DragObject: TDragObject);
    procedure ImageMapDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure ImageMapDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtnMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BitBtnKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
    OBJ : string;
    yjjd:array[1..16] of byte;
  public
    { Public declarations }
  end;

  PMainList = ^MainList;
  MainList = record
    MainState : Integer;
    MainBtn: TBitBtn;
  end;

  PNoteList = ^NoteList;
  NoteList = record
    State : Integer;
    bjqbh : Integer;
    szdz : string;
    bjqzt : string;
    dyyjjd : string;
    bz : string;
    tp:string;
    Btn: TBitBtn;
  end;

var
  Formjiedian: TFormjiedian;

  MyList: TList;
  My11List: TList;
  ARecord: PNoteList;
  MyMainList:TList;
  AMainRecord: PMainList;
implementation

uses AddBJDataSrc,HardwareInterfaceSrc,MainSrc;

{$R *.dfm}

procedure TFormjiedian.BitBtn1Click(Sender: TObject);
var SPath:string;
begin
  if MyList.Count<16 then
  begin
    SPath:=extractFilePath(ParamStr(0));
    New(ARecord);
    ARecord^.State := 0;
    ARecord^.bjqbh := 0;
    ARecord^.szdz := '';
    ARecord^.bjqzt := '未安装';
    ARecord^.dyyjjd := '';
    ARecord^.bz := '';
    ARecord^.tp := '';

    ARecord^.Btn:=TBitBtn.Create(self);
    ARecord^.Btn.Parent:= Formjiedian;
    ARecord^.Btn.Height := 27;
    ARecord^.Btn.Width := 28;
    ARecord^.Btn.Left:=5;
    ARecord^.Btn.Top:=30;
    ARecord^.Btn.Glyph.LoadfromFile(SPath+'\picture\BELL.bmp');
    ARecord^.Btn.DragMode:= dmAutomatic;
    ARecord^.Btn.OnStartDrag := BitBtnStartDrag;
    ARecord^.Btn.OnMouseDown := BitBtnMouseDown;
    ARecord^.Btn.OnKeyDown := BitBtnKeyDown;
    MyList.Add(ARecord);

    New(AMainRecord);
    AMainRecord^.MainState:=0;
    AMainRecord^.MainBtn:=TBitBtn.Create(FormMain);
    AMainRecord^.MainBtn.Parent:= FormMain;
    AMainRecord^.MainBtn.Height := 27;
    AMainRecord^.MainBtn.Width := 28;
    AMainRecord^.MainBtn.Left:=5;
    AMainRecord^.MainBtn.Top:=5;
    AMainRecord^.MainBtn.Visible:=false;
    AMainRecord^.MainBtn.Glyph.LoadfromFile(SPath+'\picture\BELL.bmp');
    AMainRecord^.MainBtn.OnClick := FormMain.BitBtn4Click;
    MyMainList.Add (AMainRecord);
  end
  else showmessage('报警器只支持16路');
end;


procedure TFormjiedian.BitBtnKeyDown(Sender: TObject; var Key: Word;    //修改
  Shift: TShiftState);
var ARec: PNoteList;
    i,j:Integer;
    Temp:Integer;
    Dir:String;
begin
  if Key=65 then    // 按'A'键   ..............
  begin
    for i:=0 to MyList.Count-1 do
    begin
      ARec := MyList.Items[i];
      if ARec^.Btn.TabOrder=TBitBtn(Sender).TabOrder then
      begin
        FormAddBJData.EditNum.Text:=inttostr(ARec^.bjqbh);
        FormAddBJData.EditPos.Text:=ARec^.szdz;
        FormAddBJData.EditName.Text:=ARec^.bjqzt ;
        FormAddBJData.EditAddr.Text:=ARec^.dyyjjd;
        FormAddBJData.EditTele.Text:=ARec^.bz;
        FormAddBJData.EditMap.Text:=ARec^.tp;

        GetDir(0 , Dir);

        if FormAddBJData.ShowModal = mrOK then
        begin
          if (FormAddBJData.EditAddr.Text='') or (FormAddBJData.EditNum.Text='') or (FormAddBJData.EditNum.Text='0') or (FormAddBJData.EditAddr.Text='0') or (strtoint(FormAddBJData.EditAddr.Text)>16) then ShowMessage('编号(不能为空,零)或对应硬件节点(须在1与16之间)有误')
          else
          begin
              ARec^.bjqbh:=strtoint(FormAddBJData.EditNum.Text);
              ARec^.szdz:=FormAddBJData.EditPos.Text;
              ARec^.bjqzt:=FormAddBJData.EditName.Text ;
              ARec^.dyyjjd:=FormAddBJData.EditAddr.Text;
              ARec^.bz:=FormAddBJData.EditTele.Text;
              ARec^.tp:=FormAddBJData.EditMap.Text;
          end;
        end;

        ChDir(Dir);

        break;
      end;
    end;
  end;
end;

procedure TFormjiedian.BitBtnMouseDown(Sender: TObject; Button: TMouseButton;  //删除
  Shift: TShiftState; X, Y: Integer);
var ARec: PNoteList;
    AMainRec: PMainList;
    i:Integer;
begin
  if Button=mbRight then
  begin
     if MessageDlg('确定删除吗?',mtConfirmation, [mbYes, mbNo], 0) = mrNo then
     begin
       //close;
     end
     else
     begin
       TBitBtn(Sender).DragMode:= dmManual;
       ImageMap.DragMode:= dmManual;
       for i:=0 to MyList.Count-1 do
       begin
         ARec := MyList.Items[i];
         AMainRec := MyMainList.Items[i];
         if ARec^.Btn.TabOrder=TBitBtn(Sender).TabOrder then
         begin
           Sender.Free;
           MyList.Delete(i);
           AMainRec^.MainBtn.Free;
           MyMainList.Delete(i);
           
           break;
         end;
       end;
     end;
  end;
end;

procedure TFormjiedian.BitBtnStartDrag(Sender: TObject;
  var DragObject: TDragObject);
begin
  OBJ:='BTN';
end;

procedure TFormjiedian.ImageMapDragDrop(Sender, Source: TObject; X, Y: Integer);
var i:Integer;
    ARec: PNoteList;
    AMainRec: PMainList;
begin
  for i:=0 to MyList.Count-1 do
  begin
    ARec := MyList.Items[i];
    AMainRec := MyMainList.Items[i];
    if Source=ARec^.Btn then
    begin
      ARec^.Btn.Left:=x;
      ARec^.Btn.Top:=y;
      AMainRec^.MainBtn.Left:=x;
      AMainRec^.MainBtn.Top:=y-35;
      break;
    end;
  end;
end;

procedure TFormjiedian.ImageMapDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept:= true;
end;

procedure TFormjiedian.BitBtn2Click(Sender: TObject);        //按‘确定’ 键
var i,j:Integer;
    ARec: PNoteList;
    AMainRec: PMainList;
    strSQL : string;
begin
  ADOQuery1.Close;
  ADOQuery1.Open;

  while not ADOQuery1.Eof do
  begin
    ADOQuery1.Delete;
  end;
  
  j:= MyList.Count-1;
  for i:=0 to j do
  begin
    ARec := MyList.Items[i];
    AMainRec := MyMainList.Items[i];
    if ARec^.bjqbh=0 then
    begin
    end
    else
    begin
      strSQL := 'Insert into bjqwhb(报警器编号,所在地址, 报警器状态, 对应硬件节点, 备注, 左边,上边,对应图片) values(' +
                  inttostr(ARec^.bjqbh) +  ',' + '"' + ARec^.szdz + '"' + ',' + '"' + ARec^.bjqzt + '"' + ',' +
                  '"' + ARec^.dyyjjd + '"' + ','+ '"' + ARec^.bz + '"' + ','+ inttostr(ARec^.Btn.Left)  + ',' +  inttostr(ARec^.Btn.Top) + ','+'"'+ARec^.tp+'"'+')';
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text := strSQL;
      ADOQuery1.ExecSQL;
    end;
  end;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Text := 'select * from bjqwhb';
  ADOQuery1.ExecSQL;
  close;
end;

procedure TFormjiedian.FormCreate(Sender: TObject);
var SPath:string;
    i,Len,temp : Integer;
begin

  MyList := TList.Create;        //申请缓冲区
  MyMainList := TList.Create;    //申请缓冲区
  My11List := TList.Create;
  
  ADOQuery1.Open;
  if ADOQuery1.Eof=false then
  begin
    SPath:=extractFilePath(ParamStr(0));
    Len:= ADOQuery1.RecordCount;
    ADOQuery1.First;
    for i:=0 to Len-1 do
    begin
      New(ARecord);
      ARecord^.State := 0;
      ARecord^.bjqbh := ADOQuery1.FieldByName('报警器编号').AsInteger;
      ARecord^.szdz := ADOQuery1.FieldByName('所在地址').AsString;
      ARecord^.bjqzt := ADOQuery1.FieldByName('报警器状态').AsString;
      ARecord^.dyyjjd := ADOQuery1.FieldByName('对应硬件节点').AsString;

      ARecord^.bz := ADOQuery1.FieldByName('备注').AsString;
      ARecord^.tp := ADOQuery1.FieldByName('对应图片').AsString;

      ARecord^.Btn:=TBitBtn.Create(self);
      ARecord^.Btn.Parent:= Formjiedian;
      ARecord^.Btn.Height := 27;
      ARecord^.Btn.Width := 28;
      ARecord^.Btn.Left:=ADOQuery1.FieldByName('左边').AsInteger;
      ARecord^.Btn.Top:=ADOQuery1.FieldByName('上边').AsInteger;
      ARecord^.Btn.Glyph.LoadfromFile(SPath+'\picture\BELL.bmp');
      ARecord^.Btn.DragMode:= dmAutomatic;
      ARecord^.Btn.OnStartDrag := BitBtnStartDrag;
      ARecord^.Btn.OnMouseDown := BitBtnMouseDown;
      ARecord^.Btn.OnKeyDown := BitBtnKeyDown;
      MyList.Add(ARecord);
            
      New(AMainRecord);
      AMainRecord^.MainState:=0;
      AMainRecord^.MainBtn:=TBitBtn.Create(self);
      AMainRecord^.MainBtn.Parent:= FormMain;
      AMainRecord^.MainBtn.Height := 27;
      AMainRecord^.MainBtn.Width := 28;
      AMainRecord^.MainBtn.Left:=ARecord^.Btn.Left;
      AMainRecord^.MainBtn.Top:=ARecord^.Btn.Top-35;
      AMainRecord^.MainBtn.Visible:=false;
      AMainRecord^.MainBtn.Glyph.LoadfromFile(SPath+'\picture\BELL.bmp');
      AMainRecord^.MainBtn.OnClick := FormMain.BitBtn4Click;
      MyMainList.Add (AMainRecord);

      ADOQuery1.Next;
    end;
  end;
end;

procedure TFormjiedian.FormDestroy(Sender: TObject);
var i:Integer;
begin
  for i:=MyList.Count-1 Downto 0 do
  begin
    ARecord := MyList.Items[i];
    ARecord^.Btn.Free;
    Dispose(ARecord);
    AMainRecord := MyMainList.Items[i];
    AMainRecord^.MainBtn.Free;
    Dispose(AMainRecord);
  end
end;

procedure TFormjiedian.FormActivate(Sender: TObject);    //激活
begin
  FormHardwareInterface.ListenComm.StopComm;
  FormMain.Timer2.Enabled:=false;
end;

procedure TFormjiedian.FormClose(Sender: TObject; var Action: TCloseAction);   //关闭
var i:Integer;
    ARec: PNoteList;
    AMainRec: PMainList;
begin
  for i:=MyList.Count-1 downto 0 do
  begin
    ARec := MyList.Items[i];
    AMainRec := MyMainList.Items[i];
    if ARec^.bjqbh=0 then
    begin
      ARec^.Btn.Free;
      MyList.Delete(i);
      AMainRec^.MainBtn.Free;
      MyMainList.Delete(i);
    end;
  end;
  FormHardwareInterface.ListenComm.StartComm;
  FormMain.Timer2.Enabled:=true;
end;

end.

⌨️ 快捷键说明

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