| Sicherlich ausbaufähig - aber mich persönlich stört lo muy si yo el ganzen Editor no mehr benutzen kann sólo porque el SuchenFenster en es, o. si yo sólo en uno einzigen Instanz suchen kann.
Nun puede ser z.B. Strg+F drücken, TEST eingeben & [enter] drücken, otra vez STRG+F drücken, BLUP eingeben, usw. usw..
Hiermit el problema es vom Tisch - tal vez una Anfang... KompilierenMarcaSeparación!
======================
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 necesario entonces folgende Los cambios:
El: KompilierenMarcaSeparaciónmuss inkludiert voluntad.
El Proc Suchen muss ausgetausch voluntad: KompilierenMarcaSeparación Und en él Hauptschleife des Progammes muss encima: KompilierenMarcaSeparaciónesta Línea eingefügt voluntad: KompilierenMarcaSeparación Im Hauptprogramm muss entonces: KompilierenMarcaSeparaciónen KompilierenMarcaSeparaciónersetzt voluntad.
Tal vez baut Roland sí algo como oder qué Ähnliches una.
Besonders el el Editor no blockiert es finde Yo muy praktisch! |
|