tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルフォームの境界線を消す
記事No8209
投稿日: 2008/09/24(Wed) 14:23
投稿者kan
こんにちは。

フォームの境界線を消すにはFormBorderStyleをnoneにすればよいのですが、
フォームのサイズ変更ができなくなります。

FormBorderStyleはいじらず、フォームの境界線を消す方法はありますでしょうか。
つまり、サイズ変更できるが境界線のないフォームをつくる。

オーナードローで実現できるのでしょうか。
オーナードローがよくわからず、実装できませんでした。

ご教示お願い致します

2008/09/24 追記
環境
Windows XP SP2
VB2005

[ツリー表示へ]
タイトルRe: フォームの境界線を消す
記事No8215
投稿日: 2008/09/25(Thu) 07:09
投稿者花ちゃん
>FormBorderStyleはいじらず、フォームの境界線を消す方法はありますでしょうか。
>つまり、サイズ変更できるが境界線のないフォームをつくる。
そのような矛盾する方法は無いかと思いますよ。

> オーナードローで実現できるのでしょうか。
> オーナードローがよくわからず、実装できませんでした。
オーナードロー で何を描画しようと思っておられるのでしょうか?

そのような事をしたければ、フォームをドラッグして移動する要領で、フォームの端に
移動した場合にマスの形を変更して、ドラッグすればサイズが変更できるようなコード
をゴシゴシと書くか、移動した場合に、枠線を表示するようにするか等の工夫するしか
ないのでは。

サイズを変更したいなら、どうして枠線を消す必要があるのでしょうか?
下記のようなフォームではだめなのですか?
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
   Me.ControlBox = False
   Me.Text = ""
End Sub

[ツリー表示へ]
タイトルRe^2: フォームの境界線を消す
記事No8216
投稿日: 2008/09/25(Thu) 08:37
投稿者kan
> そのような矛盾する方法は無いかと思いますよ。
> オーナードロー で何を描画しようと思っておられるのでしょうか?
> そのような事をしたければ、フォームをドラッグして移動する要領で、フォームの端に
> 移動した場合にマスの形を変更して、ドラッグすればサイズが変更できるようなコード
> をゴシゴシと書くか、移動した場合に、枠線を表示するようにするか等の工夫するしか
> ないのでは。
>
> サイズを変更したいなら、どうして枠線を消す必要があるのでしょうか?
> 下記のようなフォームではだめなのですか?

フォームにラベルをはり、ラベルのバックカラーに色を設定し、
Dock=Fillした場合に、FormをSizebleにし、タイトルバーを消したのですが、
フォームの枠が3D表示されており、不格好でしたので、
3D表示をなくし(noneと同じ状態)、もしくは実線表示ができればと思ったのですが。

矛盾してましたね。
申し訳ございませんでした。
ありがとうございました。

[ツリー表示へ]
タイトルRe^3: フォームの境界線を消す
記事No8217
投稿日: 2008/09/25(Thu) 09:13
投稿者よねKEN
#同じ人の投稿に見えるけど・・・

http://bbs.wankuma.com/index.cgi?mode=al2&namber=25467
こちらが参考になるかと思います。

[ツリー表示へ]
タイトルRe^4: フォームの境界線を消す
記事No8218
投稿日: 2008/09/25(Thu) 10:58
投稿者花ちゃん
> #同じ人の投稿に見えるけど・・・

マルチポストですか? 
しかも 9/22 に WM_NCHITTESTで対応できました。 と 投稿されていますね。


見た目だけの事なら下記のように枠線とバックカラーを同じにすれば。
http://www.hanatyan.sakura.ne.jp/TestForm.gif

[ツリー表示へ]
タイトルRe^5: フォームの境界線を消す
記事No8220
投稿日: 2008/09/25(Thu) 15:02
投稿者kan
> 見た目だけの事なら下記のように枠線とバックカラーを同じにすれば。
> http://www.hanatyan.sakura.ne.jp/TestForm.gif

サンプルのように枠線がない状態は、
text=""、controlbox=falseでできるのですが、
フォームの3D表示をフラットにしたいのです。

[ツリー表示へ]
タイトルRe^6: フォームの境界線を消す
記事No8222
投稿日: 2008/09/25(Thu) 16:27
投稿者花ちゃん
>つまり、サイズ変更できるが境界線のないフォームをつくる。

> フォームの3D表示をフラットにしたいのです。

>FormBorderStyleはnoneではなく、SizableToolWindowでいきたいのです。
>(Alt+Tabでアイコンを表示させたくないので)

一体どうしたいのかな?
どうぞお好きなように。

[ツリー表示へ]
タイトルRe^7: フォームの境界線を消す
記事No8223
投稿日: 2008/09/25(Thu) 16:54
投稿者kan
> 一体どうしたいのかな?

Form.FormBorderStyle=SizableToolWindow
Form.ControlBox=False
Form.Text=""

にしたときの、フォームの枠がボタンのようにハイライトが付くが
それを消したい。(見た目Form.FormBorderStyle=noneのようにしたい)

なぜ、Form.FormBorderStyle=SizableToolWindowなのかというと、
noneだと、複数フォームを起動したときに、ShowInTaskBar=Falseにしても
Alt+Tabでアイコンが表示されるため(SizableToolWindowだと表示されない)

> どうぞお好きなように。

拙い説明で不快な気持ちにさせてしまい申し訳ございませんでした。
頑張ってみます。
ありがとうございました。

[ツリー表示へ]
タイトルRe^7: フォームの境界線を消す
記事No8372
投稿日: 2008/10/23(Thu) 16:46
投稿者kan
> 一体どうしたいのかな?
> どうぞお好きなように。

好きなようにしたらできました。




とはいうのは冗談で。
下記のようにしてみました。
長くなるので、ドラッグアンドドロップでのフォームの移動は割愛。
とりあえず動いてる。

Public Class Form1
    Private Const WS_EX_TOOLWINDOW As Integer = &H80
    Private Const WS_EX_CLIENTEDGE As Integer = &H200
    Private Const WS_EX_WINDOWEDGE As Integer = &H100
    Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or WS_EX_TOOLWINDOW
            Return cp
        End Get
    End Property

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = String.Empty
        Me.ControlBox = False
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        Me.ShowInTaskbar = False
    End Sub

#Region "フォームサイズ変更関連"
    ''www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38887&forum=7&start=8

    Private Const WM_NCHITTEST As Integer = &H84
    Private Const HTERROR = (-2)
    Private Const HTTRANSPARENT = (-1)
    Private Const HTNOWHERE = 0
    Private Const HTCLIENT = 1
    Private Const HTCAPTION = 2
    Private Const HTSYSMENU = 3
    Private Const HTGROWBOX = 4
    Private Const HTSIZE = HTGROWBOX
    Private Const HTMENU = 5
    Private Const HTHSCROLL = 6
    Private Const HTVSCROLL = 7
    Private Const HTMINBUTTON = 8
    Private Const HTMAXBUTTON = 9
    Private Const HTLEFT = 10
    Private Const HTRIGHT = 11
    Private Const HTTOP = 12
    Private Const HTTOPLEFT = 13
    Private Const HTTOPRIGHT = 14
    Private Const HTBOTTOM = 15
    Private Const HTBOTTOMLEFT = 16
    Private Const HTBOTTOMRIGHT = 17
    Private Const HTBORDER = 18
    Private Const HTREDUCE = HTMINBUTTON
    Private Const HTZOOM = HTMAXBUTTON
    Private Const HTSIZEFIRST = HTLEFT
    Private Const HTSIZELAST = HTBOTTOMRIGHT

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        Select Case m.Msg
            Case WM_NCHITTEST
                Dim p As Point
                p = Me.PointToClient(New Point(m.LParam.ToInt32 Mod 65536, m.LParam.ToInt32 \ 65536))

                If p.X > Me.ClientRectangle.Right Then Exit Select
                If p.X < Me.ClientRectangle.Left Then Exit Select
                If p.Y < Me.ClientRectangle.Top Then Exit Select
                If p.Y > Me.ClientRectangle.Bottom Then Exit Select

                If p.X < Me.ClientRectangle.Left + 5 Then
                    If p.Y < Me.ClientRectangle.Top + 5 Then
                        m.Result = HTTOPLEFT
                        Exit Sub
                    End If
                    If p.Y > Me.ClientRectangle.Bottom - 5 Then
                        m.Result = HTBOTTOMLEFT
                        Exit Sub
                    End If
                    m.Result = HTLEFT
                    Exit Sub
                End If
                If p.X > Me.ClientRectangle.Right - 5 Then
                    If p.Y < Me.ClientRectangle.Top + 5 Then
                        m.Result = HTTOPRIGHT
                        Exit Sub
                    End If
                    If p.Y > Me.ClientRectangle.Bottom - 5 Then
                        m.Result = HTBOTTOMRIGHT
                        Exit Sub
                    End If
                    m.Result = HTRIGHT
                    Exit Sub
                End If
                If p.Y < Me.ClientRectangle.Top + 5 Then
                    m.Result = HTTOP
                    Exit Sub
                End If
                If p.Y > Me.ClientRectangle.Bottom - 5 Then
                    m.Result = HTBOTTOM
                    Exit Sub
                End If
        End Select
        MyBase.WndProc(m)
    End Sub

#End Region

End Class

[ツリー表示へ]
タイトルRe^4: フォームの境界線を消す
記事No8221
投稿日: 2008/09/25(Thu) 15:07
投稿者kan
> #同じ人の投稿に見えるけど・・・
>
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=25467
> こちらが参考になるかと思います。

FormBorderStyleはnoneではなく、SizableToolWindowでいきたいのです。
(Alt+Tabでアイコンを表示させたくないので)

[ツリー表示へ]