• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:角の丸いフォームの作り方)

角の丸いフォームの作り方

himajin100000の回答

回答No.2

個人的には,Mono + Linuxとかの環境を考えるとWin32 APIに頼るのは得策ではないと考える。 http://dobon.net/vb/dotnet/form/formregion.html

関連するQ&A

  • PathToRegion()について

    case WM_TIMER: hdc = GetDC(hwnd); SelectObject(hdc, font); SetBkMode(hdc, TRANSPARENT); BeginPath(hdc); TextOut(hdc, 0, 0, mt->ShowNowTime(mt), lstrlen(mt->ShowNowTime(mt))); EndPath(hdc); hRgn = PathToRegion(hdc); ←ここです。 SelectObject(hdc , GetStockObject(SYSTEM_FONT)); ReleaseDC(hwnd, hdc); SetWindowRgn(hwnd, hRgn, TRUE); InvalidateRect(hwnd, NULL, FALSE); return 0; 時計(文字のみ)のデスクトップアクセサリーをつくろうと思ってますが、 hRgn = hRgn = PathToRegion(hdc);で繰り返し同じhRgnで生成したら、 hRgnのオブジェクト自体はまた生成されるのでしょうか?それともリージョンの演算結果が変わるだけでしょうか? このソースはメモリリークをおこしているでしょうか? PathToRegionはどのような動作をしているのでしょうか? 分かる方教えてください。 (いい文章の表現方法がわからなかったため直接疑問点を書いてみました。文章へたですみません。)

  • VB2008にてフォーム内の絵画エリアについて

    VB(2008)にてフォーム内一杯に四角を描こうとしたのですが、以下のプログラムでは四角の左上部分しか描かれません。 フォームサイズは指定した大きさになっているのにフォーム内の(300,300ぐらい?)の範囲しか絵画されません。 どうすれば指定フォーム全体に絵画できるようになるのでしょうか? Me.Height = 800 'フォームサイズ高さ設定 Me.Width = 800 'フォームサイズ幅設定 Me.Show() For n = 40 To 800 Step 40 '入れ子状に四角を描く g.DrawRectangle(Pens.Black,n,n,800-n*2,800-n*2) Next n VB2008は学習し始めたばかりの素人です。 よろしくお願いします。

  • 実行時に、フォームを印刷

    WindowsXP, vb.net2005で開発しております。 プログラム実行時にフォームを印刷したいと考えております。 フォーム上には下記の3種類のコントロールが貼り付けてあります。  ラベル、  picturebox(イメージを表示)、  panel(バーコードを表示) 印刷はPrintDocumentを使用しています。 フォームをキャプチャーし、画像を印刷するようにしています。 印刷を行うと、必ずpictureboxの画像が最前面に表示されてしまいます。 フォームに指定した重なり順のまま印刷するにはどうすればよいのでしょうか? 以下、PrintDocument のPrintPageのソースです。 Private Sub pd_PrintPage(  ByVal sender As System.Object,  ByVal e As System.Drawing.Printing.PrintPageEventArgs)  Handles pd.PrintPage  'コントロールの外観を描画するBitmapの作成  Dim bmp As New Bitmap(Me.Size.Width, Me.Size.Height)  'キャプチャする  Me.DrawToBitmap(bmp,          New Rectangle(0, 0, Me.Size.Width,          Me.Size.Height))  '画像を描画する  e.Graphics.DrawImage(bmp, 0, 0, e.PageBounds.Width,            e.PageBounds.Height)  '後始末  bmp.Dispose()  '次のページがないことを通知する  e.HasMorePages = False End Sub

  • 子フォームから開いたフォームと親子関係を結びたい(VB2003)

    子フォームから開いたフォームと親子関係を結びたい(VB2003) VB.NET2003についての質問です。 formMain のクラスに以下のコードを書いて実行させると、form1がformMainの子フォームとして開きます 下記は、「form1」を「formMain」の子フォームとして開くコードです。 (formMainクラス内のコードです)   ------------------------------   Dim f As New form1   Me.IsMdiContainer=True   f.MdiParent=Me   f.Show   ------------------------------ form1には、form2を開くボタンが用意されています。 質問内容は、このform2を、formMainの子フォームとして開くにはどうすればよいか、ということです。 ためしに、form1クラスに以下のコードを書いて実行させたところ、 「formMainは型であるため、式として利用することができない」というエラーメッセージが出てしまいました。   ------------------------------   Dim f As New form2   f.MdiParent = formMain   f.Show()   ------------------------------ 以上、よろしくお願い致します。

  • 突然ですが、DirectX9について質問させて頂きます。

    突然ですが、DirectX9について質問させて頂きます。 ウィンドウモードとフルスクリーンモードを切り替える プログラムを組んでいますが、なぜか、フルスクリーンモード からウィンドウモードに復帰すると画面サイズが変化してしまいます。 以下がその問題となる関数です。 void SetWindowStyle( HWND hWnd, bool g_WindowMode ) {     if( g_WindowMode )     {         SetWindowLong( hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE );         MoveWindow( hWnd, 0, 0, 0, 0, false );         SetClientSize( hWnd, WINDOW_WIDTH, WINDOW_HEIGHT ); // 以下に記載     }     else     {         SetWindowLong( hWnd, GWL_STYLE, WS_POPUP | WS_VISIBLE );         MoveWindow( hWnd, 0, 0, 800, 600, true );     } } 以下はウィンドウのサイズを再設定する関数です。 void SetClientSize( HWND hWnd, int width, int height ) {     RECT wnd_Rect, clt_Rect;     int WindowSize_Width, WindowSize_Height;     GetWindowRect( hWnd, &wnd_Rect );     GetClientRect( hWnd, &clt_Rect );     // ウィンドウのサイズを求める     WindowSize_Width = ( wnd_Rect.right - 1 ) - ( wnd_Rect.left - 1 );     WindowSize_Height = ( wnd_Rect.bottom - 1 ) - ( wnd_Rect.top - 1 );     // ウィンドウのサイズを変更     MoveWindow(    hWnd,             wnd_Rect.left,             wnd_Rect.top,             width + (WindowSize_Width-clt_Rect.right),             height + (WindowSize_Height-clt_Rect.bottom),             true     ); } SetClientSize関数はアプリ起動時に一度実行され、800x600に変更されます。 この時点では問題はありません。 しかし、フルスクリーンモード→ウィンドウモードと切り替えると、 800x576と値がおかしくなります。 結果的に800x600になる予定だったのですが…。 同じ関数を使用しているのに、なぜサイズが変化してしまうのでしょう? どなたかこの問題を解決する方法をご存知ないでしょうか? よろしくお願いします。

  • VB6からVB2010への変換について

    今、WindowsXP上のVB6プログラムを、Windows7上のVB2010プログラムへ変換作業をしています 手順は 1.VB2008Expressのアップグレードウィザードを使って、一度VB2008版を造りました   その時に、フォームサイズを変えるステートメントが次のように変わりました Imports VB = Microsoft.VisualBasic ・ Me.Width = 16000 → VB6.TwipsToPixelsX(16000) Me.Height = 12250 → VB6.TwipsToPixelsY(12250) 2.次にWindows7上のVB2010で上記プログラムを読み込むと.       VB6.TwipsToPixelsX(16000) のところに波型のアンダーラインが引かれ     これは「旧形式です」のメッセージが出ました  そこで、Microsoftのフォームページ(http://go.microsoft.com/fwlin/?linkid=160862')を参考に 下記のように修正しました Imports Microsoft.VisualBasic.Compatibility.VB6 ・ Me.Width = Support.TwipsToPixelsX(16000) Me.Height = Support.TwipsToPixelsY(12250)       と修正しましたが波型アンダーラインは消えませんでした そこで質問ですが  この波型アンダーラインは無視して良いのか、  それともまだ使い方が間違っているのか分かりません  そこのところご教授願えれば幸いです   

  • VB.net フォームをなめらかに移動する方法

    フォームをなめらかに移動する方法はないでしょうか? 以下のコードのように、Locationで位置を変更すると、カクカク移動してしまいます。 ご存知の方おしえてください。どうぞよろしくお願いいたします。 Private Sub Form1_Mousemove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove Dim WorkingArea As Rectangle = Screen.PrimaryScreen.WorkingArea Dim MousePos As Point = Me.PointToClient(Windows.Forms.Cursor.Position) '上に移動 If Me.Size.Height * 0.8 < MousePos.Y And Me.Location.Y > 0 Then Me.Location = New Point(Me.Location.X, Me.Location.Y - 20) End If '下に移動 If Me.Size.Height * 0.2 > MousePos.Y And (Me.Location.Y + Me.Size.Height) < WorkingArea.Height Then Me.Location = New Point(Me.Location.X, Me.Location.Y + 20) End If '左に移動 If Me.Size.Width * 0.8 < MousePos.X And Me.Location.X > 0 Then Me.Location = New Point(Me.Location.X - 20, Me.Location.Y) End If '右に移動 If Me.Size.Width * 0.2 > MousePos.X And (Me.Location.X + Me.Size.Width) < WorkingArea.Width Then Me.Location = New Point(Me.Location.X + 20, Me.Location.Y) End If End Sub

  • VBAのフォーム上にTextBoxたくさんあるとき

    Microsoft Excel 2013 の VBAのフォーム機能を利用してます。 TextBoxにセルを参照して文字が入ってくるようにしています。、 参照するセルによって文字列の長さが違うので 文字の大きさを自動調整してくれるマクロを使っているのですが TextBoxがいっぱいあるため、以下のように非常に長いプログラムになってしまいました。 Private Sub textBox1_Change() Const InitialFontSize As Double = 40 '初期フォントサイズ Dim BufWidth As Double Dim BufHeight As Double With Me.TextBox1 .Font.Size = InitialFontSize BufWidth = .Width BufHeight = .Height .AutoSize = True While .Width > BufWidth .Font.Size = .Font.Size - 2.5 Wend .AutoSize = False .Width = BufWidth .Height = BufHeight End With End Sub TextBox2~67は繰り返し Private Sub textBox67_Change() Const InitialFontSize As Double = 40 '初期フォントサイズ Dim BufWidth As Double Dim BufHeight As Double With Me.TextBox67 .Font.Size = InitialFontSize BufWidth = .Width BufHeight = .Height .AutoSize = True While .Width > BufWidth .Font.Size = .Font.Size - 2.5 Wend .AutoSize = False .Width = BufWidth .Height = BufHeight End With End Sub 過去の質問等を参考にいろいろ試してみたのですが 自分の力不足でうまくできませんでした。 うまくまとめられるような方法等ありましたらお知恵を拝借できないでしょうか よろしくお願い致します

  • Me!フォーム名.Enabled = True について

    VBA初心者です。 ACCESS2003で Me!フォーム項目名.Enabled = True について質問があります。 Meの部分は、自分自身なので、他のフォームにあるフォームの使用不可を変更するために下記のような分にしました。 Form_フォーム名!.Enabled = True これで実際実行すると、”オブジェクトが必要です。” というエラーが出てしまいます。 どのようにすればよいのでしょうか。

  • フォームのリサイズ

    現在、フォームのリサイズのときにこれ以上高さを変えないようにするために以下のようなコードを記述しています。 ------------------------------ Private Sub MDIForm_Resize()    If Height < 2500 Then     Height = 2500     Exit Sub    End If End Sub ------------------------------ 一応、これで上手くはいっているのですが、実行時、高さを2500以下にしようと動かしたとき、ちらつきというか妙な残像のようなものが出てしまいます。 こんな変な残像が出ずに、VB自身の画面を変えたときのようにピタっと止まるような表示が出来るようにする方法は無いものでしょうか。 ちなみに、開発環境はWin2000、VB6です。 よろしくお願いします。