| |
|
|
Nico Madysa | Hallo, liebe Community!
Anbei ein kleines Programm, mit dem man schnell mit regulären Ausdrücken herumexperimentieren kann. In dem Feld für die Ausdrücke kann man auch gewohnt alle Escape-Sequenzen benutzen; wenn man also "\n" schreibt, wird dies auch als Zeilenumbruch interpretiert.
Anbei ein leicht abweichender Code; in dem Code habe ich das Zeugs entfernt, mit dem ich auf Änderungen der Fenstergröße reagiere, weil das über Subclassing und NProcs läuft und für einen kleinen Schnipsel wie diesen viel zu weit führt.
Download KompilierenMarkierenSeparieren'Sorgt dafür, dass man in muster& auch Escapesequenzen benutzen kann.
proc EscapeBS
parameters text$
text$ = Translate$(text$,"\\z","\z")
text$ = Translate$(text$,"\\a","\a")
text$ = Translate$(text$,"\\b","\b")
text$ = Translate$(text$,"\\t","\t")
text$ = Translate$(text$,"\\f","\f")
text$ = Translate$(text$,"\\r","\r")
text$ = Translate$(text$,"\\n","\n")
text$ = Translate$(text$,"\\q","\q")
whileloop 0,255
text$ = Translate$(text$,"\\x"+upper$(Hex$(&loop \ 16)+Hex$(&loop mod 16)),Chr$(&loop))
EndWhile
return Translate$(text$,"\\\\","\\")
endproc
'Aktualisiert den Titel
proc BuildTitle
if GetText$(muster&) <> ""
WindowTitle "RegEx-Tester: %MatchPos=" + str$(%MatchPos) + "; %MatchLen=" + str$(%MatchLen)
else
WindowTitle "RegEx-Tester: Kein Ausdruck!"
endif
endproc
WindowTitle "RegEx-Tester"
cls
'Error-Level versetzt, weil sonst ständig Warnungen über
'Fehler im RegEx kommen
Set("ErrorLevel",0)
Cls External("User32","GetSysColor",15)
var Input& = Create("MultiEdit",%Hwnd,"Eingabe",0,0,width(%hWnd)\2,height(%hWnd)-20)
var Output& = Create("MultiEdit",%Hwnd,"Ausgabe",width(%hWnd)\2,0,width(%hWnd)\2,height(%hWnd)-20)
var muster& = Create("Edit",%Hwnd,"RegEx-Muster",0,height(%hWnd)-20,width(%hWnd),20)
whilenot Iskey(27)
waitinput
ifnot GetFocus(Output&)
if GetText$(muster&) <> ""
SetText Output&,Match$(EscapeBS(GetText$(muster&)),GetText$(input&))
endif
BuildTitle
endif
wend
end
Anmerkungen und Korrekturen sind, wie immer, willkommen. |
| 1.381 kB | | Version: | 1 | | Kurzbeschreibung: | Programm zum Überprüfen von regulären Ausdrücken | | Hochgeladen: | 01.03.2012 | | Ladeanzahl: | | | | Herunterladen |
|
|
| |
|
|
|
| Ich glaube wenn Du in der hWnd-wProc bei wm_eraseBkGnd 1 zurückgibst (return 1) dann flickerts in Deinem Beispiel nicht beim Skalieren. ^^ |
|
|
| |
|
|
|
Nico Madysa | Dieser spezifische Schnipsel ist sehr stark von deinen Ratschlägen inspiriert und ich gebe bei WM_ERASEBKGND bereits 1 zurück.
Die Subclassproc sieht so aus: KompilierenMarkierenSeparieren
nproc hWnd.Sub
parameters wnd&,msg&,wParam&,lParam&
var ud& = GetWindowLong(wnd&,gwl_userData)
if msg& = WM_WINDOWPOSCHANGING
ifnot Long(lParam&,24) & 1'Beachtet SWP_NOSIZE
var b& = dim(16)
GetClientRect(%hWnd,b&)
var a& = BeginDeferWindowPos(3)
a& = DeferWindowPos(a&,Long(ud&,0),0,\
0,0,Long(b&,8)\2,Long(b&,12)-20,SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER)
a& = DeferWindowPos(a&,Long(ud&,4),0,\
Long(b&,8)\2,0,Long(b&,8)\2,Long(b&,12)-20,SWP_NOACTIVATE|SWP_NOZORDER)
a& = DeferWindowPos(a&,Long(ud&,8),0,\
0,Long(b&,12)-20,Long(b&,8),20,SWP_NOACTIVATE|SWP_NOZORDER)
EndDeferWindowPos(a&)
Dispose(b&)
endif
return 0
elseif msg& = WM_GETMINMAXINFO
Long lParam&,24 = 320,240
return 0
elseif msg& = WM_ERASEBKGND
return 1
endif
return CallWindowProc(Long(ud&,nsc_wndproc),wnd&,msg&,wParam&,lParam&)
endproc
Dass dort Verbesserungspotential besteht, erwarte ich geradezu. |
|
|
| |
|
|