Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правильное использование FillRect, Заливается не весь прямоугольник 
:(
    Опции темы
NUCLEuS
  Дата 25.9.2005, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем!

Суть проблемы - необходимо залить некоторый прямоугольник. Этот прямоугольник - Static.

Я делаю так - получаю прямоугольник Static'a GetWindowsRect, получаю его DC, создаю Brush,
наконец заливаю его FillRect'ом. Но вот проблема - заливается не весь Static а кусочек нижнего правого угла. Как будто GetWindowsRect вернул что то не то.

Как бы мне залить весь Static и в чём моя ошибка ??? Ведь вроде всё правильно.
Вот кусок кода:

Код

   Canvas:=GetWindowDC(GetDlgItem(MainWnd,ID_PICT)); //Getting HDC of Static 

   Brush:=CreateBrushIndirect(BrushStruct);          //Brush for FillRect

   GetWindowRect(GetDlgItem(MainWnd,ID_PICT),Rect);  //ID_PICT - my static, Rect - TRect

   FillRect(Canvas,Rect,Brush);


PM MAIL   Вверх
Rrader
  Дата 26.9.2005, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


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

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



Если нужно залить Static, то можно это сделать намного легче. Нужно обрабатывать сообщение WM_CTLCOLORSTATIC у родителя:
Код

//Здесь идет фрагмент оконной процедуры родителя Static'а
  WM_CTLCOLORSTATIC:

    If LParam = Static Then
    Begin
      TmpBrush := CreateSolidBrush(clRed);
      SelectObject(WParam, TmpBrush);
      SetBkMode(WParam, TRANSPARENT);
      Result := WParam;
    End;

  WM_DESTROY:
    DeleteObject(TmpBrush);

Здесь TmpBrush - переменная для дескриптора кисти. smile

Это сообщение отредактировал(а) Rrader - 26.9.2005, 07:14


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


Unregistered











Да нет, залить Static это так для примера, я вообще буду на Static рисовать прямоугольник, так что твой способ непрокатит, мне нужно именно правильное использование FillRect! Помогите кто знает smile
  Вверх
NUCLEuS
Дата 26.9.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Guest @ 26.9.2005, 12:29)
Да нет, залить Static это так для примера, я вообще буду на Static рисовать прямоугольник, так что твой способ непрокатит, мне нужно именно правильное использование FillRect! Помогите кто знает smile

Пардон, это я писал, только забыл Login сделать smile
PM MAIL   Вверх
Rrader
Дата 26.9.2005, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


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

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





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


Новичок



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

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



Объясняю, у меня есть координаты прямоугольника, вернее они произвольные, их нужно ввести, потом по этим координатам рисуется прямоугольник, и заливается FillRect'oм. Но это потом. Сейчас мне интересно почему GetWindowRect возвращает такой будяк...
PM MAIL   Вверх
Rrader
Дата 26.9.2005, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


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

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



Потому что GetWindowRect возвращает координаты прямоугольника окна относительно экрана, а не родительского окна.
Добавлено @ 13:37
Щас дам код, как пересчитать. smile


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


Inspired =)
***


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

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



Короче, замени GetWindowRect на GetClientRect. Поможет! smile


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


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Цитата(Rrader @ 26.9.2005, 13:37)
Потому что GetWindowRect возвращает координаты прямоугольника окна относительно экрана, а не родительского окна.
По смыслу не нужно отсчитывать относительно чего-либо. Каждое окно имеет свою независимую область для рисования, левый верхний угол которой всегда (0,0), независимо от того, где находится это окно на экране или родителе. В общем, что и делает GetClientRect...


--------------------
С уважением, г-н Посол.
PM   Вверх
Guest
Дата 27.9.2005, 13:07 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Rrader
p0s0l

Спасибо, smile

Тему можно закрывать.


  Вверх
NUCLEuS
Дата 27.9.2005, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



^^^^^^^^^^^^^^^^^^^^
Опять забыл за Login. Извините.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

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

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


 




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


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

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