23 / 23 / 6
Регистрация: 16.10.2010
Сообщений: 211

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

11.02.2012, 13:48. Показов 1113. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru