Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2011, 20:27   #1
stannic
Новичок
Джуниор
 
Регистрация: 02.07.2011
Сообщений: 2
По умолчанию GroupBox с прямоугольным вырезом

Где можно найти вот такой компонент-наследник TGroupBox? Или как его проще нарисовать? Нужно, чтобы все свойства обычного групбокса сохранились, плюс чтобы можно было вывернуть внутрь любой угол, как на рисунке.
Спасибо.
Изображения
Тип файла: jpg examples.JPG (7.0 Кб, 66 просмотров)
stannic вне форума Ответить с цитированием
Старый 02.07.2011, 21:21   #2
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Вот попробуйте, а дальше копайте в этом направлении.

Код:
function BitmapToRegion(Bitmap: TBitmap; TransColor: TColor): HRGN;
var X, Y: Integer;
    XStart: Integer;
begin
 Result := 0;
 with Bitmap do
 for Y := 0 to Height - 1 do
  begin
   X := 0;
   while X < Width do
    begin
     // Пропускаем прозрачные точки
     while (X < Width) and (Canvas.Pixels[X, Y] = TransColor) do
      Inc(X);
      if X >= Width then
      Break;
      XStart := X;
     // Пропускаем непрозрачные точки
     while (X < Width) and (Canvas.Pixels[X, Y] <> TransColor) do
      Inc(X);
      // Создаём новый прямоугольный регион и добавляем его к
      // региону всей картинки
      if Result = 0 then
       Result := CreateRectRgn(XStart, Y, X, Y + 1)
     else
       CombineRgn(Result, Result,
       CreateRectRgn(XStart, Y, X, Y + 1), RGN_OR);
     end;
  end;
end;


procedure TForm1.FormCreate(Sender: TObject);
Var RGN : HRGN;
begin
 GroupBox1.Color := rgb(4,150,120);
 // создаем регион для картинки
 RGN:= BitmapToRegion(Image1.Picture.Bitmap, clWhite);
 // устанавливаем новый регион
 SetWindowRgn(GroupBox1.Handle, RGN, True); // второй параметр всегда равен True
end;
Вам еще понадобится BMP картинка 16-bit , приблизительно так :


Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 02.07.2011, 22:20   #3
stannic
Новичок
Джуниор
 
Регистрация: 02.07.2011
Сообщений: 2
По умолчанию

volod3000,
спасибо! Ваш вариант только что проверил, буду копать дальше. Только один вопрос: ресурсы освобождать нужно (DeleteRgn) или они сами освобождаются?
stannic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скопировать GroupBox a_n_n_a Общие вопросы Delphi 5 15.03.2011 10:30
белые границы в GroupBox? maxefficiently Помощь студентам 0 18.02.2011 20:59
GroupBox Chudo4258 Помощь студентам 2 07.05.2009 21:43
GroupBox Иринкаа Компоненты Delphi 5 23.11.2007 18:45