Главная страница
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.05 c
2-1163094373
yuraspb
2006-11-09 20:46
2006.11.26
У кого какие мысли?


1-1160995519
vegarulez
2006-10-16 14:45
2006.11.26
Народ, подскажите компоненту для обмена по протоколу HTTPS.


1-1160743014
dreamse
2006-10-13 16:36
2006.11.26
Перекрытие формой другой формы


15-1163062444
AVELINA
2006-11-09 11:54
2006.11.26
помогите инфой про wwExpandButton, plz...


2-1162831438
Sp1r1t
2006-11-06 19:43
2006.11.26
Таймер