grooveli 发表于 2010-10-7 22:01:33

祝贺大鸟论坛开张,发个purebasic源码,mini正则调试小工具

本帖最后由 grooveli 于 2010-10-7 22:53 编辑


; 迷你正则表达式小助手1.0copyright groovelihttp://www.8do8.com
Declare BalloonTip(WindowID, Gadget, Text$ , Title$, Icon)
Declare Open_Window_0()
Declare ReadCatalog(Filename$)
Declare StrProc_0(hWnd, uMsg, wParam, lParam)
Declare StrProc_1(hWnd, uMsg, wParam, lParam)
;- Window Constants
;
Enumeration
      #Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
      #Combo_0
      #Frame3D_0
      #Frame3D_1
      #String_0
      #Text_0
      #String_1
      #Text_3
      #String_2
      #Frame3D_2
      #Text_4
      #String_3
      #String_4
      #Frame3D_3
      #Text_5
      #String_5
      #String_6
      #Button_0
      #Button_1
      #Link_0
EndEnumeration
GlobalFontID1 = LoadFont(1, "Tahoma", 8)
Global Dim Language$(11)
Global StrProc_0,StrProc_1

Procedure BalloonTip(WindowID, Gadget, Text$ , Title$, Icon)
      ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID,0,GetModuleHandle_(0),0)
      SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
      SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
      SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
      Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
      Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
      Balloon\hWnd=GadgetID(Gadget)
      Balloon\uId=GadgetID(Gadget)
      Balloon\lpszText=@Text$
      SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
      If Title$ > ""
            SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
      EndIf
EndProcedure
Procedure Open_Window_0()
      If OpenWindow(#Window_0, 780, 243, 393, 465, "Mini RegularEXP Tools1.00",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
            If CreateGadgetList(WindowID(#Window_0))
                  ComboBoxGadget(#Combo_0, 18, 141, 313, 150, #PB_ComboBox_Editable)
                  BalloonTip(GadgetID(#Combo_0), #Combo_0, Language$(0), "", #TOOLTIP_NO_ICON)
                  Frame3DGadget(#Frame3D_0, 8, 123, 378, 50, Language$(1))
                  Frame3DGadget(#Frame3D_1, 8, -2, 378, 124, Language$(2))
                  StringGadget(#String_0, 18, 12, 358, 100, "",#ES_MULTILINE|#WS_VSCROLL|#WS_HSCROLL)
                  StrProc_0 = SetWindowLong_(GadgetID(#String_0), #GWL_WNDPROC, @StrProc_0())
                  BalloonTip(GadgetID(#String_0), #String_0, Language$(3), "", #TOOLTIP_NO_ICON)
                  TextGadget(#Text_0, 14, 187, 66, 16, Language$(4))
                  StringGadget(#String_1, 80, 185, 66, 18, "", #PB_String_ReadOnly)
                  TextGadget(#Text_3, 153, 187, 63, 16, Language$(5))
                  StringGadget(#String_2, 218, 185, 66, 18, "", #PB_String_ReadOnly)
                  Frame3DGadget(#Frame3D_2, 8, 174, 378, 134, "")
                  TextGadget(#Text_4, 289, 187, 39, 16, Language$(6))
                  StringGadget(#String_3, 330, 185, 46, 18, "", #PB_String_ReadOnly)
                  ListViewGadget(#String_4, 18, 207, 358, 92)
                  SetGadgetColor(#String_4,#PB_Gadget_FrontColor,$8B321E)
                  Frame3DGadget(#Frame3D_3, 8, 309, 378, 134, Language$(7))
                  TextGadget(#Text_5, 18, 324, 99, 16, Language$(8))
                  StringGadget(#String_5, 123, 321, 202, 21, "")
                  SetGadgetColor(#String_5,#PB_Gadget_FrontColor,$1E6CC1)
                  StringGadget(#String_6, 18, 347, 358, 89, "",#ES_MULTILINE|#WS_VSCROLL|#WS_HSCROLL)
                  StrProc_1 = SetWindowLong_(GadgetID(#String_6), #GWL_WNDPROC, @StrProc_1())
                  BalloonTip(GadgetID(#String_6), #String_6, Language$(9), "", #TOOLTIP_NO_ICON)
                  ButtonGadget(#Button_0, 336, 141, 39, 21, Language$(10),#BS_FLAT)
                  ButtonGadget(#Button_1, 337, 321, 39, 21, Language$(11),#BS_FLAT)
                  HyperLinkGadget(#Link_0,38,446,320,18,"Copyright LOADSTONE grooveli 2008.7             www.8do8.com",$AB4019)
            EndIf
            For i=0 To #Link_0
                  SetGadgetFont(i, FontID1)
            Next
      EndIf
EndProcedure
Procedure ReadCatalog(Filename$)
      If ReadFile(0, Filename$)
            If ReadString(0) = "Catalog"
                  For k=0 To 11
                        Language$(k) = ReadString(0)
                  Next
            EndIf
            CloseFile(0)
      EndIf
EndProcedure
Procedure StrProc_0(hWnd, uMsg, wParam, lParam)
      Protected result
      result = CallWindowProc_(StrProc_0, hWnd, uMsg, wParam, lParam)
      Select uMsg
            Case #WM_LBUTTONDBLCLK
                  Pattern$ = "Text (*.txt)|*.txt;*.bat|All files (*.*)|*.*"
                  PatternPS = 0
                  File$ = OpenFileRequester("Please choose file to open", "", Pattern$, PatternPS)
                  If File$
                        ;MessageRequester("Information", "You have selected following file:" + Chr(10) + File$, 0)
                        If ReadFile(0,File$)
                              length = Lof(0)
                              *MemoryID = AllocateMemory(length)
                              If *MemoryID
                                    ReadData(0, *MemoryID, length)
                              EndIf
                              CloseFile(0)
                              SetGadgetText(#String_0,PeekS(*MemoryID,length,#PB_Ascii))
                        EndIf
                  EndIf
      EndSelect
      ProcedureReturn result

EndProcedure


grooveli 发表于 2010-10-7 22:02:30



Procedure StrProc_1(hWnd, uMsg, wParam, lParam)

      Protected result
      result = CallWindowProc_(StrProc_1, hWnd, uMsg, wParam, lParam)
      Select uMsg
            Case #WM_LBUTTONDBLCLK
                  Pattern$ = "Text (*.txt)|*.txt;*.bat|All files (*.*)|*.*"
                  PatternPS = 0
                  File$ = SaveFileRequester("Please choose file to save", "", Pattern$, PatternPS)
                  If File$
                        ;MessageRequester("Information", "You have selected following file:" + Chr(10) + File$, 0)
                        If OpenFile(0,File$)
                              Temp.s = GetGadgetText(#String_6)
                              WriteString(0,Temp)
                              CloseFile(0)
                        EndIf
                  EndIf
      EndSelect
      ProcedureReturn result
EndProcedure

Procedure GoMatch()
      Flag=0
      RegTxt.s=GetGadgetText(#Combo_0)
      If RegTxt<>""
            For i =0 To CountGadgetItems(#Combo_0)-1
                  If RegTxt=GetGadgetItemText(#Combo_0,i)
                        Flag=1
                        Break
                  EndIf
            Next
            If Flag=0
                  AddGadgetItem(#Combo_0,-1,RegTxt)
                  File$=GetCurrentDirectory()+"Reg.ini"
                  If FileSize(File$)<>0
                        If OpenFile(0,File$)
                              FileSeek(0,Lof(0))
                              WriteStringN(0,RegTxt)
                              CloseFile(0)
                        EndIf
                  Else
                        If CreateFile(0,File$)
                              WriteStringN(0,RegTxt)
                              CloseFile(0)
                        EndIf
                  EndIf
            EndIf

            If CreateRegularExpression(0,RegTxt)
                  Match=MatchRegularExpression(0,GetGadgetText(#String_0))
                  Debug Match
                  IfMatch
                        Dim Result$(0)
                        No=ExtractRegularExpression(0,GetGadgetText(#String_0),Result$())
                        SetGadgetText(#String_1,"Ture")
                        SetGadgetText(#string_2,Str(No))
                        ClearGadgetItemList(#string_4)
                        For i=0 To No-1
                              AddGadgetItem(#String_4,-1,Result$(i)) ;#string_4 is a listviewgadget!
                        Next
                        SetGadgetText(#string_4,OutPut$)
                  Else
                        SetGadgetText(#String_1,"False")
                        SetGadgetText(#string_2,Str(0))
                        ClearGadgetItemList(#string_4)
                  EndIf
                  FreeRegularExpression(0)
            Else
                  MessageRequester("Error!",RegularExpressionError())
            EndIf
      Else
            MessageRequester("error!","Please input a RegularExpression first :)")
            SetActiveGadget(#Combo_0)
      EndIf


EndProcedure

Procedure GoReplace()
      RegTxt.s=GetGadgetText(#Combo_0)
      If RegTxt<>""
            If CreateRegularExpression(0,RegTxt)
                  Match=MatchRegularExpression(0,GetGadgetText(#String_0))
                  Debug Match
                  IfMatch
                        Result$=ReplaceRegularExpression(0,GetGadgetText(#String_0),GetGadgetText(#String_5))
                        SetGadgetText(#String_6,Result$)
                  EndIf
                  FreeRegularExpression(0)
            Else
                  MessageRequester("Error!",RegularExpressionError())
            EndIf
      Else
            MessageRequester("error!","Please input a RegularExpression first :)")
            SetActiveGadget(#Combo_0)
      EndIf
EndProcedure

;{ini()
; Procedure Ini()
;       File$=GetCurrentDirectory()+"Reg.ini"
;       If FileSize(File$)<>0
;             If ReadFile(0,File$)
;                   ClearGadgetItemList(#Combo_0)
;                   While Eof(0)=0
;                         AddGadgetItem(#Combo_0,-1,ReadString(0))
;                   Wend
;                   CloseFile(0)
;             EndIf
;       EndIf
; EndProcedure
;}

Restore BaseLanguage
For k=0 To 11
      Read.s Language$(k)
Next

; DataSection
;       BaseLanguage:
;       Data$ "Input a RegularExpression:)"
;       Data$ "RegularExpression"
;       Data$ "Text"
;       Data$ "Double click to open a text file :)"
;       Data$ "Match result:"
;       Data$ "Match total:"
;       Data$ "Length:"
;       Data$ "Replace"
;       Data$ "Input replace string:"
;       Data$ "Double click to save file :)"
;       Data$ "Go"
;       Data$ "Go"
;   EndDataSection

DataSection
      BaseLanguage:
      Data$ "输入正则表达式:)"
      Data$ "正则表达式"
      Data$ "文本"
      Data$ "双击打开一个文本文件 :)"
      Data$ "匹配结果:"
      Data$ "匹配总数:"
      Data$ "长度:"
      Data$ "替换"
      Data$ "输入替换字符串:"
      Data$ "双击保存到文件 :)"
      Data$ "Go"
      Data$ "Go"
EndDataSection

Open_Window_0()
;Ini()


Repeat ; Start of the event loop

      Event = WaitWindowEvent() ; This line waits until an event is received from Windows

      WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures

      GadgetID = EventGadget() ; Is it a gadget event?

      EventType = EventType() ; The event type

      ;You can place code here, and use the result as parameters for the procedures

      If Event = #PB_Event_Gadget

            If GadgetID = #Combo_0

            ElseIf GadgetID = #String_4
                  Temp.s=GetGadgetItemText(#String_4,GetGadgetState(#string_4))
                  SetGadgetText(#String_3,Str(Len(Temp)))

            ElseIf GadgetID = #Button_0
                  GoMatch()

            ElseIf GadgetID = #Button_1
                  GoReplace()
            ElseIf GadgetID = #Link_0
                  ShellExecute_(#Null,"open","Http://www.8do8.com/",#NULL$,#NULL$,#SW_SHOWMAXIMIZED)
            EndIf

      EndIf

Until Event = #PB_Event_CloseWindow ; End of the event loop

End

admin 发表于 2010-10-7 22:58:59

这个论坛还有行号功能?

grooveli 发表于 2010-10-7 23:00:49

admin 发表于 2010-10-7 22:58 static/image/common/back.gif
这个论坛还有行号功能?

有啊,呵呵
用 代码就出来了

小夜 发表于 2010-10-14 14:44:47

我看我 ID是多少

微凉清风 发表于 2010-10-19 01:05:08

:(貌似不错
页: [1]
查看完整版本: 祝贺大鸟论坛开张,发个purebasic源码,mini正则调试小工具