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

Вниз

StringGrid vs ScrollBar   Найти похожие ветки 

 
Новичок   (2002-11-26 07:53) [0]

Привет всем!
Вопрос:
У меня есть StringGrid1 и есть ScrollBar1. Я хочу, чтобы StringGrid прокручивался не родным ScrollBarом, а при помощи ScrollBar1.


 
Song ©   (2002-11-26 08:21) [1]

Ловишь событие срола от TScrollBar и прокручиваешь TStringGrid


 
SottNick ©   (2002-11-26 09:09) [2]

StringGrid1.ScrollBars:=ssNone;
и крути
а крутить - руки свернешь
все методы прокрутки у StringGrid"а скрыты


 
Alx2 ©   (2002-11-26 10:46) [3]

>Новичок (26.11.02 07:53)

вот часть описания класса формы TForm1:

TForm1 = class(TForm)
............
.........
ScrollBar1: TScrollBar; // Тот, чем будем крутить
StringGrid1: TStringGrid; // То, что будем крутить
public
{ Public declarations }
SaveProc: TWndMethod; // Переменная для хранения старого обработчика сообщений ScrollBar
procedure MakeScroll(var Mesg: TMessage); // Новый обработчик сообщений для ScrollBar
end;
//////////////////

Теперь за дело:

procedure TForm1.FormCreate(Sender: TObject); // Прежде всего подменим родной обработчик сообщений для ScrollBar
begin
SaveProc := ScrollBar1.WindowProc; // Запоминаем старье в переменной для хранения старого обработчика сообщений ScrollBar

ScrollBar1.WindowProc := MakeScroll; // Назначаем на работу наш собственный обработчик сообщений
end;

procedure TForm1.MakeScroll(var Mesg: TMessage);
// наш собственный обработчик сообщений. Он будет обрабатывать сообщения для ScrollBar
var SI: TScrollInfo;
Posted: TWMVScroll;
begin
SaveProc(Mesg); // Сначала позволим ScrollBarу сохранить стандартное поведение
if Mesg.msg = SBM_SETSCROLLINFO then // Если нас скроллируют, то мы - непротив
begin
SI := PScrollInfo(Pointer(Mesg.LParam))^; // Смотрим как именно нас скроллируют
if si.fMask and SIF_POS <> 0 // Если меняется положение ползунка то рассказываем о сем событии нашему StringGrid
then
begin
Posted.Msg := wm_Vscroll; // Готовим почту для грида - говорим что сейчас мы тебя проскроллируем
Posted.ScrollBar := 0; // "Анонимное" скроллирование (пусть думает, что это его собственный скроллбар достает)
Posted.ScrollCode := SB_THUMBPOSITION; // Говорим, что ползунок у нас переехал на нгекоторую позицию
Posted.Pos := SI.nPos; // Говорим на какую именно позицию переехал ползунок
with TMessage(Posted) do // Шлем посылку гриду
StringGrid1.Perform(Msg, wParam, lParam);
end;
end;
end;

PS

Проверил. Все работает.
PPS
Конечно, вместо грида можно воткнуть все, что умеет скроллироваться (обрабатывать сообщение WM_VScroll)



 
Новичок   (2002-11-26 15:02) [4]

>>Alx2
Спасибо попробую!



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

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

Наверх




Память: 0.47 MB
Время: 0.013 c
1-14626
Ильдар
2002-11-24 13:26
2002.12.05
Рисование линий в QReport


1-14566
Smit_
2002-11-26 22:38
2002.12.05
Как повесить на одно событие 2 метода.


1-14562
FireWorks
2002-11-26 10:27
2002.12.05
Как заполнить комбобокс из текстового файла


1-14614
Begin
2002-11-23 01:21
2002.12.05
Можно ли уничтожить объект в его же обработчике ? И как ?


3-14460
poops66
2002-11-19 00:06
2002.12.05
Path to ODBC user data source