powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Хочу TEdit с цветной рамкой
10 сообщений из 10, страница 1 из 1
Хочу TEdit с цветной рамкой
    #32547686
Клювик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Свойства задания цвета рамки вроде такого нет...
События перерисовки тоже нет, и канваса TEdit не имеет.
Теряюсь в догадках, что делать?
...
Рейтинг: 0 / 0
Хочу TEdit с цветной рамкой
    #32547757
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WM_NCPAINT - событие отрисовки неклиентской части. В данном случае, как раз бордера. Получаешь DC и рисуешь.
...
Рейтинг: 0 / 0
Хочу TEdit с цветной рамкой
    #32548820
Клювик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно немножко поподробнее, как этот мессадж использовать.
...
Рейтинг: 0 / 0
Хочу TEdit с цветной рамкой
    #32549300
SnowMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле все намного проще.
У Edit-a набо сделать свойство BorderStyle = bsNone
А в обработчике OnPaint формы написать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void __fastcall TForm1::FormPaint(TObject *Sender)
{
 Canvas->Pen->Color = clRed;
 Canvas->MoveTo(Edit1->Left- 1 , Edit1->Top- 1 );
 Canvas->LineTo(Edit1->Left+Edit1->Width, Edit1->Top- 1 );
 Canvas->LineTo(Edit1->Left+Edit1->Width, Edit1->Top+Edit1->Height);
 Canvas->LineTo(Edit1->Left- 1 , Edit1->Top+Edit1->Height);
 Canvas->LineTo(Edit1->Left- 1 , Edit1->Top- 1 );
}

Будет тебе красный бордюр.
...
Рейтинг: 0 / 0
Хочу TEdit с цветной рамкой
    #32549343
Клювик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, конечно, но моя идея - создать кмпонентик, у которого можно задавать цвет бордера. Через форму это не получится, значит, надо закладывать в потомок TEdit, или это вообще потомок чего-то другого.
...
Рейтинг: 0 / 0
Хочу TEdit с цветной рамкой
    #32550067
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDNThe DefWindowProc function paints the window frame.

An application can intercept the WM_NCPAINT message and paint its own custom window frame. The clipping region for a window is always rectangular, even if the shape of the frame is altered.

The wParam value can be passed to GetDCEx as in the following example.

Код: plaintext
1.
2.
3.
4.
5.
6.
case WM_NCPAINT:
{
    HDC hdc;
    hdc = GetDCEx(hwnd, (HRGN)wParam, DCX_WINDOW|DCX_INTERSECTRGN);
    // Paint into this DC
    ReleaseDC(hwnd, hdc);
}


То бишь, что получается: ты получаешь точный прямоугольный DC неклиентской части ЕдитБоха, в котором можешь рисовать, при этом ты должен создать регион для клиппинга, который будет покрывать клиентскую часть окна (сам ЕдитБох) и не перерисовывать её на этой месаге(WM_NCPAINT). Как создавать и использовать регионы, смотри функцию SetWindowRgn
...
Рейтинг: 0 / 0
Хочу TEdit с цветной рамкой
    #32551576
Клювик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А дескриптор не из BeginPaint() получать разве?
...
Рейтинг: 0 / 0
Хочу TEdit с цветной рамкой
    #32551656
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BeginPaint готовит DC для клиентской части. А нам нужна неклиентская.
...
Рейтинг: 0 / 0
Хочу TEdit с цветной рамкой
    #32555331
Клювик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А нельзя все-таки реальный пример из жизни, а не из MSDN-a, непонятно, как все эти дексрипторы получать.
...
Рейтинг: 0 / 0
Хочу TEdit с цветной рамкой
    #32555436
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, нету билдера под рукой.

В методах найди что-нить типа OnNcPaint.
это будет тебе как

case WM_NCPAINT:

дальше вставь код, который я написал выше.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Хочу TEdit с цветной рамкой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]