Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с прозрачностью Edit, Что-то есть, но не то что хочется 
:(
    Опции темы
Dr3d
Дата 27.6.2007, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пытаюсь сделать прозрачный фон у Edit, а не получается.
Фон белый, если напечатать текст а потом удалить, то курсор перемещается - символы остаются.
Печатается поверх старого текста.
Видимо делаю что-то не так.
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

long OWndProc;

int MyWndProc(MSG msg)
{
switch(msg.message)
{
case WM_CTLCOLOREDIT:
SetBkMode((HDC)msg.wParam, TRANSPARENT);
return (BOOL)GetStockObject(NULL_BRUSH);
}
return CallWindowProc((FARPROC)OWndProc, Form1->Handle, msg.message, msg.wParam, msg.lParam);
}

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
OWndProc = SetWindowLong(Form1->Handle, GWL_WNDPROC, (long)MyWndProc);
}
//---------------------------------------------------------------------------

PM MAIL   Вверх
Klin
Дата 27.6.2007, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А нафига тебе эта марока? Поменяй цвет, да с песней. Или если принципиально - используй Label с обработкой клавиш.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Dr3d
Дата 28.6.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Klin, на ворме лежит красивая картинка, Edit, какого бы цвета он ни был, все портит.
Использовать Label ещё больше гемора.
PM MAIL   Вверх
Klin
Дата 28.6.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ну насчет картинки, это дело хорошее - это я уже реализовал, начет вашей прозрачности буквенного фона, я использовал перепрорисовку при изменении текста, но здесь еще подумаю, а пока так:

1. Идет твой код прозрачности для текстового поля

2. Отображаем часть нашего изображения в текстовом поле.

Код

 Edit1->Brush->Bitmap = new Graphics::TBitmap; // иницилизируем наш bitmap
 Edit1->Brush->Bitmap->Height = Edit1->Height; // задаем его размеры
 Edit1->Brush->Bitmap->Width = Edit1->Width;
 BitBlt(Edit1->Brush->Bitmap->Canvas->Handle,0,0, Edit1->Left-Image1->Left+Edit1->Width,
  Edit1->Top-Image1->Top+Edit1->Height, Image1->Canvas->Handle,Edit1->Left-Image1->Left, // + 3 для выравнения, если есть рамка
  Edit1->Top-Image1->Top,SRCCOPY); // копируем чать изображения в него
OWndProc = SetWindowLong(Handle, GWL_WNDPROC, (long)MyWndProc); // твоё добро :)


3. В OnChange нашего текстового поля:

Код

 Edit1->Repaint();



Это сообщение отредактировал(а) Klin - 28.6.2007, 14:55


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Klin
Дата 28.6.2007, 14:48 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Мда, опять не знание синтаксиса убивает идеи на корню smile  switch знаем, case знаем, а break...

Да и возврат лишний  return (BOOL)GetStockObject(NULL_BRUSH);

Код

long OWndProc;
int MyWndProc(MSG msg)
{
 if (msg.message == WM_CTLCOLOREDIT) SetBkMode((HDC)msg.wParam, TRANSPARENT);
 return CallWindowProc((FARPROC)OWndProc, Form1->Handle, msg.message, msg.wParam, msg.lParam);
}


Добавлено через 5 минут и 57 секунд
пример

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  sample.zip 25,33 Kb


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Dr3d
Дата 28.6.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, буду медитировать.
PM MAIL   Вверх
Klin
Дата 28.6.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А этот код (в сочетани с предыдущем), если его поставить на OnActivate даст полную прозрачность, т.е не только рисунок будет видно, но и все, что находиться за контролом (текст, другие изображения и т.п.)


Код

 Repaint(); // перепрорисовка формы (иначе будет некорректное отображение)
 Edit1->Brush->Bitmap = new Graphics::TBitmap; // инициализируем bitmap
 Edit1->Brush->Bitmap->Height = Edit1->Height; // подгоняем его под размеры нашего поля
 Edit1->Brush->Bitmap->Width = Edit1->Width; 
 BitBlt(Edit1->Brush->Bitmap->Canvas->Handle,0,0, Edit1->Left+Edit1->Width,
  Edit1->Top+Edit1->Height, Canvas->Handle,Edit1->Left+3,Edit1->Top+2,SRCCOPY); // копируем все, что под полем
 Edit1->Visible = true; // показываем наше прозрачное поле


ps. Текстовое поле необходимо сделать невидимым по умолчанию, иначе программа "пропечатает" его на самого себя.

pps. Да и похоже от использования Memo придется отказаться, т.к. возникают графические искажения. Зато другие Edit`ы, да и RichEdit работают нормально. 


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
TopCore
Дата 25.8.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите!!! Куда-то делась прозрачность формы. Настройки как надо: TransparentColor = true, TrColValue = clPurple, Color = clPurple. А форма всё равно не становится прозрачной. Причём в приложении 3 формы и на одной работает прозрачность, а на другой нет. Что могло где-то измениться? smile 
PM MAIL   Вверх
TopCore
Дата 25.8.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нашёл проблему - всё дело оказалось в альфаскинах.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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