2011年9月17日土曜日

AutoCAD-VBA作成方法

AutoCAD2010以降でVBAを使いには別途Autodeskよりダウンロードしてインストールする必要あり。


AutoCADでマクロを作成するには[管理]→[アプリケーション]→[Visual Basic Editer]より作成
※[Alt]+[F11]でもエディタ起動


[新規作成]を選択


エディタが開くので編集していく。
※基本操作は通常のVBAと同様です。

VB6のvsFlexGridで複数選択したセルの色を一括で変える方法

FillStyleの値をデフォルトの flexFillSingle → flexFillRepeat
に変更するだけです。

使用例:
With vsFlexGrid
'複数選択モードにする
.FillStyle = flexFillRepeat
.Select row1, col1, row2, col2
.CellBackColor = &H80FFFF
'単体選択モードに戻す。
.FillStyle = flexFillSingle
End With


---------------------------------------------------------------------
Microsoft VB6 FlexGrid

ASP.NETで5秒後に画面を閉じる方法

JavaScriptを使用して画面を閉じる方法です。
ただし、親画面を閉じる警告メッセージが表示されますので、
自動で終了することはでません。
これはIEの使用ですので回避は出来ないみたいです。


        strScript &= "<script language=javascript>"
        strScript &= "bb = 0;"
        strScript &= "function WindowClose() {"
        strScript &= "if(bb == 5){window.close()};"
        strScript &= "bb = bb + 1;"
        strScript &= "};"
        strScript &= "setInterval(function(){WindowClose()},1000);"
        strScript &= "</script>"
        Response.Write(strScript)

   



ASP.NET VB2005 JavaScript 画面 終了 閉じる

ASP.NETでカスタムコントロールを作る方法

ASP.NETでカスタムコントロールを作成するには、
新規のプロジェクトでWebコントロールライブラリを選択して作成する。
※下記参照


作成が完了したら、プロジェクトを保存し、ビルドを実行しdllを作成する。


dllはプロジェクトの保存先のbin→Releaseフォルダ内にある。
プロジェクト名.dllを任意の場所にコピーする。


ツール→ツールボックスアイテムの選択を選択


先ほど任意の場所に保存したdllを選択する。


ツールボックスに作成したカスタムコントロールが表示されるので、
後はいつもどおり使用できます。
※私はわかりやすいようにタグを作成して一般のコントロールと分けて表示しています。


今回作成したカスタムカスタムコントロールは下記より参照ください。
ASP.NET TextBoxで数値のみ入力可能なカスタムコントロールの作成方法



ASP.NET VB2005 カスタムコントロール

ASP.NETでデータベース等より取得した時間を元にデジタル時計を表示する方法。

ASP.NET で出退勤のシステムを作ることになったので、
画面上にデジタル時計を表示する必要があったので作成しました。
時計のカウントアップにJavaScriptを使用しています。
1秒毎にデータベースの値を取得するとデータベースに負荷が掛かるので、
5分毎にデータベースの値を取得するようにしています。
JavaScriptでデータベースアクセスの方法が分からなかったので、
荒業ですが、ページを再ロードする方法をとっています。
ここの部分は再度考慮の必要があると思います。

※注意が必要なのが、なぜかJavaScriptのデータは月を-1して日付計算をする必要があるみたいです。
詳しくは調べていませんのでデマかも知れません。



    Protected Sub Set_Watch()
        Dim sf As New Shared_Function
        Dim sdatetime As String
        Dim strScript As String = ""
        Dim numyear As String
        Dim numman As String
        Dim numday As String
        Dim numtime As String
        Dim nummin As String
        Dim numscn As String

       

         'データベースより時間を取ってくる YYYY/MM/DD HH24:MI:SS 形式
        sdatetime = sf.Get_Str_Sysdatetime

        'それぞれを年,月,日,時間,分,秒に分ける。
        numyear = Mid(sdatetime, 1, 4)
        numman = Mid(sdatetime, 6, 2)
        numday = Mid(sdatetime, 9, 2)
        numtime = Mid(sdatetime, 12, 2)
        nummin = Mid(sdatetime, 15, 2)
        numscn = Mid(sdatetime, 18, 2)

 

        strScript = ""
        strScript &= "<script language=javascript>"
        strScript &= "numyear = Number(" + numyear + ");"

        'javascriptの仕様で月は-1する
        strScript &= "numman = Number(" + numman + ")-1;"  
        strScript &= "numday = Number(" + numday + ");"
        strScript &= "numtime = Number(" + numtime + ");"
        strScript &= "nummin = Number(" + nummin + ");"
        strScript &= "numscn = Number(" + numscn + ");"
        strScript &= "aa = 0;"

        strScript &= "function Watch() {"

        '5分毎にページを再ロードしデータベースの値を取得
        strScript &= "if(aa == 300000)" & _

                             "{parent.location.href = '../In_Out_Check/Entry.aspx';};"

        '取得した値をDate型に変換
        strScript &= "now = " &  _

                               new Date(numyear,numman,numday,numtime,nummin,numscn );"

        'データベースの値は5分ごとに再取得するので

        'それでは1000ミリ秒ずつセットしなおす。
        strScript &= "now.setTime(now.getTime()+aa);"
        strScript &= "now.getTime();"

        strScript &= "year = now.getYear();"

        'Date変換時にマイナスした分を足す。

        strScript &= "month = now.getMonth()+1;" 

        strScript &= "day = now.getDate();"
        strScript &= "hour = now.getHours();"
        strScript &= "minute = now.getMinutes();"
        strScript &= "second = now.getSeconds();"
        strScript &= "now = new Date();"
        strScript &= "if (year < 1000) { year += 1900 }"
        strScript &= "if (hour < 10) { hour = '0' + hour }"
        strScript &= "if (minute < 10) { minute = '0' + minute }"
        strScript &= "if (second < 10) { second = '0' + second }"

        'ID=watchのテキストに時間を渡す。 aspx上に配置必要
        strScript &= "document.getElementById(""watch"").value = " & _

                              "  hour + ':' + minute + ':' + second;"

        'ID=DataTextのテキストに年月等を渡す。
        strScript &= "document.getElementById(""DateText"").value = " & _

                                " year+'年' + month + '月' + day;"

 

        strScript &= "aa = aa + 1000;"
        strScript &= "};"

        '1000ミリ秒(1秒ごと) watchを動かす。
        strScript &= "window.onload=function(){"
        strScript &= "setInterval(function(){Watch()},1000);"
        strScript &= "};"
        strScript &= "</script>"
        Response.Write(strScript)

    End Sub



ASP.NET VB2005 デジタル時計 JavaScript 表示

 

ASP.NET TextBoxで数値のみ入力可能なカスタムコントロールの作成方法

今回作成したカスタムコントロールは下記の通りです。
テキストボックスを継承して新しいカスタムコントロールを作成しています。
下記ソースはIMEをoffにしてJavaScriptを使用して数値のみの入力としています。

dllも添付していますので、ご自由に使用してください。
本来は、プロパティでIMEの変更等を行いたかったのですが、
うまいこと動かなかったのでIME等の設定は決め打ちで行っています。
ソースも一応貼り付けていますが、そのまま動くかは不明です。
(改行等でブログの仕様で文字等がおかしくなってる場合があります。)

Browsable(False)>を宣言するとプロパティに表示しません。

 


 

Imports System.ComponentModel
Imports System.Web.UI

<DefaultProperty("Text"), ToolboxData("<{0}:TextBox_ImrOff_NumOnly runat=server></{0}:TextBox_ImrOff_NumOnly>")> _

Public Class TextBox_ImrOff_NumOnly
    Inherits System.Web.UI.WebControls.TextBox
    Private _imeMode = "disabled"
    Private _onFocus As String = "javascript:this.value" _
                "=this.value.replace(/,/g,'');this.select();this.style.backgroundColor='#FFFFCC'"
    Private _onBlur As String = "javascript:if(isNaN(this.value)==true){ alert('数値のみ入力可です。');" _
                "this.focus();return};this.value=this.value-0;while(this.value!=(tmpStr=this.value.replace(/^([+-]?\d+)(\d\d\d)/,'$1,$2'))){this.value=tmpStr;};if(this.value=='') this.value='0';" _
            "this.style.backgroundColor='#FFFFFF'"
    Private _onkeyPress As String = "javascript:if(((event.keyCode<48)||(event.keyCode>57))&&(event.keyCode!=45)&&(event.keyCode!=46)){window.event.returnValue=false;}"

    <Browsable(False)> _
    Public Property ImeMode() As String
        Get
            Return _imeMode
        End Get
        Set(ByVal Value As String)
            _imeMode = Value
        End Set
    End Property

 

    'フォーカス取得時のプロパティ設定
    <Browsable(False)> _
    Public Property onFocus() As String
        Get
            Return _onFocus
        End Get
        Set(ByVal Value As String)
            _onFocus = Value
        End Set
    End Property

 

    'フォーカス喪失時のプロパティ設定
    <Browsable(False)> _
    Public Property onBlur() As String
        Get
            Return _onBlur
        End Get
        Set(ByVal Value As String)
            _onBlur = Value
        End Set
    End Property

 

    'キー押下時のプロパティ設定
    <Browsable(False)> _
    Public Property onkeyPress() As String
        Get
            Return _onkeyPress
        End Get
        Set(ByVal Value As String)
            _onkeyPress = Value
        End Set
    End Property

 

    'プロパティ追加
    Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
        MyBase.OnInit(e)
        MyBase.Style("ime-mode") = _imeMode
        'MyBase.Style("text-align") = _alignList(_align)
    End Sub

 

    Protected Overrides Sub AddAttributesToRender(ByVal writer As System.Web.UI.HtmlTextWriter)
        writer.AddAttribute("onFocus", _onFocus)
        writer.AddAttribute("onBlur", _onBlur)
        writer.AddAttribute("onkeyPress", _onkeyPress)
        MyBase.AddAttributesToRender(writer)
    End Sub
End Class


 


 


ASP.NET VB2005 カスタムコントロール





ASP.NETでIPアドレスを取得する方法 

Request.ServerVariables("REMOTE_ADDR")でIPアドレスを取得可能。
192.168.11.100等が返されます。

ローカルで実行すると'127.0.0.1'が返されます。




Dim ipaddr as String

ipaddr = Request.ServerVariables("REMOTE_ADDR")



ASP.NET VB2005 IPアドレス