Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ScrollBar В TStringGrid 
V
    Опции темы
Comm
Дата 23.1.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Добрый вечер.
Как программно можно прокрутить ScrollBar в TStringGrid-е ?
Пробовал так :


Код

void __fastcall TForm1::StringGrid1MouseWheelUp(TObject *Sender,TShiftState Shift, TPoint &MousePos, bool &Handled)
{
 SendMessage(StringGrid1->Handle, EM_SCROLL, SB_LINEUP, 0);
}

Не поулчилось =(
Спасибо за внимание!


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Dmi3ev
Дата 24.1.2009, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



вниз:
Код

SendMessage(StringGrid1->Handle, WM_VSCROLL, SB_LINEDOWN, 0);

вверх:
Код

SendMessage(StringGrid1->Handle, WM_VSCROLL, SB_LINEUP, 0);


Это сообщение отредактировал(а) Dmi3ev - 24.1.2009, 00:15


--------------------

PM MAIL   Вверх
Comm
Дата 24.1.2009, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Спасибо Работает,но при прокрутке вместе со Скролом фокус строки тоже изменяется на другую.. а желательно  что бы фокус строки оставался прежним...нужно как то запретить стандартное поведение TStringGrid-a на это действие,можно как нибудь ? =)
Код

void __fastcall TForm1::StringGrid1MouseWheelUp(TObject *Sender,
      TShiftState Shift, TPoint &MousePos, bool &Handled)
{
 SendMessage(StringGrid1->Handle,WM_VSCROLL, SB_LINEUP, 0);
}



--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 24.1.2009, 06:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Я вот тут подумал...можно как нибудь стандартынй обработчик выключить или заменить своим?
Вот например если в StringGride если прокрутить калесико мыши то прокручивается сами строки а не СкроллБар... интересно узнать где это действие генирируется и как его запретить/заменить на свой.


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 24.1.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



 smile 


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
THandle
Дата 25.1.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 25
Всего: 372



Comm, ну пиши своего наследника от TStringGrid с новыми обработчиками ловли сообщений WM_VSCROLL, WM_HSCROLL... Ну или же подмени уже существующему WindowProc  и в нем эти сообщения обрабатывай.

Еще глянь про ScrollBar'ы на msdn:

http://msdn.microsoft.com/en-us/library/bb787529(VS.85).aspx
PM   Вверх
Comm
Дата 25.1.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Думал есть путь полегче,придется наверно наследника писать =)) Спасибо за ответ!


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 26.1.2009, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Решил пойти инным путем. Кинул на форму компонент ApplicationEvents и ловлю сообщения
Код

void __fastcall TForm1::aeHintControlMessage(tagMSG &Msg, bool &Handled)
{ if(Msg.message==WM_MOUSEWHEEL)
  {  if(HIWORD(Msg.wParam)<=32512)
     {  //А вот тут как бы сделать
     }else
     { //А вот тут как бы сделать =)
     }Handled=true;
  }
}


Цитата

Еще глянь про ScrollBar'ы на msdn:

http://msdn.microsoft.com/en-us/library/bb787529(VS.85).aspx 

Очень полезная ссылка,но там функции как бы сказать "сделай сам" называются... т.е. все расчеты и перерасчеты я должен делать сам ...а это пока трудновато для меня =(


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 28.1.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Решил,кому интересно то вот:
Код


void __fastcall TForm1::aeHintControlMessage(tagMSG &Msg, bool &Handled)
{
  if(Msg.message==WM_MOUSEWHEEL)
  {  if(Msg.hwnd==StringGrid1->Handle)
     {  if(HIWORD(Msg.wParam)<=32512)
        { if(StringGrid1->TopRow>StringGrid1->FixedRows)
              StringGrid1->TopRow--;
        }else
        { if((StringGrid1->TopRow+StringGrid1->VisibleRowCount)<StringGrid1->RowCount)
               StringGrid1->TopRow++;
        }Handled=true;
     }
  }
}

Вот думаю как бы сделать для всех TStringGrid-ов в программе...
Это... можно узнать по хендлу  Msg.hwnd   к какому он принадлежит классу? 



--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Rrader
  Дата 29.1.2009, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



Так а не проще ли тогда:
Код

void __fastcall TForm1::StringGrid1MouseWheelDown(TObject *Sender, TShiftState Shift,
          TPoint &MousePos, bool &Handled)
{
    if((StringGrid1->TopRow +
        StringGrid1->VisibleRowCount) < StringGrid1->RowCount) StringGrid1->TopRow++;
    Handled = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::StringGrid1MouseWheelUp(TObject *Sender, TShiftState Shift,
          TPoint &MousePos, bool &Handled)
{
    if(StringGrid1->TopRow > StringGrid1->FixedRows) StringGrid1->TopRow--;
    Handled = true;
}

Цитата(Comm @  29.1.2009,  04:29 Найти цитируемый пост)
Вот думаю как бы сделать для всех TStringGrid-ов в программе...

И Sender приводить к TStringGrid.

Это сообщение отредактировал(а) Rrader - 29.1.2009, 08:30


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Comm
Дата 29.1.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Handled тут не заметил =)) Действительно проще..но не пойму как для всех StringGrid-ов это провернуть.


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Rrader
  Дата 29.1.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



Просто делаешь один раз эти два обработчика, а потом выделяешь все остальные StringGrid'ы и назначаешь им в инспекторе ранее созданные обработчики.
Код

void __fastcall TForm1::StringGrid1MouseWheelUp(TObject *Sender, TShiftState Shift,
          TPoint &MousePos, bool &Handled)
{
    if(dynamic_cast<TStringGrid*>(Sender)->TopRow >
        dynamic_cast<TStringGrid*>(Sender)->FixedRows)
        dynamic_cast<TStringGrid*>(Sender)->TopRow--;
    Handled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1MouseWheelDown(TObject *Sender, TShiftState Shift,
          TPoint &MousePos, bool &Handled)
{
    if((dynamic_cast<TStringGrid*>(Sender)->TopRow +
        dynamic_cast<TStringGrid*>(Sender)->VisibleRowCount) <
        dynamic_cast<TStringGrid*>(Sender)->RowCount)
        dynamic_cast<TStringGrid*>(Sender)->TopRow++;
    Handled = true;
}


Это сообщение отредактировал(а) Rrader - 29.1.2009, 17:03


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Comm
Дата 29.1.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Сделал всё отлично,а можно ли и на Гриды другой формы эти же обработчики назначить? Спасибо огромное с меня + ... dynamic_cast я понял что это такое, а где бы можно узнать что такое reinterpret_cast ? =)))

Это сообщение отредактировал(а) Comm - 29.1.2009, 17:34


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Rrader
  Дата 29.1.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



Цитата

Операция reinterpret_cast применяется для преобразования не связанных между собой типов, например, указателей в целые и наоборот, а также указателей типа void* в конкретный тип. При этом внутреннее представление данных остается неизменным, а изменяется только точка зрения компилятора на данные.

Результат преобразования остается на совести программиста smile 


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Comm
Дата 29.1.2009, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Спасибо Всем за Всё =)))  smile 


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0633 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.