Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.26;
Скачать: CL | DM;

Вниз

прокрутка Richedit   Найти похожие ветки 

 
Flea   (2006-01-31 18:15) [0]

добрый день.
встретился с небольшим затруднением по поводу прокрутки текста в richedit именно в КОЛ:

есть форма, на ней richedit. свойство wordwrap установлено true, ну и скроллбары отображаются. в обработчик onformcreate добавлен код для загрузки rtf файла и прокрутки текста вниз:

richedit2.RE_LoadFromFile("file.rtf",rertf,false);
SendMessage(richedit2.Handle,WM_VSCROLL,sb_bottom,0);

в результате текст прокручивается неправильно - последняя строка текста оказывается не внизу контрола, а выше середины, текст как бы "перепрокручивается".
если потом кликнуть по скроллбару или повернуть колесо мыши - текст прыгает вниз, туда где он должен быть, а это прыганье раздражает.

в таком же проекте с VCL компонентами текст прокручивается нормально до низа. кроме того, если то же самое сообщение в KOL проекте отсылать по нажатию кнопки, текст прокручивается до конца.

подскажите, как сделать при старте программы прокрутку именно до самого низа?


 
homm ©   (2006-01-31 20:06) [1]

Могу сказать, что в проекте используется свойство Align, и для RichEdit в том числе.

Решение этой пробле не нашел, зато нашел другую проблему:
если в обротчике сделать так:
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
Var     I: integer;
begin
   {ваш код}
   Form.WindowState := wsMaximized;
   {ваш код}
end;

то обработчик
procedure TForm1.KOLForm1Show(Sender: PObj);
уже не выполняется.

Думаю ошибка вот где:
function WndProcShowHide( Sender: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
var IsVisible: Boolean;
begin
 if Msg.message = WM_SHOWWINDOW then
 if Msg.hwnd = Sender.Handle then
 begin
   IsVisible := IsWindowVisible( Sender.Handle );
   if LongBool( Msg.wParam ) then // <-- некоректная проверка, может прийти и Maximize
   begin
     Sender.fVisible := TRUE;
     if not IsVisible then
     if Assigned( Sender.FOnShow ) then
       Sender.FOnShow( Sender );
   end
     else
   begin
     Sender.fVisible := FALSE;
     if IsVisible then
     if Assigned( Sender.FOnHide ) then
       Sender.FOnHide( Sender );
   end;
 end;
 Result := FALSE;
end;


 
Flea   (2006-02-02 01:37) [2]

никаких идей нет отчего так с прокруткой получается?


 
homm ©   (2006-02-02 08:56) [3]

От чего получается - все просто, а как вот избавится - не знаю.
Дело то в том, что SendMessage(richedit2.Handle,WM_VSCROLL,sb_bottom,0); выполняется раньше чем происходит выравнивание в соответствии со свойством align. Вот и получается что прокручивается в конец для одной высоты окна richedit, а потом происходит выравнивание и высота меняется.

А вот насчет WndProcShowHide. Туда WM_SHOWWINDOW вообще не попадает, а с вышеупомянутой строкой все нормально.


 
Flea   (2006-02-02 16:51) [4]

ты имеешь в виду align компонента на форме или текста в компоненте?


 
homm ©   (2006-02-02 21:37) [5]

Как по твоему Align текста может повлиять на высоту компонента?


 
Flea   (2006-02-02 22:18) [6]

хм, просто у меня и без всяких align прокрутка при старте глючит...


 
homm ©   (2006-02-08 10:45) [7]

По этой теме вопрос остался незамеченым ;)

Если задать свойство формы WindowSate = wsMaximized то не приходит сообщение WM_SHOWWINDOW, а как следствие не вызывается обработчик OnShow.

Надо переделать SetWindowSate чтобы она не создавала окно принудительно, а запоминала статос до времени создания окна.


 
homm ©   (2006-02-08 10:48) [8]

Владимир, может чего и по сабжу скажете? Я пробывал даже откладывать принудительное создание RichEdit в его конструкторе. Все равно
SendMessage(richedit2.Handle,WM_VSCROLL,sb_bottom,0);
обрабатывается так как будто высота контрола 64 (значение по умолчанию).


 
Vladimir Kladov   (2006-02-08 15:44) [9]

про ричэдит ничего не скажу, не знаю. Я его редко использую.

Про отложение на время нежелательных действий - сами знаете как: сделать своим кодом в OnFormCreate - если в MCK.



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

Текущий архив: 2006.11.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.051 c
15-1162671077
Ученик чародея
2006-11-04 23:11
2006.11.26
Вах... И они развивают нашу украинскую науку...


2-1162796559
immmi
2006-11-06 10:02
2006.11.26
Очистить record


3-1158961120
_Ламер_
2006-09-23 01:38
2006.11.26
Избыточность


2-1162824308
mmx1
2006-11-06 17:45
2006.11.26
Создание объектов в runtime.


15-1163051134
pavel_guzhanov
2006-11-09 08:45
2006.11.26
Подскажите, как лучше поступить в такой ситуации