Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание компонента нестандартной формы

10K
20 ноября 2006 года
АлРАД
58 / / 30.08.2006
Создание компонента нестандартной формы [SIZE="2"]без использования АПИ!!![/SIZE].
Это вообще возможно?
Вроде как все компоненты написаны на паскале. Но я никак не могу понять, где... сколько не хожу, все ссылки ведут в заголовочные файлы?

И с чего начать, может быть есть какие-нибудь ресурсы в интернете на эту тему? Было бы здорово!

Подскажите, знающие
547
21 ноября 2006 года
Hydra
488 / / 20.06.2006
Ага, а в заголовочных файлах как раз вызовы API функций для создания окон. :)
501
21 ноября 2006 года
hell_admin
110 / / 02.10.2004
Могу только предложить кинуть картинку и посавить у нее transparent color.
547
22 ноября 2006 года
Hydra
488 / / 20.06.2006
Цитата:

Могу только предложить кинуть картинку и посавить у нее transparent color.


И как это, интересно, картинку можно куда-то кинуть без API?

501
22 ноября 2006 года
hell_admin
110 / / 02.10.2004
Цитата: Hydra
И как это, интересно, картинку можно куда-то кинуть без API?


Человек наверно имел ввиду самому ничего не писать на API.. а только VCL обойтись

547
22 ноября 2006 года
Hydra
488 / / 20.06.2006
Тогда эта фраза
[QUOTE=АлРАД]
Вроде как все компоненты написаны на паскале.
[/QUOTE]
несколько странно звучит. Да и вопрос сформулирован не совсем корректно.
2АлРАД Поищи по форуму SetWindowRgn - вроде был отличный пример.
10K
25 ноября 2006 года
АлРАД
58 / / 30.08.2006
Цитата:
несколько странно звучит. Да и вопрос сформулирован не совсем корректно.


Сейчас расскажу свою историю:
Я пишу графический компонент, который должен принимать форму того, что на нем нарисовано.
Через АПИ я нашел три способа это сделать:
1)BeginPath, рисую фигуру ,EndPath, SetWindowRgn
Но в конце концов мне пришлось от него отказаться, потому что в нем можно было рисовать только фигуры с замкнутым контуром. А назначение компонента - и в том, чтобы делать окно хоть в форме точки.
2)SetWindowRgn - при этом проходиться по всему фону циклом, проверяя цвет каждого пикселя. Если он не соответствует фону, то CreateRectRgn его, ну и SetWindowRgn. Увы этот способ оказался слишком медленным. Аж до нескольких секунд (в зависимости от размеров фона). Пришлось от него отказаться
3)GetWindowLong, SetWindowLong, SetLayeredWindowAttributes - но это работало только для главных форм, но не для контролов.

Таким образом я оказлся у разбитого корыта.

Цитата:
Вроде как все компоненты написаны на паскале.

Эта фраза означае : везде пишется о том, что в VC++ - Компоненты написаны на С, а в BC++B - на паскале. Теоретически, занчит можно залезсть в эти исходники и их преписать, или научиться писать соответствующие компоненты нестандартной формы.
Вот такая... жизнь. Помогите

355
25 ноября 2006 года
<SCORP>
786 / / 21.10.2006
там есть какая-то функция, которой отдаётся битмап и цвет фона. а она сама создаёт регион из картинки. фон в итоге не видно. если найду как называется, кину. но это скорее всего в понедельник будет -- надо на работе глянуть в сырцах
10K
25 ноября 2006 года
АлРАД
58 / / 30.08.2006
Цитата:
там есть какая-то функция, которой отдаётся битмап и цвет фона. а она сама создаёт регион из картинки. фон в итоге не видно. если найду как называется, кину. но это скорее всего в понедельник будет -- надо на работе глянуть в сырцах

< SCORP>, буду очень признателен!
Не важно, хоть в понедельник :), я с этим вопросом уже второй месяц мучаюсь. Если подскажете - цены вам нет!!!

14K
25 ноября 2006 года
lesha_m
14 / / 13.12.2005
[QUOTE=<SCORP>;155961]там есть какая-то функция, которой отдаётся битмап и цвет фона. а она сама создаёт регион из картинки. фон в итоге не видно. если найду как называется, кину. но это скорее всего в понедельник будет -- надо на работе глянуть в сырцах[/QUOTE]

В книжке Архангельского и тагина "Приемы программирования в C++ Builder" рассматривается аналогичный пример по формированию форм на основе битмапов...
Специально щас глянул - они там регион вручную строят по пикселам, никакой отдельной функции не используют. Если бы была стандартная функция неужели они бы ее не знали? Хотя всяко может быть...
К сожалению в электронном виде нет - привел бы код, а набивать 5 страниц текста неохота.
355
25 ноября 2006 года
&lt;SCORP&gt;
786 / / 21.10.2006
я тока щас глянул что эта тема в ветки о си билдере :)
короче, в дельфе такая фишка была у формы -- AlphaBlending кажись называлась, свойство такое у формы. потом есть AlphaColor (кажись :) ), который будет прозрачным. в билдере должно быть аналогично. посмотри по исходникам как реализовано. просто у меня щас ни дельфы, ни билдера нету
вот что-то об этом
http://delphi.about.com/od/graphics/l/aa022202a.htm
10K
26 ноября 2006 года
АлРАД
58 / / 30.08.2006
Цитата:
К сожалению в электронном виде нет - привел бы код, а набивать 5 страниц текста неохота.

А в чем идея? Какие функции используют?

Цитата:
AlphaBlending

Но он только для форм, наследуемых от TCustomform. А как его применить для контрола?

14K
26 ноября 2006 года
lesha_m
14 / / 13.12.2005
Цитата: АлРАД
А в чем идея? Какие функции используют?



Я сильно не вникал, но по-моему обычный попиксельный проход и формирование контура.
Затем формирование полигона стандартной CreatePolygonRgn

Я не нашел диска от этой книжки, наверняка он был, но на картинке все красиво - какое изображение такая и форма.

355
27 ноября 2006 года
&lt;SCORP&gt;
786 / / 21.10.2006
короче, как и обещал. единственный прикол в том, что это не APIха ))) это самописная функция (я чё-то завтыкался, вдиать, когда код смотрел)
называется CreateRgnFromBitmap. найти можно, например, тут:
http://www.google.com/codesearch?hl=ru&q=+CreateRgnFromBitmap+show:BC-TX59ZMnE:PTqyhEnou3s:ZWZMfzQxsms&sa=N&cd=1&ct=rc&cs_p=http://www.primopdf.com/downloads/primosource.zip&cs_f=PrimoPDF/xSkinButton.cpp#a0
и там на самом деле используется попикселный проход.
10K
29 ноября 2006 года
АлРАД
58 / / 30.08.2006
Спасибо, <SCORP>! бИГ THANK! Хорошо помог.

lesha_M , тоже благодарб за внимание.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог