| Sicherlich ausbaufähig - aber mich persönlich stört es sehr wenn ich den ganzen Editor nicht mehr benutzen kann nur weil das SuchenFenster auf ist, bzw. wenn ich nur in einer einzigen Instanz suchen kann.
Nun kann man z.B. Strg+F drücken, TEST eingeben & [enter] drücken, wieder STRG+F drücken, BLUP eingeben, usw. usw..
Hiermit ist das Problem vom Tisch - vielleicht ein Anfang... KompilierenMarkierenSeparieren!
======================
IFFindReplace-Klasse
======================
XPrfEditFindReplaceClass.prf
DEF &XFRepl.MaxInstancesCount 5
Class XFRepl = +XFRepl@,
+exit@,
-hide@,
-show@,
-checkActivity@,
+dlg&,
-bClose&,
-bWeit&,
+cCase&,
+cWord&,
-cVor&,
+cZur&,
+eSuch&,
-eFlag&,
-Id&,
-instance&,
+isVisible&
Declare XFRepl.Dlg.Width&,
XFRepl.Dlg.Height&,
XFRepl.h#[&XFRepl.MaxInstancesCount]
Proc XFRepl.XFRepl
parameters instance&
XFRepl.Dlg.Width&=364
XFRepl.Dlg.Height&=110+%cycaption
.instance&=instance&
.DLG& = CREATE("DIALOG",%HWND,"Suchen nach",%maxx,%maxy,640,480)
showwindow(.DLG&,0)
CREATE("TEXT",.DLG&,"&Suchen nach:",15,12,70,20)
.eSuch& = CREATE("EDIT", .DLG&,"", 88, 12, 170, 20)
.bWeit& = CREATE("DEFBUTTON", .DLG&, "&Weitersuchen", 268, 11, 80, 22)
.cCase& = CREATE("CHECKBOX", .DLG&,"&Groß-/Kleinschreibung", 15, 50, 150, 20)
.cWord& = CREATE("CHECKBOX", .DLG&,"&Nur ganzes Wort suchen", 15, 75, 150, 20)
CREATE("GROUPBOX", .DLG&, "Such&richtung", 170, 40, 90, 60)
.cZur& = CREATE("RADIOBUTTON", .DLG&, "nach &oben", 175, 55, 80, 20)
.cVor& = CREATE("RADIOBUTTON", .DLG&, "nach &unten", 175, 75, 80, 20)
.bEsc& = CREATE("BUTTON", .DLG&, "&Abbruch", 268, 38, 80, 22)
.bClose&= CREATE("BUTTON",.DLG&, "&Schliessen", 268, 78, 80, 22)
.show()
endproc
proc XFRepl.Show
declare y&
y&=(%wintop+(XFRepl.Dlg.Height&+20)*.instance&)
case (y&>%winbottom-100) : y&=%winbottom-100
setwindowpos .dlg&=(%winright-50-XFRepl.Dlg.Width&),y& - XFRepl.Dlg.Width&,XFRepl.Dlg.Height&
SetCheck .cVor&, 1
SetCheck .cCase&,0
SetCheck .cWord&,0
SetText .eSuch&,""
showwindow(.dlg&,1)
setfocus(.eSuch&)
SendMessage(.eSuch&,~em_SetSel,0,-1)
.isVisible&=1
endproc
proc XFRepl.Hide
showwindow(.dlg&,0)
setactivewindow(%hwnd)
.isVisible&=0
endproc
proc XFRepl.checkActivities
whileloop &XFRepl.MaxInstancesCount
if Typeof(XFRepl.h#[&loop])="o"
if (XFRepl.h#[&loop].isVisible&)
select XFRepl.h#[&loop].checkActivity()
caseof 1
If Edit#[AktTab%].Search(gettext$(XFRepl.h#[&loop].eSuch&),getcheck(XFRepl.h#[&loop].cWord&), getcheck(XFRepl.h#[&loop].cCase&), GetCheck(XFRepl.h#[&loop].cZur&)) = -1
Messagebox("q" + gettext$(XFRepl.h#[&loop].eSuch&) + "q nicht gefunden!","Information",64)
setactivewindow(XFRepl.h#[&loop].dlg&)
setfocus(XFRepl.h#[&loop].eSuch&)
SendMessage(XFRepl.h#[&loop].eSuch&,~em_SetSel,0,-1)
endif
otherwise
endselect
endif
endif
wend
endproc
proc XFRepl.checkActivity
casenot getactivewindow()=.dlg& : return
if %key=2
.hide()
setmenuitem 0
whileloop &XFRepl.MaxInstancesCount,1,-1
if Typeof(XFRepl.h#[&loop])="o"
if (XFRepl.h#[&loop].isVisible&)
setactivewindow(XFRepl.h#[&loop].dlg&)
setfocus(XFRepl.h#[&loop].eSuch&)
SendMessage(XFRepl.h#[&loop].eSuch&,~em_SetSel,0,-1)
break
endif
endif
wend
return 0
elseif Clicked(.bClose&) or Clicked(.bWeit&) or (%KEY = 13)
if Clicked(.bClose&)
.hide()
setmenuitem 0
whileloop &XFRepl.MaxInstancesCount,1,-1
if Typeof(XFRepl.h#[&loop])="o"
if (XFRepl.h#[&loop].isVisible&)
setactivewindow(XFRepl.h#[&loop].dlg&)
setfocus(XFRepl.h#[&loop].eSuch&)
SendMessage(XFRepl.h#[&loop].eSuch&,~em_SetSel,0,-1)
break
endif
endif
wend
return 0
endif
if %key=13
setfocus(.eSuch&)
SendMessage(.eSuch&,~em_SetSel,0,-1)
endif
.eflag&=0
if GetText$(.eSuch&)>""
return 1
endif
endif
endproc
Proc XFRepl.exit
destroywindow(.bClose&)
destroywindow(.bEsc&)
destroywindow(.bWeit&)
destroywindow(.cCase&)
destroywindow(.cWord&)
destroywindow(.cVor&)
destroywindow(.cZur&)
destroywindow(.eSuch&)
destroywindow(.dlg&)
endproc
Im Hauptprogramm müssen dann folgende Änderungen:
Die: KompilierenMarkierenSeparierenmuss inkludiert werden.
Die Proc Suchen muss ausgetausch werden: KompilierenMarkierenSeparieren Und in er Hauptschleife des Progammes muss über: KompilierenMarkierenSeparierendiese Zeile eingefügt werden: KompilierenMarkierenSeparieren Im Hauptprogramm muss dann noch: KompilierenMarkierenSeparierenin KompilierenMarkierenSeparierenersetzt werden.
Vielleicht baut Roland ja sowas oder was Ähnliches ein.
Besonders das der Editor nicht blockiert ist finde ich sehr praktisch! |
|