Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.02.2012, 17:52
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию Цвет фона окна

Всем доброго времени) пытаюсь получать цвет фона окна по хэндлу или по DC, но все функции, которые мне посоветовали не помогают( вероятно не правильно использую или нет вовсе таких функций О_О. Пытался через GetBkColor()
GetSysColor()
GetDCBrushColor()
но что то не выходит(
дайте плиз рабочий примерчик, ато уже все волосы из головы выпали) ну и если возможно, так же присвоение цвета) заранее благодарен)

p.s. то ж самое с цветом шрифта окна, сам шрифт получаю функцией font.Handle:=SendMessage(h, WM_GETFONT, 0, 0);, но цвет она всегда возвращает чёрный

//добавленно
Мне подсказали, что есть способ: "послать сообщение окну о перерисовке и в этот момент отловить цвет фона"
кто нибудь подскажет с реализацией?

Последний раз редактировалось reqyz, 16.02.2012 в 18:34.
Ответить с цитированием
  #2  
Старый 16.02.2012, 20:52
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage(IntToHex(GetBkColor(Canvas.Handle), 8));
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 16.02.2012, 21:33
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию

ну, цвет своего окна я и так получить могу, без извращений, мне чужого надо)
Ответить с цитированием
  #4  
Старый 16.02.2012, 21:51
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Есть ещё и такое:
Код:
  GetClassLong(Wnd, GCL_HBRBACKGROUND)
но это для окон у которых цвет фона прописан в классе.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 16.02.2012, 21:59
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию

спасибо) мне для них и надо) сейчас тестить пойду)

что то не робит( проверил на форм даже( всегда ноль возвращает...

Последний раз редактировалось reqyz, 16.02.2012 в 22:09.
Ответить с цитированием
  #6  
Старый 16.02.2012, 22:15
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Почему же, это рабочая функция. Скорее всего Wnd неверный. Попробуй сначала установить цвет, а потом запросить:
Код:
var
  aBrush, bBrush : HBRUSH;
  ...

  aBrush := CreateSolidBrush($DD2020);
  SetClassLong(Wnd, GCL_HBRBACKGROUND, aBrush);
  ...
  bBrush := GetClassLong(Wnd, GCL_HBRBACKGROUND);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 17.02.2012, 06:15
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию

Код:
  bBrush := GetClassLong(WindowFromPoint(Mouse.CursorPos), GCL_HBRBACKGROUND);
  brush.Handle:=bBrush;
  Shape1.Brush.Color:=Brush.Color;
к сожалению bbrush из любого окна, даже специально мною созданного, возвращает #FFFFFF у меня виндоус7 может в этом дело? присвоение цвета тоже не работает..
Ответить с цитированием
  #8  
Старый 17.02.2012, 06:40
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
Восклицание

спасибо всем за помощь, задачу решил сам)))

Код:
Shape1.Brush.Color:=FindControl(WindowFromPoint(Mouse.CursorPos)).Brush.Color;

работает для всех окон, у которых есть это свойство) для остальных находить и не надо, вопрос: "как проверить теперь что у окна этого свойства нет?" ато ошибку выдаёт(


блин косяк( таким образом только почемуто у самой себя нормально получает цвет..

Последний раз редактировалось reqyz, 17.02.2012 в 07:21.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter