Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Получить смещение скрола StringGrid'а


Автор: artsb 12.12.2009, 11:48
Приветствую всех!

У меня проблема с рисованием ячеек StringGrid'a. Мне нужно спроецировать битмап. А проблема в том, что не могу получить ПРАВИЛЬНОЕ смещение скролов. Делаю так:
Код

 int posX, posY, min, max;
 TRect bmpRect;
 posX = GetScrollPos(sgTree->Handle, SB_HORZ);
 posY = GetScrollPos(sgTree->Handle, SB_VERT);
 GetScrollRange(sgTree->Handle, SB_HORZ, &min, &max);
 bmpRect.left = (float)Rect.left + ((max - min) / 100.0 * (float)posX);
 bmpRect.right = (float)Rect.right + ((max - min) / 100.0 * (float)posX);
 GetScrollRange(sgTree->Handle, SB_VERT, &min, &max);
 bmpRect.top = (float)Rect.top + ((max - min) / 100.0 * (float)posY);
 bmpRect.bottom = (float)Rect.bottom + ((max - min) / 100.0 * (float)posY);

но что-то не получатся  smile 

Автор: THandle 12.12.2009, 12:18
artsb, что понимается под правильным.

Приведи примеры цифр которые тебе бы хотелось получить.

В аттаче прикрепляю иллюстрацию движения скроллбара(Delphi).


Автор: artsb 12.12.2009, 12:27
THandle, у твоего кода такие же результаты, как и у моего.
Проблема в том, что когда скролы стоят в начале, всё отрисовывается отлично. Но если их прокрутить, изображение, которое я проецирую, уезжает вправо.
Мне нужно получить смещение в пикселях относительно начала координат, чтобы выдрать нужный кусок из битмапа.

Автор: THandle 12.12.2009, 12:34
artsb, выложи тестовый проект, чтобы посмотреть что ты там делаешь. Я не очень понял какой битмап и куда ты его проецируешь)

Автор: artsb 12.12.2009, 14:21
Цитата(THandle @  12.12.2009,  12:34 Найти цитируемый пост)
Я не очень понял какой битмап и куда ты его проецируешь) 

На фоне стринггрида нужно нарисовать битмап - спроецировать.
Но я уже нашёл свою ошибку:
Код

 TCustomDrawGrid *dg = (TCustomDrawGrid *)Sender;
 TRect bmpRect;
 bmpRect.left = ACol * 20; // 20 - ширина столбцов
 bmpRect.right = bmpRect.left + 20;
 // т.к. высота строк у меня разная, считаю так:
 bmpRect.bottom = 0;
 for(int i=0; i<=ARow; i++) {
  bmpRect.bottom += dg->RowHeights[i];
 }
 bmpRect.top = bmpRect.bottom - dg->RowHeights[ARow];

Теперь всё работает. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)