source: trunk/Include/Classes/ActiveBasic/Windows/UI/Forms/MakeControlEventHandler.ab@ 473

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

実験として書いていたControlクラスを追加(せめてコミット前に既存のContorolに混ぜようとしたがコンパイルできなかった)。
ほかForms, Drawing及びGDI+の修正。

File size: 2.7 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)
20 Dim eventMember = EventNameToMemberVariableName(eventName)
21 Dim handlerType = argBase & "Handler"
22 Dim argsType = argBase & "Args"
23 out.WriteLine("Public")
24 out.WriteLine(Ex"\t/*!")
25 out.WriteLine(Ex"\t@brief " & eventName & "イベントハンドラを追加する")
26 out.WriteLine(Ex"\t*/")
27 out.WriteLine(Ex"\tSub Add" & eventName & "(h As " & handlerType & ")")
28 out.WriteLine(Ex"\t\tIf IsNothing(" & eventMember & ") Then")
29 out.WriteLine(Ex"\t\t\t" & eventMember & " = New " & handlerType)
30 out.WriteLine(Ex"\t\tEnd If")
31 out.WriteLine(Ex"\t\t" & eventMember & " += h")
32 out.WriteLine(Ex"\tEnd Sub")
33 out.WriteLine(Ex"\t/*!")
34 out.WriteLine(Ex"\t@brief " & eventName & "イベントハンドラを削除する")
35 out.WriteLine(Ex"\t*/")
36 out.WriteLine(Ex"\tSub Remove" & eventName & "(h As " & handlerType & ")")
37 out.WriteLine(Ex"\t\tIf Not IsNothing(" & eventMember & ") Then")
38 out.WriteLine(Ex"\t\t\t" & eventMember & " -= h")
39 out.WriteLine(Ex"\t\tEnd If")
40 out.WriteLine(Ex"\tEnd Sub")
41 out.WriteLine("Protected")
42 out.WriteLine(Ex"\t/*!")
43 out.WriteLine(Ex"\t@brief " & comment)
44 out.WriteLine(Ex"\t*/")
45 out.WriteLine(Ex"\tVirtual Sub On" & eventName & "(e As " & argsType & ")")
46 out.WriteLine(Ex"\t\tIf Not IsNothing(" & eventMember & ") Then")
47 out.WriteLine(Ex"\t\t\t" & eventMember & "(This, e)")
48 out.WriteLine(Ex"\t\tEnd If")
49 out.WriteLine(Ex"\tEnd Sub")
50 out.WriteLine("Private")
51 out.WriteLine(Ex"\t" & eventMember & " As " & handlerType)
52 out.WriteLine()
53End Sub
54
55'OutputEventHandlerCode("PaintDC", "PaintDCEventHandler",
56' "ウィンドウの描画が必要なときに呼び出されます。")
57
58Sub MakeControlEvent(t As String)
59 Dim event As String, handler As String, comment As String
60 Dim n As DWord, i As DWord
61 /*Using*/ Dim in = New StreamReader(t + "EventList.txt")
62 /*Using*/ Dim out = New StreamWriter(t + "Event.sbp")
63 Do
64 Dim s = in.ReadLine
65 If IsNothing(s) Then
66 Exit Do
67 End If
68 If s[0] = Asc("'") Then Continue
69 Dim a = ActiveBasic.Strings.Detail.Split(s, 9) 'Tab
70 If a.Count >= 3 Then
71 OutputEventHandlerCode(out, a[0], a[1], a[2])
72 End If
73 Loop
74 in.Close() 'End Using
75 out.Close() 'End Using
76End Sub
77
78MakeControlEvent("Control")
79End
Note: See TracBrowser for help on using the repository browser.