ディスプレイのwidth、heightを取得したいのですが。


night  2005-03-03 07:11:27  No: 13507  IP: [192.*.*.*]

プログラム実行時にFormを任意の場所から表示させたいのですが、例えば、左下隅にFormを表示させる時は、ディスプレイのwidth(幅)とheight(高さ)を取得しなければならないと思いますが、ディスプレイのwidthとheightはどうやって取得するのでしょうか?

編集    削除
とーりすがり  2005-03-03 08:46:47  No: 13508  IP: [192.*.*.*]

TScreenでヘルプを引いて見てください

編集    削除
night  2005-03-03 08:57:12  No: 13509  IP: [192.*.*.*]

調べたら普通に解決しました。
ディスプレイのwidth = screen.width, height = screen.height;ですね^^;

そこは、分ったのですが、MSNメッセンジャーで、誰かからメッセージを受信すると、右下からwindowがニョキニョキと出てきますよね?メッセンジャーじゃないですけど、それを、form1のボタンを押したときに出現させたいのですが、form2をそのwindowに見立てて、timerを使ってやってみたのですが、どうもうまくいきません・・。
どのようにすればうまく出来るのか、ご教授お願いします。

編集    削除
とーりすがり  2005-03-03 09:13:10  No: 13510  IP: [192.*.*.*]

えっと、、、「ニョキニョキ」と出すことが大切ですか?

編集    削除
とーりすがり  2005-03-03 09:21:35  No: 13511  IP: [192.*.*.*]

無理矢理ですけど、、、
こんなので、、、ニョキニョキと、、、、

---------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
 var
   i : integer;
begin
  Form2.Top  := Screen.WorkAreaHeight;
  Form2.Left := Screen.Width - Form2.Width;

  Form2.Show;

  for i := Form2.Top downto (Form2.Top - Form2.Height) do
  begin
    Form2.Top  := Form2.Top - 1;
    Application.ProcessMessages;
    Sleep(10);
  end;
end;

---------------------------------------------------------------------

どうでしょ。。。ニョキニョkと、、、

編集    削除
Fusa  2005-03-03 11:00:14  No: 13512  IP: [192.*.*.*]

動かしてみてください。

procedure TForm1.FormShow(Sender: TObject);
begin
  Form1.Left := Screen.Width - Form1.Width;
  Form1.Top  := Screen.Height - Form1.Height;
  AnimateWindow((Sender as TForm1).WindowHandle,1000,
    AW_SLIDE + AW_VER_NEGATIVE + AW_HOR_NEGATIVE);
  Sleep(5000);
  AnimateWindow((Sender as TForm1).WindowHandle,1000,
    AW_HIDE + AW_BLEND);
end;

http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=78352

編集    削除
night  2005-03-03 22:59:25  No: 13513  IP: [192.*.*.*]

返答ありがとうございます。
実はニョキニョキと出てきて、またニョキニョキと下がっていって、最後にはフォームが消えるというのがしたいんです。
実際、ニョキニョキと出すところまでは私自身も作れたのですが、ニョキニョキと下がって行くのが出来ません。(上がると下がるの組み合わせができません。)つまり、上がって下がって消えるのです。
フォームの出現はshowメソッドで、消すのはdestroyで良いのでしょうか?
手間をかけてしまって申し訳ないですが、よろしくお願いします。

編集    削除
Basser  2005-03-05 02:45:37  No: 13514  IP: [192.*.*.*]

OnCloseでいいと思います。
Fusaさんが提示された AnimateWindow で実現できますが、
MSDNでは dwFlags に AW_HIDE と AW_BLEND を同時にセットしないように記述されています。
下記のような組合せだと期待したような動作をします。

  procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  begin
    AnimateWindow(Handle, 1000, AW_HIDE or AW_SLIDE or AW_VER_POSITIVE);
  end;

一度 AnimateWindow を調べられてみてはどうでしょうか?

編集    削除