procedure TMemoStrings.Insert(Index: Integer; const S: string);
var
SelStart, LineLen: Integer;
Line: string;
begin
if Index >= 0 then
begin
SelStart := SendMessage(Memo.Handle, EM_LINEINDEX, Index, 0);
if SelStart >= 0 then Line := S + #13#10 else
begin
SelStart := SendMessage(Memo.Handle, EM_LINEINDEX, Index - 1, 0);
if SelStart < 0 then Exit;
LineLen := SendMessage(Memo.Handle, EM_LINELENGTH, SelStart, 0);
if LineLen = 0 then Exit;
Inc(SelStart, LineLen);
Line := #13#10 + s;
end;
SendMessage(Memo.Handle, EM_SETSEL, SelStart, SelStart);
[COLOR="Red"]SendTextMessage(Memo.Handle, EM_REPLACESEL, 0, Line);[/COLOR]
end;
end;
Edit вывод текста.
Мне нужно выводить текст в WC_EDIT когда потребуется, при этом уже выведенный в Edit ранее текст должен остаться... Подскажите как можно это сделать?
Примерно так:
Configs loaded.
Console initalized.
Engine Started.
и так далее...
В смысле добавить текст к уже имеющемуся?
сразу говорю пишу на Visual C++ без MFC и использую RichEdit 3.0
Ну вот пример из VCL на дельфи (чем богаты):
Код:
Если коротко, курсор помешается в самый конец, создается сорока начинающаяся с символа переноса и вызывается EM_REPLACESEL. Если выделения нет, то строка просто вставляется.
Index это номер строки...?
и функции SendTextMessage к сожалению в Visual C++ нету... Неподскажете её замену?
Цитата: Make_It_Happen
Спасибо...
Index это номер строки...?
Index это номер строки...?
да index номер строки куда вставляется тест
Цитата: Make_It_Happen
и функции SendTextMessage к сожалению в Visual C++ нету... Неподскажете её замену?
Это обычный SendMessage просто lParam объявлен как PChar что бы не преобразовывать типы.
Код:
SendMessage(Memo.Handle, EM_REPLACESEL, 0, Integer(Pchar(Line)));
Спасибо... а как бы можно сделать чтобы обойтись без номера строки сразу в конец?
Код:
var
SelPos : Integer;
LinesCount : Integer;
LineLength : Integer;
begin
//после этого шаманства в SelPos находится индекс последнего символа
LinesCount := SendMessage(Memo1.Handle, EM_GETLINECOUNT, 0, 0);
SelPos := SendMessage(Memo1.Handle, EM_LINEINDEX, LinesCount - 1, 0);
LineLength := SendMessage(Memo1.Handle, EM_LINELENGTH, SelPos, 0);
SelPos := SelPos + LineLength;
//ставим каретку в самый конец
SendMessage(Memo1.Handle, EM_SETSEL, SelPos, SelPos);
//добавляем строку
SendMessage(Memo1.Handle, EM_REPLACESEL, 0, Integer(Pchar(#13#10'Hello world')));
SelPos : Integer;
LinesCount : Integer;
LineLength : Integer;
begin
//после этого шаманства в SelPos находится индекс последнего символа
LinesCount := SendMessage(Memo1.Handle, EM_GETLINECOUNT, 0, 0);
SelPos := SendMessage(Memo1.Handle, EM_LINEINDEX, LinesCount - 1, 0);
LineLength := SendMessage(Memo1.Handle, EM_LINELENGTH, SelPos, 0);
SelPos := SelPos + LineLength;
//ставим каретку в самый конец
SendMessage(Memo1.Handle, EM_SETSEL, SelPos, SelPos);
//добавляем строку
SendMessage(Memo1.Handle, EM_REPLACESEL, 0, Integer(Pchar(#13#10'Hello world')));
Огромное спасибо) Есть еще вопросик.... ведь когда окно закрывается,все содержимое удаляется... Как бы сделать так чтобы при новом открытии этого окна.. все сохранялось что было раньше, и если чтото было послано в окно когда оно закрыто, то при открытие отобразилось...? воспользоватся файлом? или делать окно открытым и невидимым при старте проги?
Тебе наверное лучше все время работы не уничтожать окно, а прятать. А при открытии и закрытии загружать и сохранять содержимое едита.
WM_SETTEXT, WM_GETTEXT, WM_GETTEXTLENGTH - этих трех сообщений должно хватить.
Есть она проблемка, прятать неполучается... Может попробовать менять EX стиль окна например на WS_EX_LAYERED или WS_EX_TRANSPARENT.... если через LAYERED то просто левел alpha ставить на 0... но это лишняя запара... А уничтожать если то нада все сейвить во временный файл.. а потом снова считывать.. да и удалять когда прога завершит работу... Чет я прям незнаю что и делать...
Объясни,что значит "прятать не получается"
Незнаю но при использование ShowWindow(hWnd,False) окно скрывается только 1 раз.. Допустим я отобразил окно, потом скрыл его, потом сново отобразил и больше его нескроешь.
Какую ошибку возвращает ShowWindow?Не может быть,чтобы она была одноразовая
Помогите ктонибудь, нефига невыходит, бред какойто если в RichEdit находтся Caret то окно бессмертно =/
Может сообщение не тому окну шлеш?
Да не... Вроде всё норм... Меня убивают такие мелкие проблемы =/
ООда до меня дошло, у меня же закрытие окна на кллавишу сделано, а RichEdit же ловит клавиши... Мдаааа