Создание компонента нестандартной формы
Это вообще возможно?
Вроде как все компоненты написаны на паскале. Но я никак не могу понять, где... сколько не хожу, все ссылки ведут в заголовочные файлы?
И с чего начать, может быть есть какие-нибудь ресурсы в интернете на эту тему? Было бы здорово!
Подскажите, знающие
Могу только предложить кинуть картинку и посавить у нее transparent color.
И как это, интересно, картинку можно куда-то кинуть без API?
Человек наверно имел ввиду самому ничего не писать на API.. а только VCL обойтись
[QUOTE=АлРАД]
Вроде как все компоненты написаны на паскале.
[/QUOTE]
несколько странно звучит. Да и вопрос сформулирован не совсем корректно.
2АлРАД Поищи по форуму SetWindowRgn - вроде был отличный пример.
Сейчас расскажу свою историю:
Я пишу графический компонент, который должен принимать форму того, что на нем нарисовано.
Через АПИ я нашел три способа это сделать:
1)BeginPath, рисую фигуру ,EndPath, SetWindowRgn
Но в конце концов мне пришлось от него отказаться, потому что в нем можно было рисовать только фигуры с замкнутым контуром. А назначение компонента - и в том, чтобы делать окно хоть в форме точки.
2)SetWindowRgn - при этом проходиться по всему фону циклом, проверяя цвет каждого пикселя. Если он не соответствует фону, то CreateRectRgn его, ну и SetWindowRgn. Увы этот способ оказался слишком медленным. Аж до нескольких секунд (в зависимости от размеров фона). Пришлось от него отказаться
3)GetWindowLong, SetWindowLong, SetLayeredWindowAttributes - но это работало только для главных форм, но не для контролов.
Таким образом я оказлся у разбитого корыта.
Эта фраза означае : везде пишется о том, что в VC++ - Компоненты написаны на С, а в BC++B - на паскале. Теоретически, занчит можно залезсть в эти исходники и их преписать, или научиться писать соответствующие компоненты нестандартной формы.
Вот такая... жизнь. Помогите
< SCORP>, буду очень признателен!
Не важно, хоть в понедельник :), я с этим вопросом уже второй месяц мучаюсь. Если подскажете - цены вам нет!!!
В книжке Архангельского и тагина "Приемы программирования в C++ Builder" рассматривается аналогичный пример по формированию форм на основе битмапов...
Специально щас глянул - они там регион вручную строят по пикселам, никакой отдельной функции не используют. Если бы была стандартная функция неужели они бы ее не знали? Хотя всяко может быть...
К сожалению в электронном виде нет - привел бы код, а набивать 5 страниц текста неохота.
короче, в дельфе такая фишка была у формы -- AlphaBlending кажись называлась, свойство такое у формы. потом есть AlphaColor (кажись :) ), который будет прозрачным. в билдере должно быть аналогично. посмотри по исходникам как реализовано. просто у меня щас ни дельфы, ни билдера нету
вот что-то об этом
http://delphi.about.com/od/graphics/l/aa022202a.htm
А в чем идея? Какие функции используют?
Но он только для форм, наследуемых от TCustomform. А как его применить для контрола?
Я сильно не вникал, но по-моему обычный попиксельный проход и формирование контура.
Затем формирование полигона стандартной CreatePolygonRgn
Я не нашел диска от этой книжки, наверняка он был, но на картинке все красиво - какое изображение такая и форма.
называется 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
и там на самом деле используется попикселный проход.
lesha_M , тоже благодарб за внимание.