source: trunk/ab5.0/ablib/src/Classes/ActiveBasic/Windows/UI/MakeControlEventHandler.ab@ 615

Last change on this file since 615 was 615, checked in by イグトランス (egtra), 16 years ago

サブクラス化機構(Control.Attach)の整備

File size: 3.0 KB
RevLine 
[473]1/*
2注意:インクルードファイルではありません。
3イベント処理の実装コード生成プログラム。
4*/
5
6Imports System
7Imports System.IO
8Imports System.Text
9Imports ActiveBasic
10Imports ActiveBasic.CType
11
12Function EventNameToMemberVariableName(eventName As String) As String
13 '先頭1字を小文字化
14 Dim t = New StringBuilder(eventName)
15 t[0] = ToLower(t[0])
16 Return t.ToString
17End Function
18
[559]19Sub OutputEventHandlerCode(out As TextWriter, eventName As String, argBase As String, comment As String, isStatic As Boolean)
[473]20 Dim eventMember = EventNameToMemberVariableName(eventName)
21 Dim handlerType = argBase & "Handler"
22 Dim argsType = argBase & "Args"
[559]23 Dim staticKeyword = Nothing As String
24 If isStatic Then staticKeyword = "Static "
[473]25 out.WriteLine("Public")
[542]26' out.WriteLine(Ex"\t/*!")
27' out.WriteLine(Ex"\t@brief " & eventName & "イベントハンドラを追加する")
28' out.WriteLine(Ex"\t*/")
[559]29 out.WriteLine(Ex"\t" & staticKeyword & "Sub Add" & eventName & "(h As " & handlerType & ")")
[473]30 out.WriteLine(Ex"\t\tIf IsNothing(" & eventMember & ") Then")
[542]31 out.WriteLine(Ex"\t\t\t" & eventMember & " = h")
32 out.WriteLine(Ex"\t\tElse")
33 out.WriteLine(Ex"\t\t\t" & eventMember & " += h")
[473]34 out.WriteLine(Ex"\t\tEnd If")
35 out.WriteLine(Ex"\tEnd Sub")
[542]36' out.WriteLine(Ex"\t/*!")
37' out.WriteLine(Ex"\t@brief " & eventName & "イベントハンドラを削除する")
38' out.WriteLine(Ex"\t*/")
[559]39 out.WriteLine(Ex"\t" & staticKeyword & "Sub Remove" & eventName & "(h As " & handlerType & ")")
[473]40 out.WriteLine(Ex"\t\tIf Not IsNothing(" & eventMember & ") Then")
41 out.WriteLine(Ex"\t\t\t" & eventMember & " -= h")
42 out.WriteLine(Ex"\t\tEnd If")
43 out.WriteLine(Ex"\tEnd Sub")
[551]44 out.WriteLine("Protected")
[542]45' out.WriteLine(Ex"\t/*!")
46' out.WriteLine(Ex"\t@brief " & comment)
47' out.WriteLine(Ex"\t*/")
[615]48 out.WriteLine(Ex"\t" & staticKeyword & "Function On" & eventName & "(e As " & argsType & ") As Boolean")
[473]49 out.WriteLine(Ex"\t\tIf Not IsNothing(" & eventMember & ") Then")
50 out.WriteLine(Ex"\t\t\t" & eventMember & "(This, e)")
[615]51 out.WriteLine(Ex"\t\t\tReturn True")
[473]52 out.WriteLine(Ex"\t\tEnd If")
[615]53 out.WriteLine(Ex"\tEnd Function")
[473]54 out.WriteLine("Private")
[559]55 out.WriteLine(Ex"\t" & staticKeyword & eventMember & " As " & handlerType)
[473]56 out.WriteLine()
57End Sub
58
[542]59'OutputEventHandlerCode("PaintDC", "PaintDCEventHandler",
[473]60' "ウィンドウの描画が必要なときに呼び出されます。")
61
[559]62Sub MakeControlEvent(t As String, isStatic = False As Boolean)
[473]63 Dim event As String, handler As String, comment As String
64 Dim n As DWord, i As DWord
65 /*Using*/ Dim in = New StreamReader(t + "EventList.txt")
66 /*Using*/ Dim out = New StreamWriter(t + "Event.sbp")
67 Do
68 Dim s = in.ReadLine
69 If IsNothing(s) Then
70 Exit Do
71 End If
72 If s[0] = Asc("'") Then Continue
73 Dim a = ActiveBasic.Strings.Detail.Split(s, 9) 'Tab
74 If a.Count >= 3 Then
[615]75 OutputEventHandlerCode(out, a.Item[0], a.Item[1], a.Item[2], isStatic)
[473]76 End If
77 Loop
78 in.Close() 'End Using
79 out.Close() 'End Using
80End Sub
81
82MakeControlEvent("Control")
[545]83MakeControlEvent("Form")
[559]84MakeControlEvent("Application", True)
[473]85End
Note: See TracBrowser for help on using the repository browser.