Сам себе нумератор

 


Вернулся к старой идее - автонумерации строк. Один код заработал сразу:

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
  StringGadget(1,10,10,480,230,"Testzeile", #ES_MULTILINE | #ES_AUTOVSCROLL|#WS_VSCROLL|#ESB_DISABLE_LEFT|#ESB_DISABLE_RIGHT)
  
  t$=""
  ReadFile(0,"stihi.txt")
  While Not Eof(0)
    t$=t$+ReadString(0,#PB_UTF8)+#CRLF$
  Wend
  SetGadgetText(1,t$)
  CloseFile(0)
  
  ;number todo check empty string
  t$=GetGadgetText(1)
  li=CountString(t$,#CRLF$)
  t$=InsertString(t$,"1.",1)
  n=2
  i=0
  ;ShowMemoryViewer(@t$,1024)
  While i<Len(t$)
    ;Debug "-"+Mid(t$,i,2)+"-"
    If Mid(t$,i,2)=#CRLF$
      i+2
      t$=InsertString(t$,Str(n)+".",i)
      ;Debug t$
      n+1
      ;i+4
      ;End
    EndIf
    i+1
  Wend
  
  ;Debug t$
  SetGadgetText(1,t$)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


А теперь захотелось попробовать нумерацию с использованием сообщений для многострочного Edit text control, но заработало не сразу:

  t$=GetGadgetText(#f)
  ln=SendMessage_(he,#EM_GETLINECOUNT,0,0)
  ;SendMessage_(he,#EM_SETSEL,0,Len(t$)) не работает
  ;SendMessage_(he,#EM_SETSEL,1,20)
  For i=0 To ln-1
    of=SendMessage_(he,#EM_LINEINDEX,i,0)
    ;Debug of
    SendMessage_(he,#EM_SETSEL,of,of)
    n$=Str(i+1)+"."
    SendMessage_(he,#EM_REPLACESEL,1,n$)
  Next i
#f - это и есть тот гаджет. Но проблему удалось решить, причину странного поведения я так и не выяснил. Через пару дней допишу прогу до конца.

Дополнение. версия 0.1

Комментарии