Работа с Edit Control

Тема в разделе "WASM.WIN32", создана пользователем vg, 7 фев 2009.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Как при добавлении строк в edit control (invoke SendDlgItemMessage,hwin, EDT,WM_SETTEXT,0,addr str) делать перевод на новую строку после каждого добавления строки?
    Как сделать edit control неактивным для пользователя, чтобы выводить строки только программно? Похоже, это делает свойство Locked = True, но тогда edit control становится цвета окна, а мне нужно, чтобы он оставался белым.
    В общем, должно получиться как поле вывода анализа у программы CCleaner, если кто знает.
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    1) Добавить в конец добавляемой строки СR,LF = 0Dh,0Ah ;)
    2) Задать стиль ES_READONLY или при создании, или после - посылкой сообщения EM_SETREADONLY
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ты походу перепутал disabled и readonly.
    обычная комбинация \r\n, только edit box должен иметь свойство multiline
     
  4. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Как \r\n представить в masm32? Ничего не получается.

    Код (Text):
    1. string                 db"string",0
    2. string1               db"string1",0
    3.  
    4.         invoke SendDlgItemMessage,hwin,SCAN_EDT,WM_SETTEXT,0,addr string
    5.         invoke SendDlgItemMessage,hwin,SCAN_EDT,WM_SETTEXT,0,addr CRLF
    6.         invoke SendDlgItemMessage,hwin,SCAN_EDT,WM_SETTEXT,0,addr string1
    CRLF db 0dh,0ah,0 или db "\r\n",0
    результат
    MultiLine=True
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. string                 db"string",13, 10, "string1", 0
    2.  
    3.         invoke SendDlgItemMessage,hwin,SCAN_EDT,WM_SETTEXT,0,addr string
     
  6. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    n0name
    Так работает. Но как, тогда, добавлять новые строки к уже имеющимся в edit control?
     
  7. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    vg
    селектить и репласить селекшн
     
  8. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Можно пример?
     
  9. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    для такой уйни-муйни есть эдитоподобные контролы, например:
     
  10. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    EM_SETSEL - для вставки, например, в конец, оба параметра == -1
    EM_REPLACESEL - строка которую вставляете/на которую заменяете

    да. все это через SendMessage
     
  11. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    _basmp_
    Т. е. в этом случае к строке полученой из выделения добавляем новую и всё вместе, одной строкой, вставляем? Как тогда вставить 13, 10 между старой и новой строками для переноса новой?
     
  12. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    vg
    не надо ничего получать. просто вставляйте. выделение от 10 и до 10 символа тоже работает. (расчет был на чтение хелпа/мсдн + эксперименты. возможности пересказать все что там просто нету)
    сделайте в две вставки - 13, 10, 0; а потом вашу строку. или просто пририсуйте в начале вашей строки 13, 10. по выбору
     
  13. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Под
    я имел ввиду всё, что выделено и сохранено в буфере.
    Знаю. Я читал MSDN. Я просто не понимаю чем мне поможет предложеный вами вариант с EM_SETSEL и EM_REPLACESEL. В посту #6 я хотел сказать, что при использовании WM_SETTEXT, добавляя новые строки к имеющимся контроле, мне придётся хранить имеющиеся, прибавлять к ним новую строку и этим заменять имеющееся в контроле. В предложеном вами случае получается то же самое: выделяю имющееся, сохраняю, добавляю к этому новую строку, полученым заменяю имеющееся в контроле. Или я не прав? К тому же вопрос: как это (выделение, замена всего текста) будет выглядеть в работе? Мне кажется, что не очень. Хотя, могу ошибаться.
    Раньше мне казалось, что подобное должно делаться на подобие записи в файл: установка курсора в конец и добавление нового, без перезаписи всего. Так нельзя?
     
  14. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Код (Text):
    1. int iCaretPos = GetWindowTextLength (hEdit);
    2. SendMessage (hEdit, EM_SETSEL, iCaretPos, iCaretPos);
    3. SendMessage (hEdit, EM_REPLACESEL, 0, "text\r\n");
     
  15. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    еси в конец, то можно и так

    SendMessage (hEdit, EM_SETSEL, -1, -1); // вообще любое число больше длины текста в контроле перекинет в конец.

    наверно я намекнул слишком тонко. извините.
    второй намек, потолще - то что элементарно проверяется надо проверять, а не лежа не диване морочить людям голову по форумам своими предположениями. тестовая прога будет короче чем этот пост.
     
  16. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Теперь разобрался, работает. Только, после добавления строки весь текст в контроле получается выделеным? Как снять это выделение?
    Если не хотите, никто не заставляет вас отвечать.
     
  17. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    vg
    SendMessage (hEdit, EM_SETSEL, -1, -1);
    или не отвечать?

    вы бы вместо пустого огрызания вникли б во второй намек. или много чести самому пробовать? или неинтересно?
     
  18. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    :)
    Просто, иногда небольшие помехи не дают решать основные и более интересные задачи. Поэтому хочется их переступить как можно быстрее. Форум - как вариант. Я думаю, что это нормально. Иногда. В конце концов, самому можно дойти до всегои и без форума. Вопрос в том, сколько времени на это понадобится.

    Не помогает.