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
Line 
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
19Sub OutputEventHandlerCode(out As TextWriter, eventName As String, argBase As String, comment As String, isStatic As Boolean)
20 Dim eventMember = EventNameToMemberVariableName(eventName)
21 Dim handlerType = argBase & "Handler"
22 Dim argsType = argBase & "Args"
23 Dim staticKeyword = Nothing As String
24 If isStatic Then staticKeyword = "Static "
25 out.WriteLine("Public")
26' out.WriteLine(Ex"\t/*!")
27' out.WriteLine(Ex"\t@brief " & eventName & "イベントハンドラを追加する")
28' out.WriteLine(Ex"\t*/")
29 out.WriteLine(Ex"\t" & staticKeyword & "Sub Add" & eventName & "(h As " & handlerType & ")")
30 out.WriteLine(Ex"\t\tIf IsNothing(" & eventMember & ") Then")
31 out.WriteLine(Ex"\t\t\t" & eventMember & " = h")
32 out.WriteLine(Ex"\t\tElse")
33 out.WriteLine(Ex"\t\t\t" & eventMember & " += h")
34 out.WriteLine(Ex"\t\tEnd If")
35 out.WriteLine(Ex"\tEnd Sub")
36' out.WriteLine(Ex"\t/*!")
37' out.WriteLine(Ex"\t@brief " & eventName & "イベントハンドラを削除する")
38' out.WriteLine(Ex"\t*/")
39 out.WriteLine(Ex"\t" & staticKeyword & "Sub Remove" & eventName & "(h As " & handlerType & ")")
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")
44 out.WriteLine("Protected")
45' out.WriteLine(Ex"\t/*!")
46' out.WriteLine(Ex"\t@brief " & comment)
47' out.WriteLine(Ex"\t*/")
48 out.WriteLine(Ex"\t" & staticKeyword & "Function On" & eventName & "(e As " & argsType & ") As Boolean")
49 out.WriteLine(Ex"\t\tIf Not IsNothing(" & eventMember & ") Then")
50 out.WriteLine(Ex"\t\t\t" & eventMember & "(This, e)")
51 out.WriteLine(Ex"\t\t\tReturn True")
52 out.WriteLine(Ex"\t\tEnd If")
53 out.WriteLine(Ex"\tEnd Function")
54 out.WriteLine("Private")
55 out.WriteLine(Ex"\t" & staticKeyword & eventMember & " As " & handlerType)
56 out.WriteLine()
57End Sub
58
59'OutputEventHandlerCode("PaintDC", "PaintDCEventHandler",
60' "ウィンドウの描画が必要なときに呼び出されます。")
61
62Sub MakeControlEvent(t As String, isStatic = False As Boolean)
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
75 OutputEventHandlerCode(out, a.Item[0], a.Item[1], a.Item[2], isStatic)
76 End If
77 Loop
78 in.Close() 'End Using
79 out.Close() 'End Using
80End Sub
81
82MakeControlEvent("Control")
83MakeControlEvent("Form")
84MakeControlEvent("Application", True)
85End
Note: See TracBrowser for help on using the repository browser.