如题!帮帮忙!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not assigned(Form2) then
      begin
        Form2 := TForm2.Create(self);
        Form2.Show;
      end
      else
        begin
          Form2.Free;
          Form2 := Nil;
        end;
    end;
      

  2.   

    最好的方法,可能就是程序启动时首先检测系统分辨率,如果不符合要求,就更改为符合要求的。比如你的分辨率是1024X768,用户是800X600。那就在程序启动的时候把系统分辨率更改。在程序退出的时候再把分辨率修改回原来状态。我觉得这样可能是最好,最完美,最省事的方法了。
    我的方法根据高手的指点定义两个全局变量。SCREENX,SCREENY:INTEGER;
    procedure Tmainwinform.FormCreate(Sender: TObject);
    var
      sx, sy: Integer;
      DevMode: TDeviceMode;
    begin
      sx := GetSystemMetrics(SM_CXSCREEN); //分辨率宽
      sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高
      //用于在程序结束时把分辨率 改回原始状态
      screenx := sx; //分辨率宽
      screeny := sy; //分辨率高
      if (sx <> 1024) and (sy <> 768) then
      begin
        DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
        DevMode.dmPelsWidth := 1024;
        DevMode.dmPelsHeight := 768;
        ChangeDisplaySettings(DevMode,0); //设置新的显示参数
      end;
    程序关闭时把分辨率修改为原来状态:
    procedure Tmainwinform.FormClose(Sender: TObject;
      var Action: TCloseAction);
    var
      sx, sy: Integer;
      DevMode: TDeviceMode;
    begin
             sx := GetSystemMetrics(SM_CXSCREEN); //分辨率宽
             sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高
            if (sx <> screenx) and (sy <> screeny) then
            begin
               DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
               DevMode.dmPelsWidth := screenx;
               DevMode.dmPelsHeight := screeny;
               ChangeDisplaySettings(DevMode,0); //设置新的显示参数
            end;
        actiON:=cafree;
    end;
      

  3.   

    form1.Showing是布尔型的吗?是的。
    贴子贴错地方了,不好意思。
      

  4.   

    var
      hd: THandle;
    begin
      Hd := FindWindow (nil,form.caption);
      if Hd > 0 then
        窗体没关闭
      else
        窗体关闭了;
    end;