因为需要给客户端提示,又希望不至于让若干天无人操作的电脑上充满了消息窗体。
尤其是有些询问的窗体,应该有时效才行。

解决方案 »

  1.   

    玩过联众的游戏么,如果你大量使用这样的消息窗口,可以自定义一个而不是直接使用MessageBox。然后在其内部使用一个定时器(可以用TTimer或者API函数),在默认时间结束时自动关闭它。————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    function StrLeft(const mStr: string; mDelimiter: string): string;
    begin
      Result := Copy(mStr, 1, Pos(mDelimiter, mStr) - 1);
    end; { StrLeft }function StrRight(const mStr: string; mDelimiter: string): string;
    begin
      if Pos(mDelimiter, mStr) > 0 then
        Result := Copy(mStr, Pos(mDelimiter, mStr) + Length(mDelimiter), MaxInt)
      else Result := '';
    end; { StrRight }procedure TForm1.Timer1Timer(Sender: TObject);
    var
      vHandle: THandle;
      vBuffer: array[0..255] of Char;
      I: Integer;
    begin
      vHandle :=FindWindow('TMessageForm', nil);
      TTimer(Sender).Enabled := vHandle <> 0;
      if vHandle = 0 then Exit;
      GetWindowText(vHandle, vBuffer, 256);
      I := StrToIntDef(StrRight(vBuffer, ','), 11) - 1;
      if I < 0 then SendMessage(vHandle, WM_SYSCOMMAND, SC_CLOSE, 0);  SetWindowText(vHandle, PChar(StrLeft(string(vBuffer) + ',', ',') + ',' +
        IntToStr(I)));
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Timer1.Enabled := False;
      Timer1.Enabled := True;
      ShowMessage('Hello!');
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      Timer1.Enabled := False;
      Timer1.Enabled := True;
      MessageDlg('Are you ok?', mtWarning, [mbYes, mbNo], 0);
    end;