本人初学Delphi 请问高手如何使窗口居中,及定义全局变量

解决方案 »

  1.   

    form.position := poMainFormCenter;全局变量
    public
      i : Integer;   // 公有的
    private 
      iLen : Integer; //私有的
      

  2.   

    设置Form的Position属性可以单独建立一个公用单元然后再定一些你需要的变量……
      

  3.   

    下面是一个小程序:自己看吧;
      private
        databasename: string;
        procedure DoEnterAsTab(var Msg: TMsg; var Handled: Boolean); //enter代替tab
        procedure addnewdata;//插入备份记录
        { Private declarations }
      public//全局变量的定义
        databasename1, databasename2, databasename3, databasename4, databasename5:string;
    procedure getdatabasename; //获取数据库名   
        { Public declarations }
      end;var
      backupdata: Tbackupdata;implementationuses U_location, U_backuprecord;{$R *.dfm}procedure Tbackupdata.BitBtn2Click(Sender: TObject);
    begin
      self.Close;
    end;procedure Tbackupdata.DoEnterAsTab(var Msg: TMsg; var Handled: Boolean); //enter代替tab
    begin
      if Msg.Message = WM_KEYDOWN then
        begin
          if (Msg.wParam = VK_RETURN) then
            Keybd_event(VK_TAB, 0, 0, 0);
        end; //if
    end;procedure Tbackupdata.FormCreate(Sender: TObject);
    var
      serverid, databaseusername, databasepassword, servername: string;
    begin
      self.ValueListEditor1.Visible := false;
      panel3.Visible := false;
      self.ValueListEditor1.Strings.LoadFromFile((extractfilepath(application.ExeName) + 'setup.txt'));
      serverid := trim(self.ValueListEditor1.Values['serverid']); //服务器ID
      databasepassword := trim(self.ValueListEditor1.Values['databasepassword']); //数据库密码
      databaseusername := trim(self.ValueListEditor1.Values['databaseusername']); //数据库用户名
      servername := trim(self.ValueListEditor1.Values['servername']);
      ADOConnection1.Connected := false;
      ADOConnection2.Connected := false;
      ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Password=' + trim(databasepassword) + ';Persist Security Info=True;User ID=' + trim(databaseusername) + ';Data Source=' + trim(serverid);
      ADOConnection2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+(extractfilepath(application.ExeName) + '备份记录.mdb')+';Persist Security Info=False';
    self.dxPickEdit2.Items.Clear;
      if trim(self.ValueListEditor1.Values['databasenamez1']) <> '' then //添加数据库名
        self.dxPickEdit2.Items.Add(trim(self.ValueListEditor1.Values['databasenamez1']));
      if trim(self.ValueListEditor1.Values['databasenamez2']) <> '' then //添加数据库名
        self.dxPickEdit2.Items.Add(trim(self.ValueListEditor1.Values['databasenamez2']));
      if trim(self.ValueListEditor1.Values['databasenamez3']) <> '' then //添加数据库名
        self.dxPickEdit2.Items.Add(trim(self.ValueListEditor1.Values['databasenamez3']));
      if trim(self.ValueListEditor1.Values['databasenamez4']) <> '' then //添加数据库名
        self.dxPickEdit2.Items.Add(trim(self.ValueListEditor1.Values['databasenamez4']));
      if trim(self.ValueListEditor1.Values['databasenamez5']) <> '' then //添加数据库名
        self.dxPickEdit2.Items.Add(trim(self.ValueListEditor1.Values['databasenamez5']));
      self.dxPickEdit1.Items.Add(trim(self.ValueListEditor1.Values['servername']));
      self.dxPickEdit1.ItemIndex := 0;
      databasename1 := trim(self.ValueListEditor1.Values['databasename1']); //数据库名
      databasename2 := trim(self.ValueListEditor1.Values['databasename2']); //数据库名
      databasename3 := trim(self.ValueListEditor1.Values['databasename3']); //数据库名
      databasename4 := trim(self.ValueListEditor1.Values['databasename4']); //数据库名
      databasename5 := trim(self.ValueListEditor1.Values['databasename5']); //数据库名
    end;procedure Tbackupdata.dxEdit1KeyPress(Sender: TObject; var Key: Char);
    begin
      Application.OnMessage := DoEnterAsTab;
    end;
      

  4.   

    procedure Tbackupdata.dxButtonEdit1ButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
    begin
      if location = nil then
        location := tlocation.Create(self);
      location.ShowModal;
    end;procedure Tbackupdata.dxPickEdit2Change(Sender: TObject);
    begin
      self.dxButtonEdit1.Text := trim(self.dxPickEdit2.Text) + datetostr(date())+'-'+inttostr(hourof(now))+'-'+inttostr(minuteof(now)) + '.bak';
      location.dxEdit1.Text := trim(backupdata.dxPickEdit2.Text) + datetostr(date())+'-'+inttostr(hourof(now))+'-'+inttostr(minuteof(now)) + '.bak';
      self.Label7.Caption := trim(valuelisteditor1.Values['location']) + '\' + trim(self.dxPickEdit2.Text) + datetostr(date())+'-'+inttostr(hourof(now))+'-'+inttostr(minuteof(now))+ '.bak';
    end;
    procedure Tbackupdata.BitBtn1Click(Sender: TObject);
    var str: string;
      flag: integer;
      NetSource: TNetResource;
      F: TShFileOpStruct;
      ErrInfo: longint;
      m:integer;
      driver:pchar;
      drivername,str1,str2:string;
      i,lenth:integer;
    begin
      lenth:=length(trim(label7.Caption));
       str1:='';str2:='';
       for i:=1 to lenth do begin
         str1:=midstr(trim(label7.Caption),i,1);
         str2:=str2+str1;
         if trim(str1)='\' then
           break;
       end;
       driver:=pchar(str2);//pchar(label7.Caption);
       m:= GetDriveType(driver);
       {case x of
        DRIVE_REMOVABLE: drivername := '可移动驱动器';
        DRIVE_FIXED: drivername := '固定驱动器';
        4: drivername := '网络驱动器';
        5: drivername := 'CD-ROM驱动器';
        6: drivername := '虚拟驱动器';
        Else drivername:= '该驱动器无效';
       end; }
      flag := 0;
      //panel3.Caption:='正在备份数据,请稍候......';
      self.getdatabasename; //获取数据库名
      if ((trim(dxedit1.Text) = trim(ValueListEditor1.Values['username1'])) and (trim(dxedit2.Text) = trim(valuelisteditor1.Values['password1']))) or
        ((trim(dxedit1.Text) = trim(ValueListEditor1.Values['username2'])) and (trim(dxedit2.Text) = trim(valuelisteditor1.Values['password2']))) or
        ((trim(dxedit1.Text) = trim(ValueListEditor1.Values['username3'])) and (trim(dxedit2.Text) = trim(valuelisteditor1.Values['password3']))) then begin //判断密码的正确
          str := 'BACKUP DATABASE ' + databasename + ' TO disk=' + '''' + trim(valuelisteditor1.Values['serverlocation1']) + '\' + trim(self.dxButtonEdit1.Text) + '''' + ' WITH init'; //备份
          with adoquery1 do begin //备份数据库
              // panel3.Caption:='正在备份数据,请稍候......';
              close; sql.Clear;
              sql.Add(str);
              prepared;
              try
                panel3.Visible := true;
                //panel3.Height:=40;
                adoquery1.ExecSQL;
                flag := 1;
                // panel3.Visible := false;
              except
                panel3.Visible := false;
                application.MessageBox('数据库备份失败!', '提示', mb_ok);
              end; //try
            end; //with
          if flag = 1 then begin
              with NetSource do begin
                  dwType := RESOURCETYPE_ANY;
                  lpLocalName := 'x:';
                  // 将远程资源映射到此驱动器
                  lpRemoteName := pchar(trim(self.ValueListEditor1.Values['serverlocation']));
                  // 远程网络资源
                  lpProvider := ''; // 必须赋值,如为空则使用lpRemoteName的值。
                end;
              WnetAddConnection2(NetSource, pchar(trim(valuelisteditor1.Values['sharepassword'])), pchar(trim(valuelisteditor1.Values['shareusername'])),
                //用户名为Guest,口令为Password
                CONNECT_UPDATE_PROFILE);
              panel3.Visible := false;
             if m=3 then begin  //本地磁盘
              F.wnd := Handle;
              F.wFunc := FO_COPY; {操作方式}
              F.pFrom := PCHAR(trim(self.ValueListEditor1.Values['serverlocation']) + '\' + trim(self.dxButtonEdit1.Text)+#0#0);
              F.pTo := PCHAR(trim(self.ValueListEditor1.Values['location'])+'\'+ trim(self.dxButtonEdit1.Text)+#0#0);
              F.fFlags := FOF_NOCONFIRMATION; {操作选项}
              if ShFileOperation(F) <> 0 then
                application.MessageBox('文件拷贝失败!', '提示', mb_ok)
              else begin    //插入备份记录
                self.addnewdata;
              end;
             end// if m=3 then begin
             {else if m=4 then begin  //网络驱动器
              if application.MessageBox('确实要把文件复制到网络磁盘上吗?','提示',mb_okcancel)=1 then begin
              F.wnd := Handle;
              F.wFunc := FO_COPY; {操作方式}
             { F.pFrom := PCHAR(trim(self.ValueListEditor1.Values['serverlocation']) + '\' + trim(self.dxButtonEdit1.Text)+#0#0);
              F.pTo := PCHAR(trim(self.ValueListEditor1.Values['location'])+'\'+ trim(self.dxButtonEdit1.Text)+#0#0);
              F.fFlags := FOF_NOCONFIRMATION; {操作选项}
              {if ShFileOperation(F) <> 0 then
                application.MessageBox('文件拷贝失败!', '提示', mb_ok)
              else begin    //插入备份记录
                self.addnewdata;
              end;
              end;
             end//else if m=4 then begin  //网络驱动器  }
             else
               application.MessageBox(pchar('     当前所指路径不存在!'+#13+#10+'请检查移动硬盘是否已插上或插好!'),'提示');
              WNetCancelConnection2('x:', CONNECT_UPDATE_PROFILE, True);
            end; //if flag=1 then begin
        end
      else begin
          application.MessageBox('用户名或密码不正确,请重新输入!', '提示', mb_ok);
        end;
    end;procedure Tbackupdata.getdatabasename; //获取数据库名
    begin
      if trim(dxpickedit2.Text) = trim(valuelisteditor1.Values['databasenamez1']) then
        databasename := trim(valuelisteditor1.Values['databasename1']);
      if trim(dxpickedit2.Text) = trim(valuelisteditor1.Values['databasenamez2']) then
        databasename := trim(valuelisteditor1.Values['databasename2']);
      if trim(dxpickedit2.Text) = trim(valuelisteditor1.Values['databasenamez3']) then
        databasename := trim(valuelisteditor1.Values['databasename3']);
      if trim(dxpickedit2.Text) = trim(valuelisteditor1.Values['databasenamez4']) then
        databasename := trim(valuelisteditor1.Values['databasename4']);
      if trim(dxpickedit2.Text) = trim(valuelisteditor1.Values['databasenamez5']) then
        databasename := trim(valuelisteditor1.Values['databasename5']);
    end;procedure Tbackupdata.N1Click(Sender: TObject);
    begin
     if frm_backuprecord=nil then
        frm_backuprecord:=tfrm_backuprecord.Create(self);
        frm_backuprecord.Show;
      if trim(self.ValueListEditor1.Values['databasenamez1']) <> '' then //添加数据库名
        frm_backuprecord.dxPickEdit1.Items.Add(trim(self.ValueListEditor1.Values['databasenamez1']));
      if trim(self.ValueListEditor1.Values['databasenamez2']) <> '' then //添加数据库名
        frm_backuprecord.dxPickEdit1.Items.Add(trim(self.ValueListEditor1.Values['databasenamez2']));
      if trim(self.ValueListEditor1.Values['databasenamez3']) <> '' then //添加数据库名
        frm_backuprecord.dxPickEdit1.Items.Add(trim(self.ValueListEditor1.Values['databasenamez3']));
      if trim(self.ValueListEditor1.Values['databasenamez4']) <> '' then //添加数据库名
        frm_backuprecord.dxPickEdit1.Items.Add(trim(self.ValueListEditor1.Values['databasenamez4']));
      if trim(self.ValueListEditor1.Values['databasenamez5']) <> '' then //添加数据库名
        frm_backuprecord.dxPickEdit1.Items.Add(trim(self.ValueListEditor1.Values['databasenamez5']));
    end;procedure Tbackupdata.addnewdata; //插入备份记录
    begin
       with add_query do begin
         close; sql.Clear;
         sql.Add('insert into 数据库备份记录(备份人,数据库名,备份时间,备份路径)values(:a,:b,:c,:d)');
         parameters.ParamByName('a').Value:=trim(backupdata.dxedit1.Text);
         parameters.ParamByName('b').Value:=trim(backupdata.dxpickedit2.Text);
         parameters.ParamByName('c').Value:=now();
         parameters.ParamByName('d').Value:=trim(backupdata.label7.Caption);
         //parameters.ParamByName('e').Value:=trim(drivername);
         prepared;
         execsql;
       end;
    end;end.
      

  5.   

    设置position属性poScreenCenter
    public
      i : Integer;   // 公有的
    private 
      iLen : Integer; //私有的
      

  6.   

    form.position := poScreenCenter;