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

Вниз

прокрутка 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 вся ветка

Форум: "KOL";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.042 c
15-1162875024
Steep
2006-11-07 07:50
2006.11.26
Вопрос про быстрые клавиши


15-1162882336
Тульский
2006-11-07 09:52
2006.11.26
С праздником, товарищи!


15-1162883902
*Стажер*
2006-11-07 10:18
2006.11.26
TAppBar Тейксейра и Пачеко в D6


15-1163067974
db2admin
2006-11-09 13:26
2006.11.26
Подскажите пожалуйста поисковики


15-1162858540
ocbka
2006-11-07 03:15
2006.11.26
Нужен HELP!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский