Работа с Edit Control

Discussion in 'WASM.WIN32' started by vg, Feb 7, 2009.

  1. vg

    vg New Member

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

    leo Active Member

    Blog Posts:
    0
    Joined:
    Aug 4, 2004
    Messages:
    2,542
    Location:
    Russia
    1) Добавить в конец добавляемой строки СR,LF = 0Dh,0Ah ;)
    2) Задать стиль ES_READONLY или при создании, или после - посылкой сообщения EM_SETREADONLY
     
  3. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    ты походу перепутал disabled и readonly.
    обычная комбинация \r\n, только edit box должен иметь свойство multiline
     
  4. vg

    vg New Member

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    Как \r\n представить в masm32? Ничего не получается.

    Code (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

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    Code (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

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    n0name
    Так работает. Но как, тогда, добавлять новые строки к уже имеющимся в edit control?
     
  7. _basmp_

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    vg
    селектить и репласить селекшн
     
  8. vg

    vg New Member

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    Можно пример?
     
  9. Blackbeam

    Blackbeam New Member

    Blog Posts:
    0
    Joined:
    Dec 28, 2008
    Messages:
    960
    для такой уйни-муйни есть эдитоподобные контролы, например:
     
  10. _basmp_

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    EM_SETSEL - для вставки, например, в конец, оба параметра == -1
    EM_REPLACESEL - строка которую вставляете/на которую заменяете

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

    vg New Member

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

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    vg
    не надо ничего получать. просто вставляйте. выделение от 10 и до 10 символа тоже работает. (расчет был на чтение хелпа/мсдн + эксперименты. возможности пересказать все что там просто нету)
    сделайте в две вставки - 13, 10, 0; а потом вашу строку. или просто пририсуйте в начале вашей строки 13, 10. по выбору
     
  13. vg

    vg New Member

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

    AsmGuru62 Member

    Blog Posts:
    0
    Joined:
    Sep 12, 2002
    Messages:
    689
    Location:
    Toronto
    Code (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

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    еси в конец, то можно и так

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

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

    vg New Member

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    Теперь разобрался, работает. Только, после добавления строки весь текст в контроле получается выделеным? Как снять это выделение?
    Если не хотите, никто не заставляет вас отвечать.
     
  17. _basmp_

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    vg
    SendMessage (hEdit, EM_SETSEL, -1, -1);
    или не отвечать?

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

    vg New Member

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

    Не помогает.