Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];

Вниз

Проблема прокрутки строк в TRIchEdit   Найти похожие ветки 

 
AVK   (2004-06-04 13:14) [0]

При добавлении текста в TRichEdit ScrollBar не опускается в самый низ как в TMemo.
Нашел такой выход из ситуации на этом сайте:

SendMessage(RichEdit1.Handle, EM_LINESCROLL, 0, RichEdit1.Lines.Count-1);

Но тут случается такая беда: при первом же добавлении текста, который выходит за пределы RichEdit, остается только этот текст, а остальной уходит из зоны видимости. Как решить?


 
NAlexey ©   (2004-06-04 13:47) [1]

>AVK   (04.06.04 13:14)  
Что значит уходит из области видимости? Всмысле остается много пустого места?


 
AVK   (2004-06-04 14:47) [2]

Да. Появляется только последняя строка и она находится в самом верху RichEdit`a. Если "кликнуть" по ScrollBar`y, то положение текста становится таким, как надо и после этого наш SendMessage не вызывает такого эффекта.


 
NAlexey ©   (2004-06-04 15:02) [3]

Если шрифт в RichEdit одной высоты, то

procedure UpDateScrollRange;

 function GetVisibleLines: Integer;
 var
   R: TRect;
   LineHeight: Integer;
 begin
   R := RichEdit1.ClientRect;
   LineHeight := RichEdit1.Canvas.TextHeight("Wq");
   if LineHeight <> 0
   then
     Result := (R.Bottom - R.Top) div LineHeight
   else
     Result := 1;
 end;

var
 LinesCount: Integer;
 VisibleLines, Pos, LinesToScroll: Integer;
begin
 VisibleLines := GetVisibleLines;
 LinesCount := SendMessage(RichEdit1.Handle, EM_GETLINECOUNT, 0, 0);
 Pos := SendMessage(RichEdit1.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
 LinesToScroll := (LinesCount - Pos) - VisibleLines;
 SendMessage(RichEdit1.Handle, EM_LINESCROLL, 0, LinesToScroll);
end;


 
AVK   (2004-06-04 15:27) [4]

Большое спасибо! Все работает как надо.
Только у RichEdit`a Canvas`a не нашлось и я заменил на  Form1.Canvas


 
NAlexey ©   (2004-06-04 15:35) [5]

>AVK   (04.06.04 15:27) [4]
Не, тогда так:
 
 function GetVisibleLines: Integer;
 var
   R: TRect;
   C: TCanvas;
   DC: HDC;
   LineHeight: Integer;
 begin
   C := TCanvas.Create;
   C.Font.Assign(RichEdit1.Font);
   DC := GetDC(0);
   C.Handle := DC;
   R := RichEdit1.ClientRect;
   LineHeight := C.TextHeight("Wq");
   if LineHeight <> 0
   then
     Result := (R.Bottom - R.Top) div LineHeight
   else
     Result := 1;
   ReleaseDC(0, DC);
   C.Free;
 end;


 
AVK   (2004-06-04 16:12) [6]

Переделал.
А теперь немного разобраться...
В этом вариантеSendMessage(RichEdit1.Handle, EM_LINESCROLL, 0, RichEdit1.Lines.Count-1);
мы посылали сообщение в котором вторым параметром является номер последней строки.
А в сообщении SendMessage(RichEdit1.Handle, EM_LINESCROLL, 0, LinesToScroll);
вторым параметром является что?
LinesToScroll = "количество всех строк" - "номер первой видимой строки???" - "количество видимых строк".


 
NAlexey ©   (2004-06-04 16:25) [7]

>AVK   (04.06.04 16:12) [6]
EM_LINESCROLL - прокручивает указанное в lParam колиличество строк вертикально. В RichEdit у тебя может быть 100 строк но все 100 не помещаются в видимой части.
EM_GETFIRSTVISIBLELINE - возвращает номер первой видимой строки. Также ты вычисляешь количество видимых строк. Теперь, тебе надо прокрутить общее количиство строк - (первая видимая + количество в видимой области).



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.029 c
3-1085526186
Игорь
2004-05-26 03:03
2004.06.20
Помогите разобраться с SQL запросом. Спасибо


1-1086324302
Andrushk
2004-06-04 08:45
2004.06.20
Задержка, пауза


3-1085561859
Zloy_dima
2004-05-26 12:57
2004.06.20
MySql+dbExpress


11-1075368354
Ал
2004-01-29 12:25
2004.06.20
OnPaint у панели TKOLTabControl


3-1085730819
DimonNew
2004-05-28 11:53
2004.06.20
Binary





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский