DelFusa Blog 総本山

プログラミングの話題とかです。

NEW | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

| スポンサー広告 | --:-- | comments(-) | trackbacks(-) | TOP↑

≫ EDIT

びすた


                     _____________
 彡ミ  | |  ∧,,∧ |__    /きょうも
  |ヽ  | | ミ,,゚Д゚ミ/  /  <  Vistaニュースが多い木が。
  |ヽ  | | (ミ   ,/__()旦~~ \
  ⊥  |  ̄| ̄|| ̄ ̄ ̄ ̄ ̄|    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |__|   ◎ ̄| ̄| ̄ ̄ ̄ ̄ ̄|


さて、

未だに『誰も使ってないじゃないか』と噂が先行しているVistaですが
いつまでこの状況が続くのか...

でも、実は、わたくしVista使ってます。

結構、非国民ですか?(w

UACは解除してます。個人的にはありえないです。UAC。
不便すぎです。
だから解除。
だから、自作ソフトはあまりVistaUACの事考えずに作っちゃう。



OSとしては、XPもVistaも、HDDに付属する版だと値段も同じくらいです。
WinXPが売れてもMSは儲かるわけで、別に死にものぐるいで売れなくてもいいのかしら。

このあたりから下り坂っぽい気もしてきますな。

一番の魅力?になるであろう、Vistaデザインがいくらかっこよさゲといえども
(そこが一番の魅力って、OSとして、どうなんだろう?)

XPでLunaインターフェースのスキンを切り替えた方が
よっぽどかっこいいのですもの…
やはり、Vista、購買欲にかけます。

WinXPでスキン変更方法は、とりあえずMr.XRAYさんところをどうぞ。

スキン WindowsXPの画面デザイン
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/A_XPStyle_Skin.htm


ただ、魅力薄だとしても、Vista。まあまあ楽しんで使っています。

それで、、、、ですね。

開発者として私がVistaの何が気になるかというと
起動時と終了時に、じわっと、画面が浮き出る感じのUI。
ここなんですよ!(そこか?)

Vista挙動を調べていますと
このじわっと浮き出る表示は、タイトルバーのあるウィンドウに
対しては有効なのですが、
タイトルバーの無い画面には有効になってくれません。

つまり、そこかしこにあるアプリケーションの
Splashウィンドウでは、じわー、っと浮き出る感は味わえないわけです。

それはつまらないな。と思って、工夫してみました。

タイトルバーがあるウィンドウのクライアント領域に
Regionで切り取って、タイトルバーがないようみ見せかけてみました。

//クライアント領域でRegionカット
CutRegionClientRect(Self);

//クライアント領域のRectの中心をタスクバーの無い部分の領域の中心に移動
SetRect := RectMoveCenter(ClientRectToScreen(Self),
RectCenter(NoneTaskBarDesktopRect));

//クライアント領域に対してSetBoundRectを行う
SetClientRect(Self, SetRect);

この3行の処理で出来るようにしました。もちろんその裏で結構なコードが動いていますので下記に記載。

いつもどおりでRectPointUnitも使っています。
RectPointUnit.pas
http://delfusa.main.jp/delfusafloor/opensource/delfusalibrary/20070828160200/RectPointUnit/RectPointUnit.pas.txt


これでVistaで、じわりと浮き上がるSplashウィンドウのできあがり。
どぞどぞ。


{-------------------------------
// スクリーン座標でClientRect位置を設定する処理
   SetClientRect
  ClientRectをRegionで切り取る
   CutRegionClientRect
機能:
備考:    Vistaの場合bsNoneでは浮き上がる効果がでないので
      Splashフォームを浮き上がらせる時に
      bsSizeableにしておいて、クライアント領域をRegionで
      切り抜く必要があり、その為に作成
履歴:    2008/03/17(月) 10:47
//------------------------------}
function ClientRectToScreen(F: TForm): TRect;
begin
 Result.TopLeft := F.ClientToScreen(Point(0,0));
 Result.BottomRight := F.ClientToScreen(F.ClientRect.BottomRight);
end;

procedure SetClientRect(F: TForm; R: TRect);
var
 ScreenClientRect, SetRect: TRect;
 TopLeftMove, BottomRightMove: TPoint;
begin
 {下:現在のClientRectをスクリーン座標に変換}
 ScreenClientRect := ClientRectToScreen(F);

 {下:Rと現在のClientRectを比較}
 TopLeftMove.X := R.Left - ScreenClientRect.Left;
 TopLeftMove.Y := R.Top - ScreenClientRect.Top;
 BottomRightMove.X := R.Right - ScreenClientRect.Right;
 BottomRightMove.Y := R.Bottom - ScreenClientRect.Bottom;

 {下:現在のBoundRectに対してその移動量を求める}
 SetRect.Left := F.BoundsRect.Left + TopLeftMove.X;
 SetRect.Top := F.BoundsRect.Top + TopLeftMove.Y;
 SetRect.Right := F.BoundsRect.Right + BottomRightMove.X;
 SetRect.Bottom := F.BoundsRect.Bottom + BottomRightMove.Y;

 F.BoundsRect := SetRect;
end;

//クライアント領域の大きさでWindowを切り取る処理
procedure CutRegionClientRect(F: TForm);
var
 ScreenClientRect, SetRect: TRect;
 TopLeftMove: TPoint;
 Rgn: HRGN;
begin
 {下:ClientRectをスクリーン座標に変換}
 ScreenClientRect := ClientRectToScreen(F);

 {下:BoundRectとClientRectとの差を求める}
 TopLeftMove.X := ScreenClientRect.Left - F.BoundsRect.Left;
 TopLeftMove.Y := ScreenClientRect.Top - F.BoundsRect.Top;

 SetRect.Left := TopLeftMove.X;
 SetRect.Top := TopLeftMove.Y;
 SetRect.Right := TopLeftMove.X + F.ClientWidth - 1;
 SetRect.Bottom := TopLeftMove.Y + F.ClientHeight - 1;

 Rgn := CreateRectRgn(SetRect.Left, SetRect.Top, SetRect.Right, SetRect.Bottom);
 {下:リージョンをセット}
 setWindowRgn(F.Handle, Rgn, true);
end;
//------------------------------

そのあたりに疑問があったので、こちらでも聞いてみました。
独自タイトルバーを実装する場合はbsNoneにするよりも
ClientRectをRegionで切り取る。こっちがVistaスタイルなのかもしれません。
ご参考にしてください。

タイトルバーを透明化(?)する方法
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200802/08020048.txt



というわけで、DelphiSplashChangerを、Vistaじわっと起動スプラッシュ画面にしてみました。
じわっと、立ち上がりのON/OFFを切り替えるようにすればよかったかな?
まあ、とりあえず、バイナリは、ここにおいときます。ご利用くださいな。
DelphiSplashChanger2008-03-18.zip
http://delfusa.main.jp/temp/DelphiSplashChanger2008-03-18.zip

スポンサーサイト

| 未分類 | 01:03 | comments:2 | trackbacks:0 | TOP↑

COMMENT

どこにコメントすべきか迷ったけど、とりあえず目につきそうなここに。

IntraWebの件だけど、"2008 Delphi Survey"
http://video.codegear.com/survey/2008DelphiSurvey_Japanese.html
の12.7、12.11及び12.12に"ソフトウェアBTO"の可能性を示唆した箇所があるので要チェックだよー。

| DEKO | 2008/03/19 04:14 | URL | ≫ EDIT

いつも、ありがとうございまーす。

そういえばーーー。Fジーさまから、スプラッシュな関係で、公開な、未確認情報・・・・いや、確認情報がきておりますので。

ムフフ。ミ・∀・彡

ちかぢか、ご期待に添えるでございます。

| ミ゚Д゚,,彡 | 2008/03/20 00:45 | URL | ≫ EDIT















非公開コメント

TRACKBACK URL

http://delfusa.blog65.fc2.com/tb.php/135-1a6a26d7

TRACKBACK

PREV | PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。