Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Edit вывод текста.

45K
01 августа 2009 года
Make_It_Happen
21 / / 18.06.2009
Здраствуйте.
Мне нужно выводить текст в WC_EDIT когда потребуется, при этом уже выведенный в Edit ранее текст должен остаться... Подскажите как можно это сделать?

Примерно так:
Configs loaded.
Console initalized.
Engine Started.
и так далее...
3.7K
01 августа 2009 года
0nni
326 / / 24.06.2008
В смысле добавить текст к уже имеющемуся?
45K
01 августа 2009 года
Make_It_Happen
21 / / 18.06.2009
Ну да... Как вообще в него текст добавлять....
сразу говорю пишу на Visual C++ без MFC и использую RichEdit 3.0
3.7K
01 августа 2009 года
0nni
326 / / 24.06.2008
EM_REPLACESEL - замещает выделенный в данный момент кусок текста и замещает его на буффер из lParam;

Ну вот пример из VCL на дельфи (чем богаты):

Код:
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;


Если коротко, курсор помешается в самый конец, создается сорока начинающаяся с символа переноса и вызывается EM_REPLACESEL. Если выделения нет, то строка просто вставляется.
45K
01 августа 2009 года
Make_It_Happen
21 / / 18.06.2009
Спасибо...
Index это номер строки...?
и функции SendTextMessage к сожалению в Visual C++ нету... Неподскажете её замену?
3.7K
01 августа 2009 года
0nni
326 / / 24.06.2008
Цитата: Make_It_Happen
Спасибо...
Index это номер строки...?


да index номер строки куда вставляется тест

Цитата: Make_It_Happen
и функции SendTextMessage к сожалению в Visual C++ нету... Неподскажете её замену?


Это обычный SendMessage просто lParam объявлен как PChar что бы не преобразовывать типы.

 
Код:
SendMessage(Memo.Handle, EM_REPLACESEL, 0, Integer(Pchar(Line)));
45K
01 августа 2009 года
Make_It_Happen
21 / / 18.06.2009
Спасибо... а как бы можно сделать чтобы обойтись без номера строки сразу в конец?
3.7K
01 августа 2009 года
0nni
326 / / 24.06.2008
Код:
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')));
45K
01 августа 2009 года
Make_It_Happen
21 / / 18.06.2009
Огромное спасибо) Есть еще вопросик.... ведь когда окно закрывается,все содержимое удаляется... Как бы сделать так чтобы при новом открытии этого окна.. все сохранялось что было раньше, и если чтото было послано в окно когда оно закрыто, то при открытие отобразилось...? воспользоватся файлом? или делать окно открытым и невидимым при старте проги?
3.7K
01 августа 2009 года
0nni
326 / / 24.06.2008
Ну тут как вдобнее будет.
Тебе наверное лучше все время работы не уничтожать окно, а прятать. А при открытии и закрытии загружать и сохранять содержимое едита.
WM_SETTEXT, WM_GETTEXT, WM_GETTEXTLENGTH - этих трех сообщений должно хватить.
45K
02 августа 2009 года
Make_It_Happen
21 / / 18.06.2009
Есть она проблемка, прятать неполучается... Может попробовать менять EX стиль окна например на WS_EX_LAYERED или WS_EX_TRANSPARENT.... если через LAYERED то просто левел alpha ставить на 0... но это лишняя запара... А уничтожать если то нада все сейвить во временный файл.. а потом снова считывать.. да и удалять когда прога завершит работу... Чет я прям незнаю что и делать...
7
02 августа 2009 года
@pixo $oft
3.4K / / 20.09.2006
И какая проблема возникает при прятинге окна?Что-то мне не верится,что ShowWindow(hWnd,False) не работает

Объясни,что значит "прятать не получается"
45K
03 августа 2009 года
Make_It_Happen
21 / / 18.06.2009
Незнаю но при использование ShowWindow(hWnd,False) окно скрывается только 1 раз.. Допустим я отобразил окно, потом скрыл его, потом сново отобразил и больше его нескроешь.
7
03 августа 2009 года
@pixo $oft
3.4K / / 20.09.2006
Какую ошибку возвращает ShowWindow?Не может быть,чтобы она была одноразовая
45K
03 августа 2009 года
Make_It_Happen
21 / / 18.06.2009
Я разобрался, ток проблема в том что когда окно с RichEdit активно, тоесть курсор в нем, то спрятать его нельзя..
Помогите ктонибудь, нефига невыходит, бред какойто если в RichEdit находтся Caret то окно бессмертно =/
398
04 августа 2009 года
Alexandoros
630 / / 21.10.2005
Может сообщение не тому окну шлеш?
45K
04 августа 2009 года
Make_It_Happen
21 / / 18.06.2009
Да не... Вроде всё норм... Меня убивают такие мелкие проблемы =/
45K
04 августа 2009 года
Make_It_Happen
21 / / 18.06.2009
ООда до меня дошло, у меня же закрытие окна на кллавишу сделано, а RichEdit же ловит клавиши... Мдаааа
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог