Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
23 / 23 / 6
Регистрация: 16.10.2010
Сообщений: 211

Создание компонента, изменяющего форму

11.02.2012, 13:48. Показов 1111. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Стартовал топик на делфи ответа нет может тут люди добрее.

Хочу написать компонент изменяющий форму полностью. Потихоньку получается. Проблема в том что когда сам рисую рамку нужна ее прозрачность, но при движении или растягивании формы рамка не обновляет свой фон и получается накладывание и прозрачность теряется рамки. Есть ли способ обновить фон рамки или есть другой способ ее рисования? Делал вот так вот.

Добавлено через 3 минуты
Возможно не то делаю. Потому что наткнулся на msdn'e об многошаровых окнах с прозрачной рамкой.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.02.2012, 13:48
Ответы с готовыми решениями:

Ошибка при добавлении компонента на форму
Здравствуйте! Проблема в том что при добавлении нового компонента на форму часто бывает так что после компиляции в тех или иных случаях...

Ошибка при добавлении компонента на форму
причем на форме уже есть компоненты.. выдает ошибку в адрессе и ссылается на модуль rtl60.bpl в помощи у справки такой заголовок...

Создание компонента
Подскажите пожалуйста что может быть не так? Я создавала новый компонент) Подключала как в методичке было

5
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
11.02.2012, 17:04
Посмотри небольшой примерчик может найдеш что полезного...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <vcl.h>
#pragma hdrstop
 
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm4 *Form4;
//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
  : TForm(Owner)
{
  m_pict = new TPicture;
  m_pict->LoadFromFile("øàáëîí.bmp");
}
 
__fastcall TForm4::~TForm4()
{
  delete m_pict;
}
 
//---------------------------------------------------------------------------
 
HRGN RegionFromPicture(TPicture *pict, TColor backcolor)
{
  HRGN resRgn = ::CreateRectRgn(0, 0, 0, 0); //Ðåçóëüòèðóþùèé ðåãèîí
  HRGN rgn;
  int x, y, xFirst;
  //Àíàëèçèðóåì êàæäóþ ñêàí-ëèíèþ ðèñóíêà (ïî ãîðèçîíòàëè)
  for (y = 0; y < pict->Height; y++)
  {
    x = 0;
    while (x < pict->Width)
    {
      if (pict->Bitmap->Canvas->Pixels[x][y] != backcolor)
      {
        xFirst = x;
        x++;
      
        while (x < pict->Width &&
               pict->Bitmap->Canvas->Pixels[x][y] != backcolor) x++;
 
        rgn = ::CreateRectRgn(xFirst, y, x-1, y+1);
        ::CombineRgn(resRgn, resRgn, rgn, RGN_OR);
        ::DeleteObject(rgn);
      }
      x++;
    }
  }
  return resRgn;
}
 
void __fastcall TForm4::FormCreate(TObject *Sender)
{
  ::SetWindowRgn( Handle, RegionFromPicture(m_pict, (TColor)RGB(255,255,255)), TRUE );
}
//---------------------------------------------------------------------------
void __fastcall TForm4::FormPaint(TObject *Sender)
{
 
  TRect wndRect;
  ::GetWindowRect(Handle, &wndRect);
  TPoint clientOrg(0, 0);
  clientOrg = ClientToScreen(clientOrg);
  int dx = clientOrg.x - wndRect.Left;
  int dy = clientOrg.y - wndRect.Top;
  this->Canvas->Draw(-dx, -dy, m_pict->Bitmap);
}
2
23 / 23 / 6
Регистрация: 16.10.2010
Сообщений: 211
15.02.2012, 16:11  [ТС]
Этот код полезен. Я голову ломал когда то как по битмапе подобное сделать.

Я видел способ у компонента Dynamic Skined Form таков, там создавалось четыри окна вокруг главного но, они каким то образом были прикреплены к главной форме. И на этих прозрачных окнах рисовались с определенной прозрачностью рамки. Может кто знает как создаются многошаровые окна? И как отрисовывать их потом верно?

Добавлено через 13 минут
Все нашел решение , может кому надо будет тоже, очень интересная статья
1
23 / 23 / 6
Регистрация: 16.10.2010
Сообщений: 211
07.03.2012, 12:06  [ТС]
Маленькая но очень неприятная проблема.
1. Кaк измeнить paзмep зaгoлoвкa фopмы не NoClientArea а именно заголовка старого виндовс.
2. Кaк пepexвaтить измeнeниe нaдпиcи зaгoлoвкa полностью? SetText устанавливает caption но что то его рисует и тогда при частом обновлении заголовка NoClientArea мерцает.
3. А wm_ncmouselive вообще работает? ну на этот вопрос можно не давать ответ выкрутился.
4. Можно ли вообще у семерки и висты glass frame рисовать как вздумается, ну или хотябы с зоакругленными краями? И каким образом это дело делают, была тема знаю но найти не смог
0
23 / 23 / 6
Регистрация: 16.10.2010
Сообщений: 211
10.03.2012, 12:14  [ТС]
Цитата Сообщение от Leemurchonok Посмотреть сообщение
Маленькая но очень неприятная проблема.
1. Кaк измeнить paзмep зaгoлoвкa фopмы не NoClientArea а именно заголовка старого виндовс.
2. Кaк пepexвaтить измeнeниe нaдпиcи зaгoлoвкa полностью? SetText устанавливает caption но что то его рисует и тогда при частом обновлении заголовка NoClientArea мерцает.
3. А wm_ncmouselive вообще работает? ну на этот вопрос можно не давать ответ выкрутился.
4. Можно ли вообще у семерки и висты glass frame рисовать как вздумается, ну или хотябы с зоакругленными краями? И каким образом это дело делают, была тема знаю но найти не смог
Второе решил оказывается что в lParam находится ссылка на текст заголовка. Ответ очень нужен На первый вопрос. Пожалуйста.
0
11.03.2012, 11:52
 Комментарий модератора 
Leemurchonok, Правила
2.4. На каждый вопрос создавайте по одной теме - это помогает избежать путаницы в ответах и облегчает поиск.
Или тема будет закрыта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.03.2012, 11:52
Помогаю со студенческими работами здесь

Создание компонента
Здравствуйте. Создал свой компонент на основе Button. Нужно сделать так, чтобы отсчитывались секунды на нажатие по кнопке. Но дело в том...

Создание компонента
Добрый день, создал свой компонент на основе имеджика, нужно сделать так, чтобы на нем была надпись. Как вариант - думаю динамически...

Создание компонента
Вот прочитал две книги о компнентах. Теперь пишу свой. Нужно изменить форму так что бы местами была прозрачная, подобное есть в тмс паке,...

Создание компонента
Добрый вечер, форумчане! Пошуршил по форуму, но так и не нашел полезной мне информации. Кто может описать от начала и до конца как...

Создание компонента в C++ Builder
Ребята, у меня будет такой вопрос как сделать : На основе одного из базовых классов визуальных компонентов разработать собственный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru