问题1:已经回答过,响应WM_NCHITTEST消息。问题2:Position := poDesktopCenter;

解决方案 »

  1.   

    同意楼上,响应WM_NCHITTEST消息
      

  2.   

    thank you.you have helped me so much !
     
      

  3.   

    這是我程序調用的一個公共過程, Autocenter可以在 form.show時調用
    我感覺是比較方便的,哈哈哈!!!!
    過程
    unit TOOLS;
    interface
    uses
      Windows, Messages, SysUtils, Classes, Controls, Forms,StdCtrls;
    Procedure Autocenter(form:Tform;Ftop:integer=0);     
    Function Editisnull(EDit:Tedit):boolean;
    Function Strisnull(STr:String):boolean;
    Function Left(Const Str:String;i:integer):String;
    Function right(Const Str:String;i:integer):String;
    Procedure CON_VIEW(ii:integer)  ;   //控件顯示過程implementationuses  main;Procedure  Autocenter(form:Tform;Ftop:integer=0);
    begin
          with form do
               begin
                  left:=(screen.Width-width)  div  2 ;
                  if  Ftop>0  then
                  top:=(screen.height-height)  div  2
                  else
                  top:=Ftop ;
               end;
    end;Function Editisnull(EDit:Tedit):boolean;
    begin
        IF  length(TRIM(edit.text))=0   then
            Result:=True  Else
            Result:=False
    end;Function   Strisnull(STR:String):boolean;
    begin
      If  length(TRim(STR))=0  then
          Result:=True   Else
          Result:=False
    end ;Function Left(Const Str:String;i:integer):String;
    begin
      Result:=Copy(Trim(Str),1,i) ;
    end;Procedure CON_VIEW(ii:integer);
    begin
                //   F_main.LV1        各單位員工列表LV1
                //   F_main.Panel7     員工基本資料處理
                //   F_main.Lv2        上月投保人名單
       case ii of
         0: begin                     //所有員工列表
                   F_main.LV1.Visible:=True ;
                   F_main.Panel7.Visible:=False ;
            end ;
         1: begin                     //員工基本資料處理
                   F_main.LV1.Visible:=False ;
                   F_main.Panel7.Visible:=True ;
            end ;
       end;
    end ;Function right(Const Str:String;i:integer):String;
    begin
     Result:=Copy(Trim(Str),length(Trim(Str))-i+1,i) ;
    end;
    end.主程序
    unit MAIN;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls, ToolWin, StdCtrls, Buttons, ExtCtrls, Menus, inifiles, ActnList,
      StdActns, ImgList, fcClearPanel, fcButtonGroup, fcOutlookBar, fcButton,
      fcImgBtn, fcShapeBtn, TFlatEditUnit, Mask, Db, DBTables, Grids, DBGrids,
      fcStatusBar, shellapi, TFlatSpeedButtonUnit, TFlatRadioButtonUnit, jpeg,
      TFlatComboBoxUnit;
    type
      PBase = ^Base;
      Base = record
        Pemp_id: string; //工號
        Pname: string; //姓名
        PSex: string; //性別
        Pdept: string; //部門
        Piden: string; //身份証號
        Pduty: string; //職稱
        PPho: string;
      end;type
      TF_main = class(TForm)
        MainMenu1: TMainMenu;
        F1: TMenuItem;
        E1: TMenuItem;
        R1: TMenuItem;
        V1: TMenuItem;
        H1: TMenuItem;
        F2: TMenuItem;
        O1: TMenuItem;
        N1: TMenuItem;
        P1: TMenuItem;
        P2: TMenuItem;
        N2: TMenuItem;
        X1: TMenuItem;
        N3: TMenuItem;
        N4: TMenuItem;
        N5: TMenuItem;
        N6: TMenuItem;
        N7: TMenuItem;
        N8: TMenuItem;
        F3: TMenuItem;
        N9: TMenuItem;
        N10: TMenuItem;
        N11: TMenuItem;
        N12: TMenuItem;
        N13: TMenuItem;
        N14: TMenuItem;
        C1: TMenuItem;
        E2: TMenuItem;
        N15: TMenuItem;
        N16: TMenuItem;
        N17: TMenuItem;
        Al1: TActionList;
        EditCopy1: TEditCopy;
        EditCut1: TEditCut;
        EditDelete1: TEditDelete;
        EditPaste1: TEditPaste;
        EditSelectAll1: TEditSelectAll;
        EditUndo1: TEditUndo;
        U1: TMenuItem;
        N18: TMenuItem;
        IL1: TImageList;
        Panel1: TPanel;
        Splitter1: TSplitter;
        Panel2: TPanel;
        Panel3: TPanel;
        Label1: TLabel;
        Panel4: TPanel;
        SBT1: TSpeedButton;
        SBT4: TSpeedButton;
        SBT5: TSpeedButton;
        Bevel1: TBevel;
        DataSource1: TDataSource;
        DEPT1: TQuery;
        Table1: TTable;
        OB1: TfcOutlookBar;
        OSB1: TfcShapeBtn;
        TV1: TTreeView;
        SB1: TfcStatusBar;
        D_MXB: TQuery;
        Panel5: TPanel;
        Splitter2: TSplitter;
        Panel6: TPanel;
        Image1: TImage;
        Label2: TLabel;
        Label3: TLabel;
        Memo1: TMemo;
        FlatSpeedButton1: TFlatSpeedButton;
        PopupMenu1: TPopupMenu;
        N19: TMenuItem;
        N20: TMenuItem;
        N21: TMenuItem;
        LV1: TListView;
        L_G_IMG: TImageList;
        L_M_IMG: TImageList;
        Panel7: TPanel;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        Bevel2: TBevel;
        Database1: TDatabase;
        Image2: TImage;
        Label8: TLabel;
        FE2: TFlatEdit;
        FE3: TFlatEdit;
        FE4: TFlatEdit;
        RD1: TFlatRadioButton;
        rd2: TFlatRadioButton;
        LB1: TLabel;
        FE5: TFlatEdit;
        Label11: TLabel;
        D1: TMenuItem;
        Label12: TLabel;
        Bevel3: TBevel;
        SBT2: TSpeedButton;
        Panel9: TPanel;
        PICT1: TImage;
        Label13: TLabel;
        CB1: TFlatComboBox;
        FE6: TFlatEdit;
        OSB2: TfcShapeBtn;
        OSB3: TfcShapeBtn;
        TV2: TTreeView;
        TV3: TTreeView;
        SBT7: TSpeedButton;
        Bevel4: TBevel;
        SBT8: TSpeedButton;
        Query1: TQuery;
        Label14: TLabel;
        Tv2_Q1: TQuery;
        TV2_Q2: TQuery;
        LV2: TListView;
        SB_1: TSpeedButton;
        SB_4: TSpeedButton;
        SB_3: TSpeedButton;
        SB_2: TSpeedButton;
        T_GLF_GS: TTable;
        T_GLF_ST: TTable;
        GLF_II: TTable;
        SpeedButton1: TSpeedButton;
        Bevel5: TBevel;
        SpeedButton2: TSpeedButton;
        SpeedButton3: TSpeedButton;
        SpeedButton4: TSpeedButton;    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
        procedure FormShow(Sender: TObject);
        procedure FormActivate(Sender: TObject);
        procedure X1Click(Sender: TObject);
        procedure TV1Change(Sender: TObject; Node: TTreeNode);
        procedure OSB2Enter(Sender: TObject);
        procedure OSB1Click(Sender: TObject);
        procedure OSB2Click(Sender: TObject);
        procedure OSB3Click(Sender: TObject);
        procedure C1Click(Sender: TObject);
        procedure E2Click(Sender: TObject);
        procedure FlatSpeedButton1Click(Sender: TObject);
        procedure N19Click(Sender: TObject);
        procedure N21Click(Sender: TObject);
        procedure SB_1Click(Sender: TObject);
        procedure SB_2Click(Sender: TObject);
        procedure SB_3Click(Sender: TObject);
        procedure SB_4Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure LV1DblClick(Sender: TObject);
        procedure Panel8Click(Sender: TObject);
        procedure FE4Change(Sender: TObject);
        procedure FE3Change(Sender: TObject);
        procedure LV1Change(Sender: TObject; Item: TListItem;
          Change: TItemChange);
        procedure FE5Change(Sender: TObject);
        procedure FE5Exit(Sender: TObject);
        procedure TV1Expanded(Sender: TObject; Node: TTreeNode);
        procedure SBT5Click(Sender: TObject);
        procedure SBT4Click(Sender: TObject);
        procedure SBT2Click(Sender: TObject);
        procedure FE1Exit(Sender: TObject);
        procedure CB1Change(Sender: TObject);
        procedure H1Click(Sender: TObject);
        procedure TV2Change(Sender: TObject; Node: TTreeNode);
        procedure OB1Change(ButtonGroup: TfcCustomButtonGroup; OldSelected,
          Selected: TfcButtonGroupItem);
        procedure LV2Change(Sender: TObject; Item: TListItem;
          Change: TItemChange);
        procedure SBT7Click(Sender: TObject);
        procedure TV2Expanded(Sender: TObject; Node: TTreeNode);
        procedure SpeedButton2Click(Sender: TObject);
        procedure SBT8Click(Sender: TObject);
        procedure SpeedButton3Click(Sender: TObject);
        procedure SpeedButton4Click(Sender: TObject);
      private
        procedure LoadNodes; //顯示TV1的數據分布
        procedure LoadNodes2; //顯示TV2的數據分布
        procedure Shownodes; //顯示狀態欄
        { Private declarations }
      public    { Public declarations }
      end;var
      F_main: TF_main;
      APP: TApplication;
      Company: string;
      Datapath: string;
      Pictpath: string;
      INIF: TINIFILE;
      Tips: integer;
      LVB1: integer; //當前Listview列表情況記錄
      TV1EXIT: integer;
      LV1_changer: integer; //列表更改  LV1
      T_Parent: string; //樹狀列表父類
      Datamonth: string;
      Datamonth1: string;
      Sinit: string;
    const Msg1 = '系統提示';implementation
    uses tools, Reg, WELCOME, passwd, INIT, print, SQL;{$R *.DFM}procedure TF_main.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      if MessageBox(Application.handle, chr(13) + '請問您是否確認要退出工傷保險系統?' +
        chr(13) + chr(13), Msg1, Mb_YESNO + mb_iconquestion) = IDNO then
        abort else
      begin
        TABle1.close;
        DEpt1.Active := False;
        D_MXB.Active := False;
        T_Glf_GS.Active:=False;
        T_Glf_St.Active:=False;
        Database1.Connected := False;
      end;
    end;procedure TF_main.LoadNodes; //第一個目錄樹
    var TN: TTreeNode;
      VtN: TTreenode;
      WS, WS1: string;
      P_Pbase: Pbase;
      Img: integer;
    begin
      Dept1.First;
      while not DEPT1.Eof do
      begin
        tv1.Update;
        WS := DEpt1.fieLdbyname('Pdept').asstring;
        Tn := Tv1.Items.Add(nil, Ws);
        Tn.SelectedIndex := 28;
        D_MXB.Close;
        D_MXB.ParamByName('Value1').asstring := WS;
        D_MXB.Open;
        D_MXB.First;
        while not D_MXB.eof do
        begin
          NEW(P_Pbase);
          WS1 := D_MXB.fieldbyname('Pname').asstring;
          P_Pbase^.Pemp_id := D_MXB.fieldbyname('PEmp_id').asstring;
          P_Pbase^.Pdept := D_MXB.fieldbyname('Pdept').asstring;
          P_Pbase^.Piden := D_MXB.fieldbyname('Piden').asstring;
          P_Pbase^.Pduty := D_MXB.fieldbyname('Pduty').asstring;
          P_Pbase^.Pname := D_MXB.fieldbyname('Pname').asstring;
          P_Pbase^.PSex := D_MXB.fieldbyname('PSex').asstring;
          P_Pbase^.PPho := D_MXB.fieldbyname('PPho').asstring;
          if (Right(P_Pbase^.Piden, 1) > '9') or (Right(P_Pbase^.Piden, 1) < '0') then
            img := 26 else
            if odd(STRTOINT(Right(P_Pbase^.Piden, 1))) then
              img := 24 else
              img := 25;
          VTn := TV1.Items.AddChildObject(TN, WS1, P_PBase);
          Vtn.ImageIndex := img;
          VTn.SelectedIndex := 27;
          D_MXB.Next;
        end;
        DEPT1.Next;
      end;
    end;procedure TF_main.LoadNodes2; //第二個目錄樹
    var TN: TTreeNode;
      VtN: TTreenode;
      WS, WS1: string;
      P_Pbase: Pbase;
      Img: integer;
    begin
      TV2_Q1.ParamByName('Value1').asstring := Datamonth;
      TV2_Q1.Open;
      if TV2_Q1.RecordCount < 1 then
        Exit;
      TV2_Q1.First;
      while not TV2_Q1.Eof do
      begin
        WS := TV2_Q1.fieldbyname('GS05').Asstring;
        TN := TV2.Items.Add(nil, WS);
        Tn.SelectedIndex := 28;
        TV2_Q2.Active := False;
        TV2_Q2.ParamByName('Value1').asstring := WS;
        TV2_Q2.ParamByName('Value2').asstring := DataMonth;
        TV2_Q2.open;
        TV2_Q2.First;
        while not TV2_Q2.eof do
        begin
          NEW(P_Pbase);
          WS1 := TV2_Q2.fieldbyname('GS02').asstring;
          P_Pbase^.Pemp_id := TV2_Q2.fieldbyname('GS01').asstring;
          P_Pbase^.Pdept := TV2_Q2.fieldbyname('GS05').asstring;
          P_Pbase^.Piden := TV2_Q2.fieldbyname('GS04').asstring;
          P_Pbase^.Pduty := TV2_Q2.fieldbyname('GS06').asstring;
          P_Pbase^.Pname := TV2_Q2.fieldbyname('GS02').asstring;
          if TV2_Q2.fieldbyname('GS03').asstring = '1' then
          begin
            P_Pbase^.PSex := '男';
            img := 24;
          end else
          begin
            P_Pbase^.PSex := '女';
            img := 25;
          end;
          VTn := TV2.Items.AddChildObject(TN, WS1, P_PBase);
          Vtn.ImageIndex := img;
          VTn.SelectedIndex := 27;
          TV2_Q2.Next;
        end;
        TV2_Q1.Next;
      end;
    end;
    procedure TF_main.FormShow(Sender: TObject);
    var wdm: string;
      I: integer;
    begin
      Shortdateformat := 'yyyy/mm/dd';
      TV1EXIT := 1;
      App := Tapplication.Create(self);
      Application.HintColor := Cllime;
      wdm := Extractfilepath(Application.exename);
      Dept1.First;
      while not Dept1.Eof do
      begin
        Cb1.Items.Add(Dept1.fields[0].asstring);
        Dept1.Next;
      end;  if not FileExists(wdm + 'GLF_GS.INI') then //初始化文件是否存在
      begin
        Messagebox(App.Handle, '檔案 GLF_GS.INI 文件不存在,初始化失敗!',
          Msg1, MB_OK + MB_ICONSTOP);
        App.Terminate;
      end;
      Inif := Tinifile.Create(wdm + 'GLF_GS.INI');
      Company := Inif.ReadString('MAIN', 'COMPANY', '');
      DATAPATH := Inif.ReadString('DATA', 'DATAPATH', '');
      PictPath := Inif.ReadString('PICT', 'PICTPATH', '');
      if (length(TRim(Inif.ReadString('MAIN', 'COMPANY', ''))) = 0) or
        (length(TRim(Inif.ReadString('DATA', 'DATAPATH', ''))) = 0)
        then //沒有注冊
        if Messagebox(App.Handle, '系統還沒有進行初始化,您是否要進行系統初始化?',
          Msg1, MB_YESNO + MB_ICONQUESTION) = ID_YES then
        begin
          F_reg := TF_reg.create(self);
          F_Reg.showmodal;
          F_Reg.Free;
        end else
          App.Terminate;
      F_main.Caption := Company + '工傷保險系統';
      Autocenter(F_main);
      LoadNodes;
      begin
        Memo1.Lines.LoadFromFile('TIPS.TXT');
        Randomize;
        for i := 0 to memo1.Lines.Count - 1 do
          Tips := Random(i);
        label3.Caption := memo1.Lines.Strings[Tips];
      end;
      F_welcome.free;
    end;procedure TF_main.FormActivate(Sender: TObject);
    begin
      F_Passwd := TF_passwd.Create(Self);
      F_passwd.ShowModal;
      Datamonth := F_passwd.fe1.text;
      F_passwd.free;
      Label14.Caption := Copy(Datamonth, 1, 4) + '年' + copy(Datamonth, 5, 2) + '月';
      with GLF_II do //查找數據處理日期
        if Findkey([Datamonth]) then
        begin
          Sinit := Glf_ii.Fields[1].AsString;
          Glf_ii.Prior;
          DataMonth1 := Glf_ii.Fields[0].AsString;
          Glf_ii.Next;
        end else
        begin
          MessageBox(Application.handle, '系統錯誤!' + chr(13), '系統信息', mb_ok +
            mb_iconinformation);
          Application.Terminate;
        end;
      if Sinit = 'F' then //此月數據是否有初始化
      begin
        F_Init:=TF_Init.Create(Self) ;
        F_Init.showmodal;
        F_init.Free;
      end;
      if (Strisnull(Inif.ReadString('MAIN', 'COMPANY', ''))) or
        (Strisnull(Inif.ReadString('DATA', 'DATAPATH', ''))) then
      begin
        Messagebox(Application.handle, '系統初始化沒有成功,請初始化系統!',
          Msg1, MB_OK + MB_ICONINFORMATION);
        App.Terminate;
      end;
      Sb1.Panels[1].Text := Ob1.ActivePage.Caption;
      Loadnodes2; //調用上月投保人員名單
    end;procedure TF_main.X1Click(Sender: TObject);
    begin
      Close;
    end;procedure TF_main.TV1Change(Sender: TObject; Node: TTreeNode);
    var i: integer;
      LVL: TListItem;
      P_Pbase: Pbase;
    begin
      Sbt4.Enabled := False;
      Sbt5.Enabled := False;
      with Tv1.selected do
        case Level of
          0: begin
              CON_view(0);
              Sb1.Panels[2].Text := '部門:';
              Sb1.Panels[3].Text := Text;
              Shownodes;
              LV1.Items.Clear;
              for i := 0 to Node.Count - 1 do
              begin
                Lv1_Changer := 0;
                LVL := lv1.Items.Add;
                LvL.Caption := Copy(Node.Item[i].Text, 1, 10);
                P_Pbase := Node.Item[i].Data;
                LvL.SubItems.Add(P_Pbase^.Pemp_id);
                LvL.SubItems.Add(P_Pbase^.PSex);
                LvL.SubItems.Add(P_Pbase^.Pdept);
                LvL.SubItems.Add(P_Pbase^.pduty);
                LvL.SubItems.Add(P_Pbase^.piden);
              end;
              LV1_changer := 1;
            end;
          1: begin
              if node.Parent.Text <> T_parent then
              begin
                Node.Parent.Selected;
                Node.Parent.Expand(True);
              end;
              SBT2.Enabled := True;
              if Panel7.Visible = False then
                con_view(1);
              P_Pbase := Node.Data;
              Fe2.Text := P_Pbase^.Pemp_id;
              Fe3.Text := P_Pbase^.Pname;
              Fe4.Text := P_Pbase^.Pduty;
              Fe6.Text := P_Pbase^.Pdept;
              if fileexists(pictpath + '\' + P_Pbase^.PPho) then
                Pict1.Picture.LoadFromFile(pictpath + '\' + P_Pbase^.PPho) else
                Pict1.Picture := nil;
              Fe5.Text := P_Pbase^.Piden;
              if P_Pbase^.PSex = '女' then
                Rd1.Checked := True else
                Rd2.Checked := True;
              if length(Fe5.Text) = 18 then
                Lb1.Caption := Copy(Fe5.text, 7, 4) + '年' + Copy(Fe5.text, 11, 2) + '月';
              if length(Fe5.Text) = 15 then
                Lb1.Caption := '19' + Copy(Fe5.text, 7, 2) + '年' + Copy(Fe5.text, 9, 2) + '月';
            end;
        end;
    end;procedure TF_main.OSB2Enter(Sender: TObject);
    begin
      Sb1.Panels[1].Text := OSB2.Caption;
    end;procedure TF_main.OSB1Click(Sender: TObject);
    begin
      Sb1.Panels[1].Text := Osb1.Caption;
      lv2.Visible := False;
      LV1.Visible := True;
      Sbt7.Enabled := False;
    end;procedure TF_main.OSB2Click(Sender: TObject);
    begin
      Sb1.Panels[1].Text := Osb2.Caption;
      LV1.Visible := False;
      LV2.Visible := True;
      Sbt8.Enabled := False;
    end;procedure TF_main.OSB3Click(Sender: TObject);
    begin
      Sb1.Panels[1].Text := Osb3.Caption;
    end;procedure TF_main.Shownodes;
    begin
      Dept1.First;
      with Dept1 do
      begin
        dept1.Locate('PDept', TV1.selected.text, [loCaseInsensitive]);
        Sb1.Panels[4].Text := '編制人數:';
        Sb1.Panels[5].Text := Dept1.Fields[1].AsString + ' 人';
      end;
    end;procedure TF_main.C1Click(Sender: TObject);
    begin
      shellexecute(Application.handle, 'open', 'calc.exe', '', '', SW_SHOWNORMAL);
    end;procedure TF_main.E2Click(Sender: TObject);
    begin
      shellexecute(Application.handle, 'open', 'mailto:', '', '', SW_SHOWNORMAL);
    end;procedure TF_main.FlatSpeedButton1Click(Sender: TObject);
    begin
      if tips >= Memo1.Lines.Count - 1 then
        Tips := 0 else
        Tips := Tips + 1;
      Label3.Caption := memo1.Lines.Strings[Tips];
    end;procedure TF_main.N19Click(Sender: TObject);
    begin
      TV1.Selected.Expand(true);
    end;procedure TF_main.N21Click(Sender: TObject);
    begin
      Tv1.Selected.Collapse(True);
    end;procedure TF_main.SB_1Click(Sender: TObject);
    begin
      if lv1.Visible = True then
      begin
        Con_view(0);
        LV1.ViewStyle := vsReport;
      end;
      if lv2.Visible = True then
        LV2.ViewStyle := vsReport;
    end;procedure TF_main.SB_2Click(Sender: TObject);
    begin
      if lv1.Visible = True then
      begin
        Con_view(0);
        LV1.ViewStyle := vsList;
      end;
      if lv2.Visible = True then
        LV2.ViewStyle := vsList;
    end;procedure TF_main.SB_3Click(Sender: TObject);
    begin
      if lv1.Visible = True then
      begin
        Con_view(0);
        LV1.ViewStyle := VSsmallicon;
      end;
      if lv2.Visible = True then
        LV2.ViewStyle := vsSmallicon;
    end;procedure TF_main.SB_4Click(Sender: TObject);
    begin
      if lv1.Visible = True then
      begin
        Con_view(0);
        lv1.ViewStyle := vsIcon;
      end;
      if lv2.Visible = True then
        LV2.ViewStyle := vsicon;
    end;procedure TF_main.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Dept1.close;
      D_MXB.Close;
      TABle1.close;
    end;procedure TF_main.LV1DblClick(Sender: TObject);
    var i: Integer;
    begin
      if LV1.SelCount < 1 then
        MessageBox(Application.handle, '對不起,您還沒有選擇記錄!' + chr(13),
          Msg1, MB_ok + MB_ICONINFORMATION) else
      begin
        if lv1.SelCount > 1 then
          Exit;
        for i := 0 to Tv1.Items.Count - 1 do
          if Tv1.Items.Item[I].Text = lv1.Selected.Caption then
          begin
            TV1.Items.Item[i].Selected := True;
            Exit;
          end;
      end;
    end;procedure TF_main.Panel8Click(Sender: TObject);
    begin
      close;
    end;procedure TF_main.FE4Change(Sender: TObject);
    begin
      if FE4.Modified = True then
      begin
        SBT5.Enabled := True;
        SBt4.Enabled := True;
      end;
    end;procedure TF_main.FE3Change(Sender: TObject);
    begin
      if Fe3.Modified then
      begin
        SBT5.Enabled := True;
        SBT4.Enabled := True;
      end;
    end;procedure TF_main.LV1Change(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    begin
      if LV1.SelCount = 1 then
      begin
        SBt2.Enabled := True;
        SBT8.Enabled := True
      end else
      begin
        SBT2.Enabled := False;
        SBT8.Enabled := False;
      end;
    end;procedure TF_main.FE5Change(Sender: TObject);
    begin
      if Fe5.Modified then
      begin
        SBT5.Enabled := True;
        SBT4.Enabled := True;
        Lb1.Caption := '';
      end;
    end;procedure TF_main.FE5Exit(Sender: TObject);
    begin
      if (length(Fe5.Text) <> 18) and (length(Fe5.Text) <> 15) then
      begin
        MessageBox(Application.handle, '對不起,身份証號長度應為15或18位!' +
          Chr(13), Msg1, MB_OK + MB_ICONINFORMATION);
        Fe5.SetFocus;
      end else
      begin
        if length(Fe5.Text) = 15 then
          Lb1.Caption := '19' + Copy(Fe5.text, 7, 2) + '年' +
            Copy(Fe5.text, 9, 2) + '月' else
          Lb1.Caption := Copy(Fe5.text, 7, 4) + '年' +
            Copy(Fe5.text, 11, 2) + '月';
      end;
    end;procedure TF_main.TV1Expanded(Sender: TObject; Node: TTreeNode);
    var P_Pbase: Pbase;
      i: integer;
      LVL: TListitem;
    begin
      T_Parent := Node.Text;
      LV1.Items.Clear;
      for i := 0 to Node.Count - 1 do
      begin
        Lv1_Changer := 0;
        LVL := lv1.Items.Add;
        LvL.Caption := Copy(Node.Item[i].Text, 1, 10);
        P_Pbase := Node.Item[i].Data;
        LvL.SubItems.Add(P_Pbase^.Pemp_id);
        LvL.SubItems.Add(P_Pbase^.PSex);
        LvL.SubItems.Add(P_Pbase^.Pdept);
        LvL.SubItems.Add(P_Pbase^.pduty);
        LvL.SubItems.Add(P_Pbase^.piden);
        Con_view(0);
        LV1.ViewStyle := Vsreport;
      end;
    end;procedure TF_main.SBT5Click(Sender: TObject);
    var P_Pbase: Pbase;
    begin
      if Cb1.Text = '' then
        MessageBox(Application.handle, '真不好意思,單位還沒有選擇!' +
          Chr(13), Msg1, MB_OK + MB_ICONINFORMATION);
      Fe5.SetFocus;
      Exit;
      if (Length(Fe5.text) <> 15) and (Length(Fe5.text) <> 18) then
      begin
        MessageBox(Application.handle, '對不起,身份証號長度應為15或18位!' +
          Chr(13), Msg1, MB_OK + MB_ICONINFORMATION);
        Fe5.SetFocus;
        Exit;
      end else
      begin
        Table1.FindKey([Fe2.Text]);
        Table1.Edit;
        Table1.FieldByName('Piden').Value := Fe5.Text;
        Table1.FieldByName('Pduty').value := Fe4.Text;
        if Rd1.Checked then
          Table1.FieldByName('Psex').Value := '女' else
          Table1.FieldByName('Psex').Value := '男';
        Table1.FieldByName('Pduty').value := Fe4.Text;
        Table1.FieldByName('Pdept').value := Fe6.Text;
        Table1.Post;
        P_Pbase := TV1.Selected.Data;
        P_Pbase^.Piden := Fe5.Text;
        P_Pbase^.Pduty := Fe4.Text;
        P_Pbase^.Pdept := Fe6.Text;
        P_Pbase^.PSex := Table1.FieldByName('Psex').Value;
        Table1.Refresh;
        Tv1.SetFocus;
      end;
    end;procedure TF_main.SBT4Click(Sender: TObject);
    var P_Pbase: Pbase;
    begin
      P_Pbase := Tv1.Selected.Data;
      Fe4.Text := P_Pbase^.Pduty;
      Fe5.Text := P_Pbase^.Piden;
      Fe6.Text := P_Pbase^.Pdept;
      TV1.SetFocus;
    end;procedure TF_main.SBT2Click(Sender: TObject);
    begin
      if Messagebox(Application.handle, '請確認您是否真要刪除此人?' +
        chr(13), Msg1, MB_YESNO + MB_ICONQUESTION) = IDYES then
      begin
        TAble1.FindKey([Tv1.Selected.Text]);
        TAble1.Delete;
        Tv1.Selected.Delete;
        TV1.Update;
      end;
    end;procedure TF_main.FE1Exit(Sender: TObject);
    begin
      Dept1.First;
      while not Dept1.Eof do
      begin
        Cb1.Items.Add(Dept1.Fields[0].AsString);
        Dept1.Next;
      end;
    end;procedure TF_main.CB1Change(Sender: TObject);
    begin
      SBT5.Enabled := True;
      SBT4.Enabled := True;
      Fe6.Text := CB1.Text;
    end;procedure TF_main.H1Click(Sender: TObject);
    begin
      Shellabout(Application.handle, '工 傷 保 險 系 統', chr(13) +
        '段志杰提醒您:版權所有,[email protected]',
        Application.Icon.Handle);
    end;procedure TF_main.TV2Change(Sender: TObject; Node: TTreeNode);
    var LVI: Tlistitem;
      i: integer;
      P_Pbase: Pbase;
    begin
      case node.Level of
        0: begin
            with TV2_Q1 do
            begin
              TV2_Q1.Locate('GS05', TV2.selected.text, [loCaseInsensitive]);
              Sb1.Panels[4].Text := '投保人數:';
              Sb1.Panels[5].Text := TV2_Q1.Fields[1].AsString + ' 人';
              Lv2.Items.Clear;
              for i := 0 to Node.Count - 1 do
              begin
                P_Pbase := Node.Item[i].Data;
                LVI := LV2.Items.Add;
                LVi.Caption := P_Pbase^.pname;
                Lvi.SubItems.Add(P_Pbase^.Pemp_id);
                Lvi.SubItems.Add(P_Pbase^.PSex);
                Lvi.SubItems.Add(P_Pbase^.Pdept);
                Lvi.SubItems.Add(P_Pbase^.Pduty);
                Lvi.SubItems.Add(P_Pbase^.Piden);
                if P_Pbase^.PSex = '男' then
                  Lvi.ImageIndex := 2 else
                  Lvi.ImageIndex := 1;
              end;
            end;
          end;
        1: begin
          end;
      end;
    end;procedure TF_main.OB1Change(ButtonGroup: TfcCustomButtonGroup; OldSelected,
      Selected: TfcButtonGroupItem);
    begin
      case selected.Index of
        1: begin
            Lv2.Visible := False;
            LV1.Visible := True;
          end;
        2: begin
            Lv1.Visible := False;
            LV2.Visible := True;
          end;
      end;
    end;procedure TF_main.LV2Change(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    begin
      if Lv2.SelCount > 0 then
        Sbt7.Enabled := True else
        Sbt7.Enabled := False;
    end;procedure TF_main.SBT7Click(Sender: TObject);
    var i: integer;
      St: string;
    begin
      i := 0;
      while i < Lv2.Items.Count do //在數據庫中刪除
      begin
        if Lv2.Items[i].Selected then
        begin
          St := Lv2.Items[i].SubItems.Strings[0];
          if T_GLF_St.Locate('GS01;GS08', VarArrayOf([St, Datamonth]), []) then
          begin
            T_GLF_GS.Append;
            T_GLF_GS.Fields[0].Value := T_GLF_ST.Fields[0].Value;
            T_GLF_GS.Fields[1].Value := T_GLF_ST.Fields[1].Value;
            T_GLF_GS.Fields[2].Value := T_GLF_ST.Fields[2].Value;
            T_GLF_GS.Fields[3].Value := T_GLF_ST.Fields[3].Value;
            T_GLF_GS.Fields[4].Value := T_GLF_ST.Fields[4].Value;
            T_GLF_GS.Fields[5].Value := T_GLF_ST.Fields[5].Value;
            T_GLF_GS.Fields[6].Value := T_GLF_ST.Fields[6].Value;
            T_GLF_GS.Fields[7].Value := DataMonth;
            T_GLF_GS.Fields[8].Value := '0';
            T_GLF_GS.Fields[9].Value := T_GLF_ST.Fields[9].Value;
            T_GLF_GS.Fields[10].Value := T_GLF_ST.Fields[10].Value;
            T_GLF_GS.Fields[11].Value := T_GLF_ST.Fields[11].Value;
            T_GLF_GS.Post;
            T_GLF_St.Delete;
            LV2.Items.Delete(I);
    {        if TV2.Selected.Level = 1 then
    //          TV2.Items.Delete(Tv2.Selected.Item[i]);
              TV2.Selected.Delete
            else
            begin
              TV2.Selected.Parent.Expand(true);
              Tv2.Selected.Parent.Selected:=True ;
              Tv2.Selected.Item[i].Delete ;
            end;  }
          end;
        end else
          inc(i);
      end;
      T_GLF_St.Refresh;
      T_GLF_GS.Refresh;
      LV2.update;
      TV2.Update;
    end;
           {        if Tv2.Selected.Level = 0 then
              TV2.Items.Delete(Tv2.Selected.item[i]) else
            begin
              Tv2.Selected.Parent.Selected := True;
              TV2.Items.Delete(Tv2.Selected.item[i]);
            end; }
    procedure TF_main.TV2Expanded(Sender: TObject; Node: TTreeNode);
    var P_Pbase: Pbase;
      i: integer;
      LVL: TListitem;
    begin
      Node.Selected := True;
      T_Parent := Node.Text;
      LV1.Items.Clear;
      for i := 0 to Node.Count - 1 do
      begin
        Lv1_Changer := 0;
        LVL := lv1.Items.Add;
        P_Pbase := Node.Item[i].Data;
        LvL.Caption := P_Pbase^.Pname;
        LvL.SubItems.Add(P_Pbase^.Pemp_id);
        LvL.SubItems.Add(P_Pbase^.PSex);
        LvL.SubItems.Add(P_Pbase^.Pdept);
        LvL.SubItems.Add(P_Pbase^.pduty);
        LvL.SubItems.Add(P_Pbase^.piden);
        LV2.ViewStyle := Vsreport;
      end;end;procedure TF_main.SpeedButton2Click(Sender: TObject);
    begin
      Close;
      Application.Terminate;
    end;procedure TF_main.SBT8Click(Sender: TObject);
    var St: string;
    begin
      St := LV1.Selected.SubItems.Strings[0];
      if T_GLF_GS.Locate('GS01;GS08', VarArrayOf([St, Datamonth]), []) then
      begin
        if T_GLF_Gs.Fields[8].AsString = '0' then
        begin
          MessageBox(Application.handle, Pchar('工號:' + T_GLF_Gs.Fields[0].AsString +
            ' 姓名:' + T_GLF_Gs.Fields[1].AsString + '已經存在於' + Chr(13) + Chr(13) +
            Label14.caption + '停保名單中,不能新增!' + chr(13)),
            '系統提示', MB_OK + MB_ICONSTOP);
          Exit;
        end else
        begin
          MessageBox(Application.handle, Pchar('工號:' + T_GLF_Gs.Fields[0].AsString +
            ' 姓名:' + T_GLF_Gs.Fields[1].AsString + '已經存在於' + Chr(13) + Chr(13) +
            Label14.caption + '新增名單中,不能新增!' + chr(13)),
            '系統提示', MB_OK + MB_ICONSTOP);
          Exit;
        end;
      end
      else begin
        if T_GLF_St.Locate('GS01;GS08', VarArrayOf([St, Datamonth]), []) then
        begin
          MessageBox(Application.handle, Pchar('工號:' + T_GLF_St.Fields[0].AsString +
            ' 姓名:' + T_GLF_ST.Fields[1].AsString + '  已經存在於' + Chr(13) + Chr(13) +
            '上月投保名單中,不能新增!' + chr(13)),
            '系統提示', MB_OK + MB_ICONSTOP);
          Exit;
        end else
        begin
          with Table1 do
            if Findkey([St]) then
            begin
              T_GLF_GS.Append;
              T_GLF_GS.Fields[0].Value := Table1.fieldbyname('Pemp_id').Asstring;
              T_GLF_GS.Fields[1].Value := Table1.fieldbyname('Pname').Asstring;
              if Table1.fieldbyname('Psex').Asstring = '男' then
                T_GLF_GS.Fields[2].Value := '1'
              else
                T_GLF_GS.Fields[2].Value := '2';
              T_GLF_GS.Fields[3].Value := Table1.fieldbyname('piden').Asstring;
              T_GLF_GS.Fields[4].Value := Table1.fieldbyname('pdept').Asstring;
              T_GLF_GS.Fields[5].Value := Table1.fieldbyname('pduty').Asstring;
              T_GLF_GS.Fields[7].Value := DataMonth;
              T_GLF_GS.Fields[8].Value := '1';
              T_GLF_GS.Fields[9].Value := '2';
              T_GLF_GS.Fields[10].Value := '4';
              T_GLF_GS.Fields[11].Value := Company;
              T_GLF_GS.Post;
              T_GLF_gs.Refresh;
            end else
              Showmessage('NOT  found');
        end;
      end;
    end;procedure TF_main.SpeedButton3Click(Sender: TObject);
    begin
      F_print := TF_print.create(Self);
      F_Print.Showmodal;
      F_Print.Free;
    end;procedure TF_main.SpeedButton4Click(Sender: TObject);
    begin
       F_SQL:=TF_SQL.Create(Self);
       F_SQL.Showmodal ;
       F_SQL.Free ;
    end;end.