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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.05.2008, 23:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию "Прозрачный" TEdit на PageControl'е

Замучался уже "взламывать" Edit. Может кто знает?

Нужно сделать так, что бы TEdit на PageControl'е был того-же цвета, как и сама страничка (с учетом темы). Как известно, если стоит классическая тема в XP или прога работает в Win2000, то цвет странички PageControl'a стоит в clBtnFace. Под XP в дизайн-тайме все тоже самое, но!!! в момент выполнения ее цвет явно не clBtnFace!!!

Как поймать этот цвет или сделать TEdit прозрачным.

Что пробовал:
1. Добавить убрать csOpaque у Edit'а в ComponentStyle момент создания формы.
2. Отловить цвет кисти канвы странички PageControl'а и поставиь его Edit'у.
3. Просто подобрать нужный цвет среди системных у Delphi.

Ничего из перечисленного не помогло.
Может кто знает правильный путь?
Ответить с цитированием
  #2  
Старый 08.05.2008, 12:33
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Что-то у Вас странно. На PageControl'е только элементы TabSheet, а уже на них кидаем Edit. Во-вторых, цвет кнопки - серый, а окно Edit'а так и называется "окно" (я, чтоб глаза не портить вместо белого цвета поставил жёлто-оранжевый). А в конце вообще не понятно: Вам надо отрегулировать цвет Edit'а или TabSheet'а (если они есть)?
Ответить с цитированием
  #3  
Старый 08.05.2008, 13:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Естественно, Edit'ы ложаться на TabSheet'ы. Цвет TabSheet'а зависит от темы, цвет Edit'а - один из системных, но его можно сменить. Я хочу сделать так, как в диалоге Properties самой винды, когда внешне не видно, что строка лежит в edit'е, но ее можно выделить и скопировать. Для этого надо либо сделать edit прозрачным, либо "отловить" нужный цвет и поставить его edit'у.
Ответить с цитированием
  #4  
Старый 08.05.2008, 14:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

ну что, никто не знает как это сделать???
Ответить с цитированием
  #5  
Старый 11.05.2008, 02:37
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

видимо никто не знает
Ответить с цитированием
  #6  
Старый 11.05.2008, 10:04
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Код:
Edit1.BorderStyle:=bsNone;
Edit1.Color:=GetFormImage.Canvas.Pixels[PageControl1.Left + TabSheet1.Left, PageControl1.Top + TabSheet1.Top];
Но это сработает не всегда, только если TabSheet видим, ничем не перекрыт, и находится в пределах формы (не выходит за ее границы).
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.

Последний раз редактировалось The Shadow, 11.05.2008 в 10:08.
Ответить с цитированием
  #7  
Старый 11.05.2008, 23:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Жестоко.
Я вот думал в сторону мож кто знает theme API... что бы просто из системы получить цвет...

но и так хорошо, если будет работать...
Ответить с цитированием
  #8  
Старый 11.05.2008, 23:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не совсем работает. Под темой не тот цвет все-таки дает, зараза.
Но это лучший вариант на данный момент.

Для тех, кто в будущем захочет воспользоваться этим способом.
Правильный код вот:
Код:
var
  AFormImage : TBitmap;
begin
  Edit1.BorderStyle:=bsNone;
  AFormImage := GetFormImage;
  Edit1.Color := AFormImage.Canvas.Pixels[PageControl1.Left + TabSheet1.Left, PageControl1.Top + TabSheet1.Top];
  AFormImage.Free;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter