На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Memo как всегда быть внизу.
    Вот такой вопросик возник, я в Memo постоянно добавляю строки, потом их становится, больше и больше, добавляются они туда программно. Как можно сделать, чтобы всегда было видно самое последнее сообщение снизу, а не верхнее. Раньше както делал, сейчас не помню. :(
      если добавляешь  всегда  в конец то просто посылай WM_SCROLLCARET
      если в любое место, то посылай WM_LINESCROLL и lParam индекс последней строки
        Передвигай TMemo.SelStart на последнюю строчку.
          Цитата rhf, 09.09.02, 16:04:16
          если добавляешь  всегда  в конец то просто посылай WM_SCROLLCARET
          если в любое место, то посылай WM_LINESCROLL и lParam индекс последней строки



          А какой функцией мне это послать и как?
            Цитата Song, 09.09.02, 17:43:48
            Передвигай TMemo.SelStart на последнюю строчку.


            Как это программно сделать?
              Цитата Monster, 09.09.02, 17:52:08
              Как это программно сделать?

              With Memo1 Do SelStart:=Perform(EM_LINEINDEX,Lines.Count-1,0);
                2 Song, а разве через selStart мы не просто каретку переведем? теперь нужно еще WM_SCROLLCARET послать.... наверное
                ExpandedWrap disabled
                   //так переход к последней строке<br>with memo1 do perform(WM_LINESCROLL,0,items.count-1);<br>//а так к последнему добавленого символу<br>memo1.perform(WM_SCROLLCARET,0,0);<br>
                  Автору нужно было видеть последнюю строчку. Этого мы и добьёмся переводя туда курсор. Попробуйте.
                  Сообщение отредактировано: Song -
                    Цитата Song, 09.09.02, 19:41:42

                    With Memo1 Do SelStart:=Perform(EM_LINEINDEX,Lines.Count-1,0);


                    Это желательно вставлять в OnPaint формы?

                    И как это на Си выглядит если ни секрет?
                      Это нужно вставлять после каждого добавления информации в TMemo
                        Цитата Song, 10.09.02, 13:04:45
                        Это нужно вставлять после каждого добавления информации в TMemo


                        Хорошо.

                        Но как это правильно написать, так как мне написали билдер не воспринимает. А я никак не могу правильно написать. Я вообще не понимаю, что такое with.
                          Неужели никто не может сказать как правильно эту строку в Билдере написать, чтобы компилятор её понял?

                          With Memo1 Do SelStart:=Perform(EM_LINEINDEX,Lines.Count-1,0);
                            Memo1->SelStart=Memo1->Perform(EM_LINEINDEX,Memo1->Lines->Count-1,0);
                              Короче ничего не получается.
                              Когда строка добовляется методом Add мне виден самый низ Мемо, как и было. Потом форма перерисовывается, и  мы оказываемся в верху Мемо. Неужели всётаки ничего нельзя придумать?
                                Вообще странно... значит у Вас курсор переводится наверх при прорисовке.
                                Тогда попробуйте EM_LINESCROLL или WM_VSCROLL
                                  Всё вопрос отпал.
                                  Заменил этот Мемо лист боксом, и перехожу вот так.

                                  ListBox8->ItemIndex=ListBox8->Items->Count-1;
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0,0425 ]   [ 16 queries used ]   [ Generated: 15.05.24, 19:10 GMT ]