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

Вниз

Как среагировать на (гор) прокрутку TMemo ...   Найти похожие ветки 

 
oomneeq   (2002-10-29 18:38) [0]

и не создавать при этом компонент - наследник TMemo?

Формой ловить WM_Command, вытаскивать оттуда EN_HSCROLL?

Помогите плиз, знаний не хватает.
Примерчик бы..


 
MBo   (2002-10-29 18:48) [1]

WindowProc подменить, не забыв вызвать старую. Пример в хелпе


 
oomneeq   (2002-10-29 19:11) [2]

2MBo
Какое в этом случае (подмены WP) событие ловить?

А я между делом во как научился:

procedure TForm1.WMCommand(var Msg: TWMCommand);
var TheRange:integer;
begin
// TWMCommand = packed record
// Msg: Cardinal;
// ItemID: Word;
// NotifyCode: Word;
// Ctl: HWND;
// Result: Longint;
// end;

if TMessage(Msg).WParamHi = EN_HSCROLL then begin
if Msg.Ctl=Memo1.Handle then begin
TheRange := GetScrollPos(Memo1.Handle, SB_HORZ);
MessageDlg(Format("Memo1 is now HScrolled by %d",TheRange]), mtInformation, [mbOK], 0)
end
else
MessageDlg("Another HScroll", mtInformation, [mbOK], 0);
end;
end;


Проблема теперь такая, что это реагирует на скроллинг пошаговый,
т.е. когда по стрелочкам прокруточным клацать.
Если же мышью ползунок таскать, то не реагирует :-/
Неужто это разные события?!


 
MBo   (2002-10-29 20:11) [3]

Ловить WM_HSCROLL.


 
oomneeq   (2002-10-30 11:30) [4]

Cловил, сделал.
Попробую высказать впечатления:
замена оконной функции отдельного контрола на форме дает волю прямой обработки сообщений, однако сопряжена с неудобствами как то:
-оконная функция объявляется как простая, автономная, т.е. доступ из нее к другим элементам формы надо делать через ссылку на экземпляр формы, т.е. надо дополнительно заботиться чтоб эту ссылку (глобально) гдето обявить, и вовремя присвоить.
И если создаешь форму динамически, то это дополнительный головняк.
Саму функцию надо вовремя подменить, а потом восстановить.
Т.Е. проблема хоть и решена, но глубокого удовлетворения не наступило :-)

в вышеприведнном (oomneeq © (29.10.02 19:11)) варианте все необходимое происходит в единственном методе самой формы, т.е. "все под рукой" и единственная непонятка - почему нажатие на стрелки скроллбара приводит к EN_HSCROLL а таскание ползунка -нет. вот бы с чем разобраться!
или это в WinAPI вопрос уже?

Какие мысли у мастеров?




 
MBo   (2002-10-30 14:00) [5]

private
procedure NewProc(var Msg:TMessage);// метод формы

var
Form1: TForm1;
OldProc:TWndMethod;

procedure TForm1.FormCreate(Sender: TObject);
begin
OldProc:=memo1.WindowProc;
memo1.WindowProc:=NewProc;
end;

procedure TForm1.NewProc(var Msg: TMessage);
begin
if Msg.Msg=WM_HSCROLL then begin
...
end;
OldProc(Msg);
end;


 
oomneeq   (2002-10-30 19:31) [6]

2MBo - thanx, понял, так конечно попроще будет.
типа "подмена WP используя VCL" :-)

мой первоначчальный вариант делался через API
SetWindowLong(Memo1.Handle,GWL_WNDPROC,LongInt(@NewMemoWndProc))

и то и другое можно смело называть "подмена оконной функции"
выглядит ето однако не совсем похоже друг на друга. :-)

ЗЫ
А вот с EN_HSCROLL похоже засада.
Почитал я мсдн,
и насколько понял, ребята попросту не учли или не сочли нужным генерить нотификационное сообщение по поводу тасок ползунка:

This message is sent for the following mouse events on the horizontal scroll bar: clicking either arrow button or clicking between the arrow button and the thumb. However, the message is not sent when clicking the scroll bar thumb itself. The message is also sent when a keyboard event causes a change in the view area of the edit control, for example, pressing HOME, END, LEFT ARROW, or RIGHT ARROW.

Такие делаа...



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

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

Наверх





Память: 0.46 MB
Время: 0.008 c
1-33971
besenok
2002-11-01 14:10
2002.11.11
Что-то клин какой-то наступил, не могу вспонить как посмотреть


1-34044
X-shadow
2002-10-30 17:51
2002.11.11
ПИСЬМО!!!


1-34118
TankMan
2002-10-30 21:41
2002.11.11
Люди поможите! Опять с хуками...


7-34268
Дениска
2002-09-09 21:35
2002.11.11
Передача сообщений с одного компа на др.


4-34304
VepAlex
2002-10-02 06:21
2002.11.11
Не закрывается окно Дос приложения





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