gbNotes
#1
A while back I asked about CRM app recommendations. Not having found something as simple as I wanted, I wrote my own and have been using it the last couple of months. 

I still have a list of changes I want to make to it, but since I've been using for a while now, I guess it's worth offering up to anyone who wants it.

Discussion:  
Source Code:  https://garybeene.com/files/gbnotes.zip

[Image: gbnotes.png]


Code:
'Compilable Example:  Requires JOSE includes.
#Compile Exe  "gbnotes.exe"
#Dim All

#Debug Error On
#Debug Display On

%Unicode = 1
#Include "Win32API.inc"

$Ver = "1.0"
$Delim = "++++"

#Resource Icon xlogo, "icons\n.ico"
#Resource Icon xsave, "icons\save.ico"
#Resource Icon xnew, "icons\new.ico"
#Resource Icon xdelete, "icons\delete.ico"
#Resource Icon xsearch, "icons\search.ico"
#Resource Icon xall, "icons\all.ico"
#Resource Icon xsaveall, "icons\saveall.ico"
#Resource Icon xplus, "icons\listplus.ico"
#Resource Icon xup, "icons\searchup.ico"
#Resource Icon xdown, "icons\searchdown.ico"
#Resource Icon xexit, "icons\exit.ico"

%MultiLineREStyle_Wrap    = %WS_Child Or %WS_ClipSiblings Or %WS_Visible Or %ES_MultiLine Or %WS_VScroll Or _
                            %ES_AutoVScroll Or %ES_WantReturn Or %ES_NoHideSel Or %WS_TabStop Or %ES_SaveSel

Enum Equates Singular
   IDC_ComboBox = 500
   IDC_ListView
   IDC_RichEdit
   IDC_Toolbar
   IDC_StatusBar
   IDT_SaveCFN
   IDT_New
   IDT_Delete
   IDT_Search
   IDT_InsertDelimiter
   IDT_ShowAll
   IDT_AllContacts
   IDT_SaveAll
'   IDT_Sort
   IDT_Exit
   IDT_Mute
   IDT_InsertDate
   IDT_SetFocusRE
   IDT_SearchUP
   IDT_SearchDown
   IDT_NextREDown
   IDT_PrevREUp

   IDC_InputTextBox
   IDC_InputOk
   IDC_InputCancel

End Enum

Global hDlg, hRichEdit, hListView, hComboBox, hList, hDlgI As Dword
Global D() As String, REText$, SearchTerm$, SearchTerms$
Global RESearchTerm As WStringZ * 100
Global SearchDirection, BackupNumber, CFN, iSkip, Maximized, Minimized, Mute As Long

Function PBMain() As Long

   Dialog Default Font "Arial Black", 16,1
   Dialog New Pixels, 0, "gbNotes " + $Ver,,,800,800, %WS_OverlappedWindow To hDlg
   Dialog Set Icon hDlg, "xlogo"

   Control Add ComboBox, hDlg, %IDC_ComboBox,, 10,10,400,200, %CBS_Simple Or %CBS_NoIntegralHeight Or %WS_VScroll Or %WS_TabStop, %WS_Ex_ClientEdge
   Control Handle hDlg, %IDC_ComboBox To hComboBox

   Control Add ListView, hDlg, %IDC_ListView, "",10,40,400,400, %WS_TabStop Or %LVS_Report Or %LVS_ShowSelAlways Or %LVS_SingleSel, %WS_Ex_ClientEdge
   ListView Insert Column hDlg, %IDC_ListView, 1,"All Contacts",400,0
   ListView Insert Column hDlg, %IDC_ListView, 2,"Position",150,0
   Control Handle hDlg, %IDC_ListView To hListView

   LoadLibrary("msftedit.dll")
   Control Add "RichEdit50W", hDlg, %IDC_RichEdit, "", 410,10,400,400, %MultiLineREStyle_Wrap, %WS_Ex_ClientEdge
   Control Handle hDlg, %IDC_RichEdit To hRichEdit
   SendMessage hDlg, %EM_SetEventMask, 0, %ENM_SelChange
   SendMessage hRichEdit, %EM_SetEventMask, 0, %ENM_SelChange Or %ENM_Link
   SendMessage hRichEdit, %EM_AUTOURLDETECT, %True, 0

   Control Add Toolbar, hDlg, %IDC_Toolbar, "", 0,0,0,0,%CCS_NoMoveY
   ImageList New Icon 32,32,32,10 To hList
   ImageList Add Icon hList, "xsearch"  '1
   ImageList Add Icon hList, "xsave"    '2
   ImageList Add Icon hList, "xnew"     '3
   ImageList Add Icon hList, "xdelete"  '4
   ImageList Add Icon hList, "xall"     '5
   ImageList Add Icon hList, "xsaveall" '6
   ImageList Add Icon hList, "xplus"    '7
   ImageList Add Icon hList, "xexit"    '8
   ImageList Add Icon hList, "xup"      '9
   ImageList Add Icon hList, "xdown"    '10

   Toolbar Set ImageList hDlg, %IDC_Toolbar, hList, 0
   Toolbar Add Button hDlg, %IDC_Toolbar, 8, %IDT_Exit, %TbStyle_Button, "Exit"
   Toolbar Add Button hDlg, %IDC_Toolbar, 5, %IDT_AllContacts, %TbStyle_Button, "All"
   Toolbar Add Button hDlg, %IDC_Toolbar, 2, %IDT_SaveCFN, %TbStyle_Button, "Save"
   Toolbar Add Button hDlg, %IDC_Toolbar, 3, %IDT_New, %TbStyle_Button, "New"
   Toolbar Add Button hDlg, %IDC_Toolbar, 4, %IDT_Delete, %TbStyle_Button, "Delete"

   Toolbar Add Separator hDlg, %IDC_Toolbar, 50

   Toolbar Add Button hDlg, %IDC_Toolbar, 5, %IDT_ShowAll, %TbStyle_Button, "Show All"
   Toolbar Add Separator hDlg, %IDC_Toolbar, 10
   Toolbar Add Button hDlg, %IDC_Toolbar, 6, %IDT_SaveAll, %TbStyle_Button, "Save All"
   Toolbar Add Button hDlg, %IDC_Toolbar, 10, %IDT_SearchUp, %TbStyle_Button, "Up"
   Toolbar Add Button hDlg, %IDC_Toolbar, 9, %IDT_SearchDown, %TbStyle_Button, "Down"

   Control Add Statusbar, hDlg, %IDC_StatusBar, "Welcome to gbNotes!", 0,0,0,90

   Dialog Show Modal hDlg Call DlgProc
End Function

CallBack Function DlgProc() As Long
   Local pNMLV As NMListView Ptr, iRow As Long, temp$
   Select Case Cb.Msg
      Case %WM_InitDialog
         If IsFalse IsFolder("backup") Then MkDir "backup"
         Settings_INI "get"
         BuildAcceleratorTable

         LoadCRMFile       'create D() from CRM.txt
         DisplayCRMArray   'put D() into LV

         LoadComboBox
         Control Set Text hDlg, %IDC_ComboBox, SearchTerm$

         If Maximized Then Dialog Show State hDlg, %SW_Maximize  'restore Maximized state if necessary
         If Minimized Then Dialog Show State hDlg, %SW_Minimize       'restore Maximized state if necessary

         Control Set Text hDlg, %IDC_RichEdit, D(CFN)
         ListView Select hDlg, %IDC_ListView, CFN
         ListView_SetItemState hListView, CFN-1, %LVIS_Focused, %LVIS_Focused  '<--- keyboard synchronizing code
         ListView Visible hDlg, %IDC_ListView, CFN

      Case %WM_Size : Resize

      Case %WM_Command
         Select Case Cb.Ctl
'            Case %IdCancel : Dialog End hDlg
            Case %IdOk 'Enter Key
               If GetParent(GetFocus) = hComboBox Then
                  sBeep
                  Control Get Text hDlg, %IDC_ComboBox To SearchTerm$
                  Search
                  AddSearchTerm
               End If
            Case %IDC_ComboBox
               Select Case Cb.CtlMsg
                  Case %CBN_SelChange
                     'get post-selection text
                     Control Send hDlg, %IDC_ComboBox, %CB_GetCurSel, 0, 0 To iRow
                     ComboBox Get Text hDlg, %IDC_ComboBox, iRow+1 To SearchTerm$
                     Dialog Set Text hDlg, "SearchTerm = " + SearchTerm$  + "   " + Time$
                     Search
               End Select
            Case %IDT_Exit       : sBeep : Dialog End hDlg
            Case %IDT_SaveCFN    : sBeep : SaveCFN          : ST Trim$(Parse$(D(CFN),$CrLf,1)) + " saved"
            Case %IDT_New        : NewCFN                   : ST "New Contact"
            Case %IDT_Delete     : sBeep : DeleteCFN        : ST ""
            Case %IDT_Search     : sBeep : Control Get Text hDlg, %IDC_ComboBox To SearchTerm$ : Search  'ST
            Case %IDT_InsertDate : sBeep : InsertDate       : ST ""
            Case %IDT_InsertDelimiter : sBeep : InsertDelimiter : ST ""
            Case %IDT_ShowAll    : sBeep : ShowAll          : ST "All CRM.txt Loaded in Editor"
            Case %IDT_SaveAll    : sBeep : SaveAll          : ST "Editor Content saved to crm.txt"
'            Case %IDT_Sort       : sBeep : SortData
            Case %IDT_Mute       : WinBeep(275,150) : Mute Xor=1 : ST "Mute is " + IIf$(Mute,"ON","OFF")
            Case %IDT_SetFocusRE : SetFocus hRichEdit
            Case %IDT_SearchDown     : SearchDirection = 1 : FindRE : ST ""
            Case %IDT_SearchUp       : SearchDirection = 0 : FindRE
            Case %IDT_NextREDown     : sBeep : SearchDirection = 1 :    SearchText RESearchTerm, %FR_Down
            Case %IDT_AllContacts    : DisplayCRMArray

         End Select
      Case %WM_Notify
         Select Case Cb.NmId
            Case %IDC_RichEdit
               Select Case Cb.NmCode
                  Case %EN_Link : OpenLink(Cb.LParam)
               End Select
            Case %IDC_ListView
               Select Case Cb.NmCode
                  Case %LVN_ItemChanged  '%NM_Click
                     pNMLV = Cb.LParam
                     If (@pNMLV.uChanged And %LVIF_STATE) = %LVIF_STATE Then  ' if state has changed
                         If (@pNMLV.unewstate And %LVIS_SELECTED) = %LVIS_SELECTED Then
                            ListView Get Select hDlg, %IDC_ListView To iRow
                            ListView Get Text hDlg, %IDC_Listview, iRow, 2 To temp$
                            CFN = Val(temp$)
                            Control Set Text hDlg, %IDC_RichEdit, D(CFN)
                            sBeep
                         End If
                     End If
               End Select
         End Select
      Case %WM_Destroy
         SaveBackup
         Settings_INI "save"

   End Select
End Function

Sub Resize
   Local x,y,w,h,wc,hc,wt,ht As Long
   Control Get Size hDlg, %IDC_Toolbar To wt,ht
   Dialog Get Client hDlg To w,h

   Control Set Loc hDlg, %IDC_ComboBox, 10,ht+10
   Control Get Size hDlg, %IDC_ComboBox To wc,hc

   Control Set Loc hDlg, %IDC_ListView, 10,ht+hc+20
   Control Set Size hDlg, %IDC_ListView, 400, h-ht-hc-30-40

   Control Set Loc hDlg, %IDC_RichEdit, wc+15,ht+10
   Control Set Size hDlg, %IDC_RichEdit, w-wc-25,h-ht-30-30

End Sub

Function OpenLink(ByVal lpLink As Dword) As Long
   Local enlinkPtr As ENLINK Ptr, linkText As String, iReturn As Long
   Control Get Text hDlg, %IDC_RichEdit To REText$
   enlinkPtr  = lpLink
   If @enLinkPtr.Msg = %WM_LButtonUp Then
      LinkText = Mid$(REText$,@enLinkPtr.chrg.cpMin+1 To @enLinkPtr.chrg.cpMax)
      LinkText = Remove$(LinkText, Any $Cr+$Lf+$Spc)
      iReturn  = ShellExecute(hDlg, "Open", (LinkText), $Nul, $Nul, %SW_ShowNormal)
   End If
End Function

Sub LoadComboBox
   Local temp$, i As Long
   Open "searchterms.txt" For Binary As #1 : Get$ #1, Lof(1), SearchTerms$ : Close #1
   If Len(SearchTerms$) = 0 Then SearchTerms$ = "Texas" + $CrLf + "Papua New Guinea"
   SearchTerms$ = Trim$(SearchTerms$, Any $CrLf + $Spc)
   SearchTerm$ = Parse$(SearchTerms$,$CrLf,1)

   ComboBox Reset hDlg, %IDC_ComboBox
   Control Set Text hDlg, %IDC_ComboBox, SearchTerm$

   For i = 1 To Min(5,ParseCount(searchterms$,$CrLf))
      ComboBox Insert hDlg, %IDC_ComboBox, i, Parse$(SearchTerms$,$CrLf,i)
   Next i
End Sub

Sub LoadCRMFile
   Local tmp$, temp$, i,iCount As Long
   Open "crm.txt" For Binary As #1 : Get$ #1, Lof(1), temp$ : Close #1
   If Len(Trim$(temp$)) = 0 Then
      temp$ = "Gary Beene" + $CrLf + "Dallas, Texas" + $CrLf + $Delim + $CrLf + "Stuart McLachlan" + $CrLf + "Papua New Guinea"
      Open "crm.txt" For Output As #1 : Print #1, temp$; : Close #1
   End If
   iCount = ParseCount(temp$, $Delim)
   ReDim D(1 To iCount)
   Parse temp$, D(), $Delim

   For i = 1 To iCount
      D(i) = Trim$(D(i), Any $CrLf + $Spc)
      tmp$ = Parse$(D(i),$CrLf,1)
      If Trim$(tmp$) = "" Then ? "Data Issue:" + $CrLf + D(i-1)
   Next i

   ST "Records: " + Format$(iCount,"##,###")
End Sub

Sub DisplayCRMArray
   Local temp$, i As Long
   ListView Reset hDlg, %IDC_ListView
   For i = 1 To UBound(D)
      D(i) = Trim$(D(i))
      ListView Insert Item hDlg, %IDC_ListView, i,0,Parse$(D(i),$CrLf,1)
      ListView Set Text hDlg, %IDC_ListView, i,2,Format$(i)
   Next i
End Sub

Sub Search
   Local temp$, i,iCount As Long

   ListView Reset hDlg, %IDC_ListView
   For i = 1 To UBound(D)
      If InStr(LCase$(D(i)), LCase$(SearchTerm$)) Then
         Incr iCount
         ListView Insert Item hDlg, %IDC_ListView, iCount, 0, Parse$(D(i),$CrLf,1)
         ListView Set Text hDlg, %IDC_ListView, iCount, 2, Format$(i)
      End If
   Next i

   ListView Select hDlg, %IDC_ListView, 1
   ListView_SetItemState hListView, 0, %LVIS_Focused, %LVIS_Focused  '<--- keyboard synchronizing code
   ListView Set Header hDlg, %IDC_ListView, 1, "Matches: " + Format$(iCount) + "   " + $Dq + SearchTerm$ + $Dq
End Sub

Sub Settings_INI(Task$)
   Local x,y,w,h, tempz, INIFileName As WStringZ * %Max_Path, WinPla As WindowPlacement

   'set ini filename
   INIFileName = Exe.Path$ + Exe.Name$ + ".ini"    'get INI file name

   Select Case Task$
      Case "get"
         'get dialog width/height from INI file and use to set Dialog size
         GetPrivateProfileString "All", "Width", "800", w, %Max_Path, INIFileName
         GetPrivateProfileString "All", "Height", "800", h, %Max_Path, INIFileName
         Dialog Set Size hDlg,Val(w), Val(h)   'width/height

         'get dialog top/left from INI file and use to set Dialog location
         Getprivateprofilestring "All", "Left", "0", x, %Max_Path, INIFileName
         Getprivateprofilestring "All", "Top", "0",  y,  %Max_Path, INIFileName
         If IsFile(INIFileName) Then Dialog Set Loc hDlg, Val(x), Val(y)   'left/top but only once INIFileName exists

         'get value for string variables
         GetPrivateProfileString "All", "RESearchTerm", "TWC", RESearchTerm, %Max_Path, INIFileName

         'get value for numeric variables
         Getprivateprofilestring "All", "Minimized", "0", tempz, %Max_Path, INIFileName   : Minimized = Val(tempz)
         Getprivateprofilestring "All", "Maximized", "0", tempz, %Max_Path, INIFileName   : Maximized = Val(tempz)
         Getprivateprofilestring "All", "CFN", "1",       tempz, %Max_Path, INIFileName   : CFN = Val(tempz)
         Getprivateprofilestring "All", "Mute", "0",      tempz, %Max_Path, INIFileName   : Mute = Val(tempz)
         Getprivateprofilestring "All", "BackupNumber", "0",      tempz, %Max_Path, INIFileName   : BackupNumber = Val(tempz)

      Case "save"
         If IsFile(INIFileName) Then Kill INIFileName    'clear the INI file Name to remove residual entries before saving
         WinPla.Length = SizeOf(WinPla)
         GetWindowPlacement hDlg, WinPla
         WritePrivateProfileString "All", "Left", Str$(WinPla.rcNormalPosition.nLeft), INIFileName
         WritePrivateProfileString "All", "Top", Str$(WinPla.rcNormalPosition.nTop), INIFileName
         WritePrivateProfileString "All", "Width", Str$(WinPla.rcNormalPosition.nRight - WinPla.rcNormalPosition.nLeft), INIFileName
         WritePrivateProfileString "All", "Height", Str$(WinPla.rcNormalPosition.nBottom - WinPla.rcNormalPosition.nTop), INIFileName

         'save string variables
         WritePrivateProfileString "All", "RESearchTerm", RESearchTerm, INIFileName

         'save numeric variables
         Minimized = IsIconic(hDlg)
         Maximized = IsZoomed(hDlg)
         WritePrivateProfileString "All", "Minimized", Str$(Minimized), INIFileName
         WritePrivateProfileString "All", "Maximized", Str$(Maximized), INIFileName
         WritePrivateProfileString "All", "CFN", Str$(CFN), INIFileName
         WritePrivateProfileString "All", "Mute", Str$(Mute), INIFileName
         WritePrivateProfileString "All", "BackupNumber", Str$(BackupNumber), INIFileName

   End Select
End Sub

Sub SaveCFN
   Local temp$
   Control Get Text hDlg, %IDC_RichEdit To temp$

   If InStr(temp$, $Delim) Then ? "Cannot Save!" : Exit Sub

   D(CFN) = temp$
   Open "crm.txt" For Output As #1 : Print #1, Join$(D(), $CrLf + $Delim + $CrLf); : Close #1
   ListView Set Text hDlg, %IDC_ListView, CFN, 1, Parse$(D(CFN),$CrLf,1)
   SetFocus hRichEdit
End Sub

Sub ShowAll
   Control Set Text hDlg, %IDC_RichEdit, Join$(D(),$CrLf + $Delim + $CrLf)
   SendMessage hRichEdit, %EM_SetSel, 0, 0
   SetFocus hRichEdit
End Sub

Sub SaveAll
   Local temp$
   If MsgBox("Update All CRM Data?", %MB_YesNo Or %MB_IconQuestion Or %MB_TaskModal, "Update CRM") = %IdYes Then
      Control Get Text hDlg, %IDC_RichEdit To temp$
      temp$ = Trim$(temp$, Any $CrLf + " +")
      Open "crm.txt" For Output As #1
      Print #1, temp$;
      Close #1

      LoadCRMFile       'create D() from CRM.txt
      DisplayCRMArray   'put D() into LV

   End If
End Sub

Sub sBeep
   If Mute Then Exit Sub
   WinBeep(275,150)
End Sub

Sub BuildAcceleratorTable
   Local ac() As ACCELAPI, hAccelerator As Dword, c As Long  ' for keyboard accelator table values
   Dim ac(10)
   ac(c).fvirt = %FVIRTKEY Or %FCONTROL : ac(c).key   = %VK_Delete : ac(c).cmd = %IDT_Delete          : Incr c
   ac(c).fvirt = %FVIRTKEY Or %FCONTROL : ac(c).key   = %VK_D : ac(c).cmd = %IDT_InsertDate        : Incr c
   ac(c).fvirt = %FVIRTKEY Or %FCONTROL : ac(c).key   = %VK_E : ac(c).cmd = %IDT_ShowAll           : Incr c
   ac(c).fvirt = %FVIRTKEY Or %FCONTROL : ac(c).key   = %VK_F : ac(c).cmd = %IDT_SearchDown        : Incr c
   ac(c).fvirt = %FVIRTKEY Or %FCONTROL : ac(c).key   = %VK_I : ac(c).cmd = %IDT_InsertDelimiter   : Incr c
   ac(c).fvirt = %FVIRTKEY Or %FCONTROL : ac(c).key   = %VK_R : ac(c).cmd = %IDT_SetFocusRE        : Incr c
   ac(c).fvirt = %FVIRTKEY Or %FCONTROL : ac(c).key   = %VK_M : ac(c).cmd = %IDT_Mute              : Incr c
   ac(c).fvirt = %FVIRTKEY Or %FCONTROL : ac(c).key   = %VK_N : ac(c).cmd = %IDT_NextREDown        : Incr c
   ac(c).fvirt = %FVIRTKEY Or %FCONTROL : ac(c).key   = %VK_S : ac(c).cmd = %IDT_SaveCFN           : Incr c
   ac(c).fvirt = %FVIRTKEY Or %FCONTROL Or %FSHIFT : ac(c).key = %VK_F : ac(c).cmd = %IDT_SearchUp : Incr c
   ac(c).fvirt = %FVIRTKEY Or %FCONTROL Or %FSHIFT : ac(c).key = %VK_S : ac(c).cmd = %IDT_SaveAll  : Incr c
   Accel Attach hDlg, AC() To hAccelerator
End Sub

Sub InsertDelimiter
   Clipboard Reset
   Clipboard Set Text $CrLf + $Delim + $CrLf + $CrLf
   SendMessage hRichEdit, %WM_Paste, 0, 0
End Sub

Sub InsertDate
   Clipboard Reset
   Clipboard Set Text $CrLf + "Discussion: " + Date$ + "  " + Time$ + "  ---------" + $CrLf + $CrLf
   SendMessage hRichEdit, %WM_Paste, 0, 0
End Sub

'Sub SortData
'   Array Sort D(1)
'   Open "crm.txt" For Output As #1 : Print #1, Join$(D(), $CrLf + $Delim + $CrLf); : Close #1
'   LoadCRMFile       'create D() from CRM.txt
'   DisplayCRMArray   'put D() into LV
'End Sub

Sub AddSearchTerm
   Local i As Long

   'If SearchTerm alread in use, do nothing
   For i = 1 To Min(5,ParseCount(SearchTerms$,$CrLf))
      If LCase$(Parse$(SearchTerms$,$CrLf,i)) = LCase$(SearchTerm$) Then Exit Sub
   Next i

   'If new search term, add it top of the list of SearchTerms$
   SearchTerms$ = SearchTerm$ + $CrLf + SearchTerms$
   SearchTerms$ = Trim$(SearchTerms$, Any $CrLf + $Spc)
   Open "searchterms.txt" For Output As #1 : Print #1, SearchTerms$; : Close #1

   LoadComboBox
End Sub

Sub SaveBackup
   Local temp$
   temp$ = Time$
   Replace  ":" With "." In temp$
   Incr BackupNumber
   Open "backup\crm_" + Format$(BackupNumber) + "_" + Date$ + "_" + temp$ + ".txt" For Output As #1
   Print #1, Join$(D(), $CrLf + $Delim + $CrLf); : Close #1
End Sub

Sub FindRE
   GetRESearchTerm
   SearchText RESearchTerm, %FR_Down
End Sub

Function SearchText(ByVal sTextToSearchFor As WString, SearchDirection As Long) As Long
Local  FindTextText         As FINDTEXTEX
Local  NextMatch, SelStart, SelEnd As Long

SendMessage(hRichEdit, %EM_GETSEL, VarPtr(SelStart), VarPtr(SelEnd))
FindTextText.lpStrText = StrPtr(sTextToSearchFor)

If SearchDirection = 1 Then
   FindTextText.chrg.cpMin = SelEnd + 1 'Search from current position
   FindTextText.chrg.cpMax = -1         '- till the end
Else '%FR_UP
   FindTextText.chrg.cpMin = SelStart   'Search from current position
   FindTextText.chrg.cpMax = 0          '- up to the start
End If

NextMatch = SendMessage(hRichEdit, %EM_FINDTEXTEX, SearchDirection, VarPtr(FindTextText)) 'Return next match or -1 for no more

If NextMatch = -1 Then WinBeep(250,300) :Exit Function
SendMessage(hRichEdit, %EM_SETSEL, FindTextText.chrgText.cpMin, FindTextText.chrgText.cpMax)

End Function

Sub GetRESearchTerm
   Dialog New Pixels, 0, "Search RE",,,200,80, %WS_SysMenu To hDlgI
   Dialog Set Icon hDlgI, "xsearch"
   Control Add TextBox, hDlgI, %IDC_InputTextBox,RESearchTerm, 20,10,160,30
   Control Add Button, hDlgI, %IDC_InputOk, "Ok", 20,50,50,25
   Control Add Button, hDlgI, %IDC_InputCancel, "Cancel", 90,50,90,25
   RESearchTerm = ""
   Dialog Show Modal hdlgI Call hDlgIProc
End Sub

CallBack Function hDlgIProc() As Long
   Select Case Cb.Msg
      Case %WM_Command
         Select Case Cb.Ctl
            Case %IdOk    , %IDC_InputOk     : Control Get Text hDlgI, %IDC_InputTextBox To RESearchTerm : Dialog End hDlgI
            Case %IdCancel, %IDC_InputCancel : Dialog End hDlgI
         End Select
   End Select
End Function

Sub NewCFN
   ReDim Preserve D(1 To UBound(D)+1)
   D(UBound(D)) = "New Entry"
   CFN = UBound(D)

   ListView Insert Item hDlg, %IDC_ListView, CFN, 0, "New Entry " + $CrLf + "Date: " + Date$
   ListView Set Text hDlg, %IDC_ListView, CFN, 2, Format$(CFN)

   ListView Select hDlg, %IDC_ListView, CFN
   ListView_SetItemState hListView, CFN-1, %LVIS_Focused, %LVIS_Focused  '<--- keyboard synchronizing code
   ListView Visible hDlg, %IDC_ListView, CFN

   Control Set Text hDlg, %IDC_RichEdit, D(CFN)
   SetFocus hRichEdit
End Sub

Sub DeleteCFN

   If GetFocus = hListView Then
      'list of all item
      If UBound(D) = 1 Then D(1) = "New Entry" : Exit Sub
      ListView Delete Item hDlg, %IDC_ListView, CFN

      Array Delete D(CFN)
      ReDim Preserve D(UBound(D)-1)
      If CFN > UBound(D) Then CFN = CFN - 1

      Open "crm.txt" For Output As #1 : Print #1, Join$(D(), $CrLf + $Delim + $CrLf); : Close #1

      LoadCRMFile       'create D() from CRM.txt
      DisplayCRMArray   'put D() into LV

   Else
      ? "Delete Allowed Only on Main List"
   End If

End Sub

Sub ST(temp$)
   Statusbar Set Text hDlg, %IDC_StatusBar, 1, 0, temp$
End Sub


Attached Files Thumbnail(s)
   
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)