実行時にFormのタイトルバーを消したウィンドウが必要となり、現在以下のような方法を取っています。
・BorderStyleプロパティ = bsDialog
・FormCreate時の処理
SetWindowLong(Self.Handle, GWL_STYLE,
GetWindowLong(Self.Handle, GWL_STYLE) xor WS_CAPTION);
通常のフォームは、OSがXPの場合でXPスタイル(クラッシックスタイルではない、という意味です)だと青やシルバーなどのウィンドウ枠が表示されますが
上記手法を取ると枠はあるのですがXPスタイルが無効?(青枠でない)になります。
他のフォームと見た目が違う(枠線だけですが。。。)ため、可能であればタイトルバーなしウィンドウでも青枠を表示したいと考えています。
宜しくお願いします。
環境:Del2006 win32 + WindowsXP Pro SP2 です。
ムリヤリ自前で。
procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
var
R: TRect;
begin
inherited;
with TCanvas.Create do try
Handle := GetWindowDC(Self.Handle);
Brush.Style := bsClear;
Pen.Mode := pmCopy;
Pen.Color := clActiveCaption; //clBlue;
Pen.Width := 3;
GetWindowRect(Self.Handle, R);
RoundRect(1, 1, R.Right-R.Left-1, R.Bottom-R.Top-1, 2, 2);
finally
ReleaseDC(Self.Handle, Handle);
Free;
end;
ありがとうございます。出来ました。
描画系は今までほとんどやっていなかったので勉強になります。
あとはOSの判定やクラシックスタイルなのか、などの判定を入れていい感じにしていこうと思います。
解決済みマークを付けた後ですがその後について。
今回の要件ではOSはWin2K、XPだけとなっています。
昨日、XPのクラシックスタイルで確認した所、タイトルバーが残ってしまいました。Win2Kは環境を作っていないのでまだ未確認です。
こちらはおいおい調べようと考えています。
XPのクラシックスタイルでも、Win2Kでも、タイトルバーは
問題なく消えてくれるよ。
やっと原因が分かりました。
FormCreate時にデバッグ用にShowMessageしていたのですが、この後にSetWindowLongでスタイル設定するとタイトルバーが表示されてしまうようです。
ShowMessageする前にSetWindowLongでスタイル設定すればタイトルバーは表示されませんでした。
いずれはなくなるメッセージダイアログですがこんな事もあるのですね。
XPスタイルだと問題ないし。。。orz
ツイート | ![]() |