Как при добавлении строк в edit control (invoke SendDlgItemMessage,hwin, EDT,WM_SETTEXT,0,addr str) делать перевод на новую строку после каждого добавления строки? Как сделать edit control неактивным для пользователя, чтобы выводить строки только программно? Похоже, это делает свойство Locked = True, но тогда edit control становится цвета окна, а мне нужно, чтобы он оставался белым. В общем, должно получиться как поле вывода анализа у программы CCleaner, если кто знает.
1) Добавить в конец добавляемой строки СR,LF = 0Dh,0Ah 2) Задать стиль ES_READONLY или при создании, или после - посылкой сообщения EM_SETREADONLY
ты походу перепутал disabled и readonly. обычная комбинация \r\n, только edit box должен иметь свойство multiline
Как \r\n представить в masm32? Ничего не получается. Код (Text): string db"string",0 string1 db"string1",0 invoke SendDlgItemMessage,hwin,SCAN_EDT,WM_SETTEXT,0,addr string invoke SendDlgItemMessage,hwin,SCAN_EDT,WM_SETTEXT,0,addr CRLF invoke SendDlgItemMessage,hwin,SCAN_EDT,WM_SETTEXT,0,addr string1 CRLF db 0dh,0ah,0 или db "\r\n",0 результат MultiLine=True
Код (Text): string db"string",13, 10, "string1", 0 invoke SendDlgItemMessage,hwin,SCAN_EDT,WM_SETTEXT,0,addr string
EM_SETSEL - для вставки, например, в конец, оба параметра == -1 EM_REPLACESEL - строка которую вставляете/на которую заменяете да. все это через SendMessage
_basmp_ Т. е. в этом случае к строке полученой из выделения добавляем новую и всё вместе, одной строкой, вставляем? Как тогда вставить 13, 10 между старой и новой строками для переноса новой?
vg не надо ничего получать. просто вставляйте. выделение от 10 и до 10 символа тоже работает. (расчет был на чтение хелпа/мсдн + эксперименты. возможности пересказать все что там просто нету) сделайте в две вставки - 13, 10, 0; а потом вашу строку. или просто пририсуйте в начале вашей строки 13, 10. по выбору
Под я имел ввиду всё, что выделено и сохранено в буфере. Знаю. Я читал MSDN. Я просто не понимаю чем мне поможет предложеный вами вариант с EM_SETSEL и EM_REPLACESEL. В посту #6 я хотел сказать, что при использовании WM_SETTEXT, добавляя новые строки к имеющимся контроле, мне придётся хранить имеющиеся, прибавлять к ним новую строку и этим заменять имеющееся в контроле. В предложеном вами случае получается то же самое: выделяю имющееся, сохраняю, добавляю к этому новую строку, полученым заменяю имеющееся в контроле. Или я не прав? К тому же вопрос: как это (выделение, замена всего текста) будет выглядеть в работе? Мне кажется, что не очень. Хотя, могу ошибаться. Раньше мне казалось, что подобное должно делаться на подобие записи в файл: установка курсора в конец и добавление нового, без перезаписи всего. Так нельзя?
Код (Text): int iCaretPos = GetWindowTextLength (hEdit); SendMessage (hEdit, EM_SETSEL, iCaretPos, iCaretPos); SendMessage (hEdit, EM_REPLACESEL, 0, "text\r\n");
еси в конец, то можно и так SendMessage (hEdit, EM_SETSEL, -1, -1); // вообще любое число больше длины текста в контроле перекинет в конец. наверно я намекнул слишком тонко. извините. второй намек, потолще - то что элементарно проверяется надо проверять, а не лежа не диване морочить людям голову по форумам своими предположениями. тестовая прога будет короче чем этот пост.
Теперь разобрался, работает. Только, после добавления строки весь текст в контроле получается выделеным? Как снять это выделение? Если не хотите, никто не заставляет вас отвечать.
vg SendMessage (hEdit, EM_SETSEL, -1, -1); или не отвечать? вы бы вместо пустого огрызания вникли б во второй намек. или много чести самому пробовать? или неинтересно?
Просто, иногда небольшие помехи не дают решать основные и более интересные задачи. Поэтому хочется их переступить как можно быстрее. Форум - как вариант. Я думаю, что это нормально. Иногда. В конце концов, самому можно дойти до всегои и без форума. Вопрос в том, сколько времени на это понадобится. Не помогает.