PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Программирование на PureBasic » Изменить фокус ввода


Изменить фокус ввода

Сообщений 1 страница 3 из 3

1

1.Ситуация
есть форма с кнопками и EditorGadget #Editor_1
по нажатию кнопки Start запускается процесс в другом потоке
который по мере выполнения выводит в #Editor_1 строки с сообщениями.
2.Проблема
По мере заполнения поля #Editor_1 добавленые сроки остаются за нижней границей
вне видимости.
Нужно сделать так чтобы всегда была видна последняя нижняя строка в #Editor_1.
3.Попытка решения.
Заметил что если в процессе вывода в #Editor_1 поставить мышкой курсор в конец текста - он там остается и после добавления новых строк - т.е. то что нужно.
Попытка автоматизировать это - принудительно перед началом основного процесса выполнить

SetActiveGadget(#Editor_1) ; попытка поставить активный курсор
Delay(500)

нужного результата не дала - курсор не появился, текст не сдвигался.
Хотя стоило ткнуть мышкой в любое место #Editor_1 - появлялся курсор в конце текста и далее то, что нужно!.
Т.е. тыканье мышкой как раз и переносило фокус на #Editor_1.

А что в таком случае делает SetActiveGadget(#Editor_1) ?

И как решить проблему?

0

2

Код:
Procedure Thread(x)
  For a = 0 To 50
    AddGadgetItem(0, a, "Line "+Str(a))
    SendMessage_(GadgetID(0), #EM_SETSEL, -1, -1)
    Delay(100)
  Next
EndProcedure
If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EditorGadget(0, 8, 8, 306, 133)
  CreateThread(@Thread(), 0)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

0

3

Ок. Идею понял.
почитав страничку
http://msdn.microsoft.com/en-us/library/windows/desktop/bb761661(v=vs.85).aspx
нашел более подходящее по смыслу сообщение - EM_SCROLL

хотя разницы в проявлении в моем случае не увидел.
Так же попробовал EM_SCROLLCARET.

Оставил работать след код

    ;SendMessage_(GadgetID(#Editor_1), #EM_SETSEL, -1, -1)
    SendMessage_(GadgetID(#Editor_1), #EM_SCROLL, #SB_PAGEDOWN, -1)
    ;SendMessage_(GadgetID(#Editor_1), #EM_SCROLLCARET, 0, 0)
    Repeat : Until WindowEvent()=0

0


Вы здесь » PureBasic - форум » Программирование на PureBasic » Изменить фокус ввода