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

📄 mainunit.~pas

📁 发射台 控制台 dephi编写 大家可以随便可看看, 可以做dephi入门实例学习
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, xmldom, XMLIntf, msxmldom, XMLDoc, ExtCtrls,
  Menus, Grids, Buttons, StrUtils, PWUnit, SetUnit;

type
  TKValue = Record
    value1 : array of integer;
    value2 : array of integer;
    value3 : array of integer;
    value4 : array of integer;
    value5 : array of integer;
  end;

type
  TKDetails = Record
    TName : string;
    AList : Tstrings;
    Value : TKValue;
  end;

type
  TFrmMain = class(TForm)
    DTSwitch: TDateTimePicker;
    Label1: TLabel;
    GroupBox1: TGroupBox;
    BoxA1: TComboBox;
    Label4: TLabel;
    Label5: TLabel;
    GroupBox2: TGroupBox;
    Label2: TLabel;
    Label3: TLabel;
    BoxA2: TComboBox;
    GroupBox3: TGroupBox;
    Label6: TLabel;
    Label7: TLabel;
    BoxA3: TComboBox;
    GroupBox4: TGroupBox;
    Label8: TLabel;
    Label9: TLabel;
    BoxA4: TComboBox;
    GroupBox5: TGroupBox;
    Label10: TLabel;
    Label11: TLabel;
    BoxA5: TComboBox;
    GroupBox6: TGroupBox;
    Label12: TLabel;
    Label13: TLabel;
    BoxA6: TComboBox;
    BtnAdd: TButton;
    BtnModify: TButton;
    BtnDelete: TButton;
    XMLDocument1: TXMLDocument;
    BtnKey: TButton;
    Timer1: TTimer;
    PopupMenu1: TPopupMenu;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    DateTimePicker1: TDateTimePicker;
    StringGrid1: TStringGrid;
    BtnOK: TButton;
    BtnCancel: TButton;
    NSet: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnKeyClick(Sender: TObject);
    procedure BtnAddClick(Sender: TObject);
    procedure BoxA1Click(Sender: TObject);
    procedure BoxA2Click(Sender: TObject);
    procedure BoxA3Click(Sender: TObject);
    procedure BoxA4Click(Sender: TObject);
    procedure BoxA5Click(Sender: TObject);
    procedure BoxA6Click(Sender: TObject);
    procedure BtnModifyClick(Sender: TObject);
    procedure BtnDeleteClick(Sender: TObject);
    procedure BtnCancelClick(Sender: TObject);
    procedure BtnOKClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure DTSwitchClick(Sender: TObject);
    procedure StringGrid1Click(Sender: TObject);
    procedure NSetClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    RunMapFileName, ChartFileName ,CurWorkDir : string;
    TKDB : array[0..5] of TKDetails;
    AInUseList : TStrings;
    DTArr : array of TDateTime;
    IndexInFile : array[0..5] of array of integer;     //warning!!此处index从1开始,为了与integer默认初始化值0相区分
    Locked : boolean;
    OperateType : integer;   //0:增加;1:修改;2:删除
    procedure InitDBValue();
    procedure FreeDB();
    procedure InitRunMapFile();  //初始化保存运行图的文件
    procedure RefreshDBGrid();
    function GetTIndex(TName : string) : integer; //根据发射机名,获得此发射机的索引号
    procedure RefreshAInUseList();
    procedure RefreshComBoxList(nowBox : integer);
    function JudgeIsInUse(AName : string; Index : integer) : boolean;
//    function JudgeIsInGroup(AName : string; nowBox, CompareBox : integer) : boolean;
    procedure SystemLocked(IsLocked : boolean);
    procedure BtnStateSwitch(OperateBtnState : boolean);
    procedure RefreshChartFile();     //必须在RefreshDBGrid之后调用
    function TimeDefference(t1, t2 : TDateTime) : integer;   //将时间的差异换算成差的秒数, t2 > t1
    function JudgeTimeIsInUse(dt : TDateTime) : boolean;
    procedure ClearComBox();  //使combox中选中的值均为‘未使用’
  public
    { Public declarations }
    SetFileName : string;
    pw : string;
    SleepTimeLimit : integer;
    IsPWCorrect : integer;  //-1:未确定;0:错误;1:正确
   function FindSInSList(s : string; sList : TStrings) : integer;
  end;

var
  FrmMain: TFrmMain;
  Mutex: hWnd;    // Mutexhandle
  function CreateMutex: Boolean;
  procedure DestroyMutex;

implementation

{$R *.dfm}

function CreateMutex: Boolean;
var
  PrevInstHandle: THandle;
  AppTitle: PChar;
begin
  AppTitle := StrAlloc(100);
  StrPCopy(AppTitle, Application.Title);
  Result := True;
  Mutex := Windows.CreateMutex(nil, False, AppTitle);
  if (GetLastError = ERROR_ALREADY_EXISTS) or (Mutex = 0) then begin
    Result := False;
    SetWindowText(Application.Handle, '');
    PrevInstHandle := FindWindow(nil, AppTitle);
    if PrevInstHandle <> 0 then begin
     if IsIconic(PrevInstHandle) then
        ShowWindow(PrevInstHandle, SW_RESTORE)
      else
       BringWindowToTop(PrevInstHandle);
       SetForegroundWindow(PrevInstHandle);
    end;
    if Mutex <> 0 then
      Mutex := 0;
  end;
  StrDispose(AppTitle);
end;

procedure DestroyMutex;
begin
  if Mutex <> 0 then
    CloseHandle(Mutex);
end;


procedure TFrmMain.FormCreate(Sender: TObject);
var
//  tmpBuf : array[0..255] of char;
  tmpList : TStrings;
begin
  //取当前路径
//  GetCurrentDirectory(SizeOf(tmpBuf), tmpBuf);
  CurWorkDir := 'c:';
  RunMapFileName := CurWorkDir + '\runmap.xml';
  ChartFileName := CurWorkDir + '\Chart.csv';
  SetFileName := CurWorkDir + '\Set.dat';
  //初始化库
  try
    InitDBValue();
  except
    ShowMessage('初始化库失败!');
    exit;
  end;

  tmpList := TStringList.Create;
  if FileExists(SetFileName) = false then
    begin
      tmpList.Add('123');
      tmpList.Add('60000');
      tmpList.SaveToFile(SetFileName);
    end else
    begin
      tmpList.LoadFromFile(SetFileName);
    end;
  SleepTimeLimit := StrToInt(tmpList.Strings[1]);
  self.Timer1.Interval := SleepTimeLimit;
  self.pw := tmpList.Strings[0];
  tmpList.Free;

  InitRunMapFile();
  RefreshDBGrid();
  RefreshChartFile;

  AInUseList := TStringList.Create;
  AInUseList.Add('未使用');
  AInUseList.Add('未使用');
  AInUseList.Add('未使用');
  AInUseList.Add('未使用');
  AInUseList.Add('未使用');
  AInUseList.Add('未使用');
  RefreshComBoxList(100);
  self.BoxA1.ItemIndex := 0;
  self.BoxA2.ItemIndex := 0;
  self.BoxA3.ItemIndex := 0;
  self.BoxA4.ItemIndex := 0;
  self.BoxA5.ItemIndex := 0;
  self.BoxA6.ItemIndex := 0;
  RefreshAInUseList();

  IsPWCorrect := -1;
  locked := false;
end;

procedure TFrmMain.BitBtn1Click(Sender: TObject);
begin
  self.StringGrid1.Cells[0,0] := 'abcd';
end;

procedure TFrmMain.FreeDB;
var
  i : integer;
begin
  for i := 0 to 5 do
    begin
      TKDB[i].AList.Free;
      SetLength(TKDB[i].Value.value1, 0);
      SetLength(TKDB[i].Value.value2, 0);
      SetLength(TKDB[i].Value.value3, 0);
      SetLength(TKDB[i].Value.value4, 0);
      SetLength(TKDB[i].Value.value5, 0);
    end;
end;

procedure TFrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i : integer;
begin
  FreeDB();

  AInUseList.Free;

  for i := 0 to 5 do
    begin
      SetLength(IndexInFile[i], 0);
    end;

  SetLength(DTArr, 0);
end;

procedure TFrmMain.InitRunMapFile;
var
  tmpList : TStrings;
begin
  if FileExists(RunMapFileName) then
    exit;
  tmpList := TStringList.Create;
  tmpList.Add('<RunMap>');
  tmpList.Add('</RunMap>');
  tmpList.SaveToFile(RunMapFileName);
  tmpList.Free;
end;

procedure TFrmMain.RefreshDBGrid;
var
  tmpDTArr : array of TDateTime;
  tmpTNameArr : array of string;
  tmpANameArr : array of string;
  tmpDT : TDateTime;
  AccessCount, i, j, k, n, m : integer;
  RootNode, CurNode : IXMLNode;
  myRect: TGridRect;
begin
  //FREE 各值
  for n := 0 to 5 do
    begin
      setlength(IndexInFile[n], 0);
    end;
  setlength(DTArr, 0);
  for i := 0 to 6 do
    begin
      self.StringGrid1.Rows[i].Clear;
    end;
  self.StringGrid1.ColCount := 3;
  self.StringGrid1.RowCount := 3;
  myRect.Left := 1;
  myRect.Top := 1;
  myRect.Right := 1;
  myRect.Bottom := 1;
  self.StringGrid1.Selection := myRect;

  if self.XMLDocument1.Active = true then
    begin
      self.XMLDocument1.Active := false;
    end;
  self.XMLDocument1.FileName := RunMapFileName;
  try
    self.XMLDocument1.Active := true;
    RootNode := self.XMLDocument1.DocumentElement;        //
    AccessCount := RootNode.ChildNodes.Count;      //


    for i := 0 to Length(TKDB)-1 do
      begin
        self.StringGrid1.RowCount := self.StringGrid1.RowCount + 1;
        self.StringGrid1.Cells[0, i+1] := TKDB[i].TName;
      end;

    //初始化StringGrid中第一行的数据,时间值从小到大
    setlength(tmpDTArr, AccessCount);
    setlength(tmpTNameArr, AccessCount);
    setlength(tmpANameArr, AccessCount);
    for i :=0 to AccessCount - 1 do
      begin
        CurNode := RootNode.ChildNodes[i];
        tmpDTArr[i] := StrToDateTime(CurNode.Attributes['RunTime']);
        tmpTNameArr[i] := CurNode.Attributes['TName'];
        tmpANameArr[i] := CurNode.Attributes['AName'];
      end;

    j := 0;
    m := 0;
    while j<>AccessCount do
      begin
        tmpDT := tmpDTArr[0];
        for i := 0 to AccessCount -1 do
          begin
            if tmpDTArr[i] < tmpDT then
              begin
                tmpDT := tmpDTArr[i];
              end;
          end;
       self.StringGrid1.ColCount := self.StringGrid1.ColCount + 1;
       self.DateTimePicker1.DateTime := tmpDT;
       self.StringGrid1.Cells[m+1, 0] := TimeToStr(self.DateTimePicker1.Time);
       setlength(DTArr, m+1);
       DTArr[m] := tmpDT;
       for n := 0 to 5 do
         begin
           setlength(IndexInFile[n], m+1);
         end;
        for i := 0 to AccessCount -1 do
          begin
            if tmpDTArr[i] = tmpDT then
              begin
                k := GetTIndex(tmpTNameArr[i]);
                IndexInFile[k][m] := i+1;
                tmpDTArr[i] := StrToDateTime('2004-1-2 12:00:00');
                self.StringGrid1.Cells[m+1, k+1] := tmpANameArr[i];
                j := j + 1;
              end;
          end;
 //       j := j + 1;
        m := m + 1;
{        tmpDTArr[IndexInFile[j]] := StrToDateTime('2004-1-2 12:00:00');
         self.DateTimePicker1.DateTime := tmpDT;
       tmpStr := RootNode.ChildNodes.Get(IndexInFile[j]).Attributes['TName'];

        tmpStr := RootNode.ChildNodes.Get(IndexInFile[j]).Attributes['AName'];
        if (k >= 0) and (k <= 5) then
          begin
            self.StringGrid1.ColCount := self.StringGrid1.ColCount + 1;
            self.StringGrid1.Cells[j, 0] := TimeToStr(self.DateTimePicker1.Time);
            self.StringGrid1.Cells[j, k+1] := tmpStr;
          end;}
      end;
    SetLength(tmpDTArr, 0);
    SetLength(tmpTNameArr, 0);
    SetLength(tmpANameArr, 0);
  except
    ShowMessage('刷新运行图失败!');
    SetLength(tmpDTArr, 0);
    SetLength(tmpTNameArr, 0);
    SetLength(tmpANameArr, 0);
    exit;
  end;
end;

function TFrmMain.GetTIndex(TName: string): integer;
var
  s : string;
begin
  s := LeftStr(TName, 1);
  try
    result := StrToInt(s) - 1;
  except
    result := -1;
  end;
end;

procedure TFrmMain.InitDBValue;
begin
//1#发射机
  TKDB[0].TName := '1#发射机';                //发射机号
  TKDB[0].AList := TStringList.Create;
  TKDB[0].AList.Add('未使用');             //对应天线号
  TKDB[0].AList.Add('2#天线');             //对应天线号
  TKDB[0].AList.Add('4#天线');
  TKDB[0].AList.Add('6#天线');
  TKDB[0].AList.Add('7#天线');
  TKDB[0].AList.Add('9#天线');
  TKDB[0].AList.Add('11#天线');
  TKDB[0].AList.Add('13#天线');
  SetLength(TKDB[0].Value.value1, 8);
  SetLength(TKDB[0].Value.value2, 8);
  SetLength(TKDB[0].Value.value3, 8);
  SetLength(TKDB[0].Value.value4, 8);

⌨️ 快捷键说明

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