Bin gerade dabei den nichtmodalen FindText Dialog auszuprobieren
Funktioniert auch alles soweit, bis auf eine Kleinigkeit
Die Dialogbox mag keine Tab Taste und wenn der Focus auf "weiter" steht kein Return
Was habe ich vergessen ?????
Code: Alles auswählen
Enumeration
#win
#db1
EndEnumeration
; ----------------------------------------------
Procedure LvGetCols(id)
Protected head = SendMessage_(id, #LVM_GETHEADER, 0, 0)
Protected cols = SendMessage_(head, #HDM_GETITEMCOUNT, 0, 0)
ProcedureReturn cols
EndProcedure
Procedure.s LvGetItem(pbnr, item, cols)
Protected j, x$ = ""
For j = 0 To cols
x$ + GetGadgetItemText(pbnr, item, j) + #LF$
Next
ProcedureReturn x$
EndProcedure
; ----------------------------------------------
Procedure.i LvSuchenStart(hDlg, *p)
Static lvposi
Protected *fr.FINDREPLACE = *p
Protected ok, lvnr, cols, found
Protected such$, satz$
ok = GetDlgItemText_(hDlg, 1152, *fr\lpstrFindWhat, *fr\wFindWhatLen)
If ok
such$ = PeekS(*fr\lpstrFindWhat)
lvnr = *fr\lCustData
cols = LvGetCols(GadgetID(lvnr))
found = -1
For j = lvposi To CountGadgetItems(lvnr)
satz$ = LvGetItem(lvnr, j, cols)
If FindString(satz$, such$, 0) ;:Debug satz$
found = j ;:Debug found
Break
EndIf
Next
If found > -1
SetGadgetState(lvnr, found)
SendMessage_(GadgetID(lvnr), #LVM_ENSUREVISIBLE, found, 1)
lvposi = found + 1
Else
lvposi = 0
MessageRequester("", "nix gefunden")
EndIf
EndIf
EndProcedure
Procedure.i LvSuchenCB(hDlg, message, wparam, lparam)
Static *fr.FINDREPLACE
Protected button
Select message
Case #WM_INITDIALOG
*fr = lparam
SetWindowPos_(hDlg, 0, 200, 400, 0,0,#SWP_NOSIZE)
ShowWindow_(hDlg,1)
Case #WM_COMMAND
button = wparam & $ffff
Select button
Case 1: ;Debug "weitersuchen"
LvSuchenStart(hDlg, *fr)
; Case 2: Debug "abbrechen"
; Case 1152: Debug "Stringgadget" ;$480
; Case 1040: Debug "ganzes Wort"
; Case 1041: Debug "Groß Klein"
; Case 1056: Debug "oben"
; Case 1057: Debug "unten"
EndSelect
; Default: DebugL(message)
EndSelect
ProcedureReturn 0
EndProcedure
Procedure.i LvSuchen(hwnd, lvnr)
Static fr.FINDREPLACE ;muß static sein !!!!!!
szFindWhat.s{80} ;buffer receiving string
szFindWhat = "Bremer" ;vorgabe
fr\lStructSize = SizeOf(FINDREPLACE)
fr\hwndOwner = hwnd
fr\lpstrFindWhat = @szFindWhat
fr\wFindWhatLen = SizeOf(szFindWhat)
fr\Flags = #FR_HIDEUPDOWN|#FR_HIDEWHOLEWORD|#FR_ENABLEHOOK
fr\lpfnHook = @LvSuchenCB()
fr\lCustData = lvnr
hdlg = FindText_(fr)
EndProcedure
;Debug RegisterWindowMessage_("FINDMSGSTRING")
Dim subitem$(3,2)
Restore LvItemsData
For j = 0 To 3: Read.s subitem$(j,0): Next
For j = 0 To 3: Read.s subitem$(j,1): Next
For j = 0 To 3: Read.s subitem$(j,2): Next
hwnd = OpenWindow(#win, 50, 100, 555, 340, "Test", #PB_Window_SystemMenu)
ButtonGadget(#db1, 22, 300, 111, 33, "Dialog Suchen")
flag = #PB_ListIcon_GridLines
flag | #PB_ListIcon_FullRowSelect
flag | #PB_ListIcon_AlwaysShowSelection
lvnr = ListIconGadget(#PB_Any, 10, 10, 535, 280, "Sp 0", 50, flag)
AddGadgetColumn(lvnr, 1, "Sp 1", 200)
AddGadgetColumn(lvnr, 2, "Sp 2", 200)
AddGadgetColumn(lvnr, 3, "Sp 3", 200)
For j = 0 To 39
a$ = Str(j) + #LF$
a$ + subitem$(Random(3), 0) + #LF$
a$ + subitem$(Random(3), 1) + #LF$
a$ + subitem$(Random(3), 2) + #LF$
AddGadgetItem(lvnr, -1, a$)
Next
Repeat: event = WaitWindowEvent()
If event = #PB_Event_Gadget Or event = #PB_Event_Menu
wB = EventGadget()
Select wB
Case #db1: LvSuchen(hwnd, lvnr)
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
End
DataSection
LvItemsData:
Data.s "Bremer", "Meier", "Schulze", "Müller"
Data.s "Hamburg", "Berlin", "München", "Bremen"
Data.s "83", "67", "74", "92"
EndDataSection