Форум: "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