EditControl и много много текста

Тема в разделе "WASM.WIN32", создана пользователем dr_godsl, 4 июл 2010.

  1. dr_godsl

    dr_godsl New Member

    Публикаций:
    0
    Регистрация:
    13 дек 2009
    Сообщения:
    60
    Доброго времени суток уважаемые форумчане.

    Есть приложение и есть в нем функция конвертирования бинарных данных в текстовый вид, аля BinToHEX.
    В памяти бинарные данные конвертируются быстро (многопоточность), но у меня проблема с отображением выходных данных в EditControl'e, при больших объемах входных данных. Подопытный файл имеет размер ~ 1Мб, т.е. выходных данных получается ~4мб (UNICODE).

    WM_SETTEXT работает медленно (ОЧЕНЬ медленно), что не есть гут.

    Пробовал так,

    Код (Text):
    1.     invoke SendMessage,func(GetDlgItem,hdialog,IDE_RESULT),EM_GETHANDLE,0,0
    2.     invoke LocalFree,eax
    3.    
    4.     mov ecx,fSize ;размер входных данных
    5.     shl ecx,2      
    6.     add ecx,2
    7.     mov pmem,func(LocalAlloc,LMEM_MOVEABLE or LMEM_ZEROINIT,ecx)
    8.     invoke LocalLock,pmem
    9.         mov edi,eax
    10.         mov esi,pOut
    11.         mov ecx,fSize
    12.         shl ecx,1
    13.         rep movsw
    14.     invoke LocalUnlock,pmem
    15.     invoke SendMessage,func(GetDlgItem,hdialog,IDE_RESULT),EM_SETHANDLE,pmem,0 ; и тут прога уходит в глубокий даун
    Так уже быстрее, но все равно не то, 4Мб вставляются > 10 мин.

    Вопрос, есть ли способы быстрого отображения большого количества текста в EditControl?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    свой контрол? :)
    ну или поискать готовые либы, проблема достаточно распространенная
     
  3. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Попробуйте RichEdit (а может static? :)), обычный edit явно тормознутый. Открыть в блокноте файл в несколько мегабайт - огромная проблема. Если не поможет, то выход один - писать свой контрол. Если он используется только для вывода текста, то это несложно должно быть.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    dr_godsl
    Отображайте данные частями. Не обрабатывайте сто страниц из ста, а только текущую, которая должна отображаться.
     
  5. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    RichEdit однозначно решает эту проблему
     
  6. dr_godsl

    dr_godsl New Member

    Публикаций:
    0
    Регистрация:
    13 дек 2009
    Сообщения:
    60
    Были такие мысли, в ожидании более простого решения делать не стал.
    Заюзал RichEdit, результатом приятно удивлен.

    Всем спасибо вопрос решен.