Главная страница
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.022 c
1-14564
ret_Avr
2002-11-24 19:43
2002.12.05
Как StringGrid отправить в Word?


1-14511
MaXie
2002-11-26 12:02
2002.12.05
Как правильно закрыть Excel?


1-14485
Slava
2002-11-25 15:21
2002.12.05
Печать картинки


1-14582
antonyan
2002-11-27 12:09
2002.12.05
Автоматизация тех.процессов


3-14470
Mic_2000
2002-11-18 15:10
2002.12.05
Вопрос по DBGrid и PickList