| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Как сделать дырку в форме |
| Автор: Scotch 24.9.2007, 21:26 | ||
| Всем привет скачал свежую DRKB (спасибо создателм), попробовал сделать пример, столкнулся с ошибкой [Error] Unit1.pas(43): Undeclared identifier: 'Pts' действительно непонятно что это за фрукт, плюс на эту команду "CreatePolygonRgn" не могу вызвать справку в Delphie. Можете объяснить как это должно работать?
Озадачен такой проблемкой - хочу сделать форму нестандартного вида, как бы намертво склеенную из 2-х прямоугольных форм (например, одинаковых), но одна чуть выше и правее другой (наложены одна на другую). Не проблема написать обработчик перемещения формы и, соответсвенно, привязать координаты другой к этим перемещениям, но есть проблема - форма которая левее не должна становиться активной и перекрывать собой форму правее. Т.е. правая форма всегда должна оставаться активной, даже если курсор мыши перемещает левую форму... Помогите разобраться, можно ли и как это обойти? |
| Автор: aktuba 24.9.2007, 22:42 |
| Перехватывай OnActive... А почему нельзя сделать просто форму нестандартной формы, обрезанную по какому-то региону? |
| Автор: Vetos 25.9.2007, 08:33 |
| Так у тебя хотя бы где нибудь описывается var Pts, а так конечно будет выдавать ету ошибку, прочти внимательней пример |
| Автор: Rodman 25.9.2007, 08:35 | ||
|
| Автор: Snowy 25.9.2007, 10:38 |
| Лучше воспользуйся регионами и вырежи нужную фигуру. |
| Автор: Scotch 25.9.2007, 16:12 | ||
Дык и я о том же, товарисч! Думаю в справке правильнее помещать рабочие примеры, чтобы на их работе разбираться дальше. |
| Автор: Scotch 25.9.2007, 17:07 |
| Спасибо товарищу Rodman у, сработало, хоть и несколько не так как ожидалось... Хотелось реальную дырку в форме, чтобы сквозь нее были видны изображения, расположенные за формой. |
| Автор: Alix 25.9.2007, 17:51 | ||
| Например это может быть нужно, если хочется чтобы одна форма была не прозрачной, а у другой полупрозрачной. Делай примерно так:
|
| Автор: Scotch 25.9.2007, 19:00 | ||
В общем то, я так и хотел сделать (но не знаю как), думал с двумя формами будет проще. Подскажите пожалуйста, как пользоваться регионами и вырезать формы? |
| Автор: Alix 25.9.2007, 20:14 | ||
Вот код, вырежет дырку.
|
| Автор: Scotch 25.9.2007, 21:31 |
| Спасибо, Alix, это то что было нужно! |
| Автор: aktuba 25.9.2007, 21:33 | ||
Посмотри в http://drkb.ru/ или в http://delphiworld.narod.ru... |
| Автор: Guedda 26.9.2007, 10:09 |
| http://delphiworld.narod.ru/base/create_region_by_mask.html, http://delphiworld.narod.ru/base/ring_win.html, http://delphiworld.narod.ru/base/form_by_image.html, http://delphiworld.narod.ru/base/create_controls_with_any_shape.html и http://delphiworld.narod.ru/base/skins.html. Выбирай |
| Автор: Scotch 26.9.2007, 13:52 |
| Спасибо, спасибо, спасибо, спасибо и спасибо буду ваять и разбираться |
| Автор: Alexeis 26.9.2007, 17:57 |
В нашем FAQe не хуже написано http://forum.vingrad.ru/index.php?show_type=faq&showtopic=155942 http://forum.vingrad.ru/index.php?show_type=faq&showtopic=155945 http://forum.vingrad.ru/index.php?show_type=faq&showtopic=155948 http://forum.vingrad.ru/index.php?show_type=faq&showtopic=155954 http://forum.vingrad.ru/index.php?show_type=faq&showtopic=156058 |
| Автор: Guedda 26.9.2007, 18:25 |
И правда, на нашем FAQ все лучше расписано! |
| Автор: Scotch 26.9.2007, 19:09 |
| Расписано может быть и хорошо, но по моей проблемке ничего не нашел Мне нужно вырезать в форме 2 прямоугольника, если делать это через SetWindowRgn то захожу в тупик - вырезается только 1, как ни крути |
| Автор: Alexeis 26.9.2007, 19:11 |
Все это делается последовательными вызовами CombineRgn. Эта функция служит для объединения и ее можно вызывать много раз для изменения региона. Модератор: темы объединил. |
| Автор: Scotch 26.9.2007, 20:47 |
| Понятно, оказывается все просто |
| Автор: BaD_SeCt0R 26.9.2007, 23:24 |
| А вот у меня, так, ради интереса, появилась пара вопросов. 1. При "обрезке" формы регионом она теряет ХР-шный вид. Как с этим бороться? 2. Если то же самое делать с кнопой, то края у нее обрезаются довольно нелицеприятно. Регион просто ограничивает область видимости контрола. Мне бы, например, хотелось бы увидеть ту же кнопку, но с "правильными" краями. Это возможно без долгих извращений? |
| Автор: Alexeis 26.9.2007, 23:37 |
| Сам все сказал. Добавлю только что не только область рисования, но ограничивает и область при попадании в которую курсора мыши винда отсылает сообщения о перемещении, кликах, передаче фокуса ввода и т.д. |
| Автор: BaD_SeCt0R 26.9.2007, 23:59 | ||
Alexeis, это все так. Может быть я не слишкм конкретно вопрос ставлю?.. На пальцах. У кнопы, если есть манифест, вокруг синенькая рамочка. Прямоугольная. А как мне сделать круглый батон с такой же рамочкой? Да и вообще батон любой формы? Да тоже и формы касается. Есть ли вариант ей по границе региона бордер налепить? И еще про форму. После установки ей региона, у нее пропадает стиль ХР. Сразу после первой перерисовки. |
| Автор: BaD_SeCt0R 27.9.2007, 00:31 |
| М-да... Из того, что смог найти, делаю вывод, что без извращений не обойтись... |
| Автор: lukas 29.9.2007, 16:44 |
| А что дырку то делать... TransparentColor в true, TransparentColorValue = clRed (например), и рисуем себе дырку красного цвета... *для формы) |
| Автор: Alexeis 29.9.2007, 19:58 |
| Так дырка тоже регионами делается, только вычитанием их. TransparentColor - для формы работает только, для компонентов не годиться. |