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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2015, 09:56   #1
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию Canvas и прозрачность

Здравствуйте, пишу компонент с собственной отрисовкой, решил ему скруглить края, а на месте где эти края белый фон, как избежать такого?)

Код:

    b:TBitmap;
///
///....
procedure blabla.paint;
begin
  if not FPainting then
  begin
    FPainting:=true;

    b.Width:=Width-3;
    b.Height:=Height-3;

    b.Canvas.Pen.Style:=psSolid;
    b.Canvas.pen.Color:=rgb($42,$DF,$FC);
    b.Canvas.Brush.Style:=bssolid;
    b.Canvas.Brush.Color:=clBlack;//RGB($A6,$F1,$FF);
    b.Canvas.RoundRect(0,0,b.Width,b.Height,10,10);

    Canvas.Draw(0,0,b);
    FPainting:=false;
  end;
end;


Без битмапа все хорошо но вот с ним почему то белые участки

Так же проблема решается с заливкой и транспарентом. Но делать какой то цвет прозрачным я не хочу (все цвета нужны)

Код:
    b.Canvas.Brush.Style:=bssolid;
    b.Canvas.Brush.Color:=clWhite;
    b.Canvas.FillRect(b.Canvas.ClipRect);

    b.Transparent:=true;
    b.TransparentColor:=clwhite;
    b.TransparentMode:=tmFixed;
Здравствуйте

Последний раз редактировалось NEoMASTERR; 21.02.2015 в 10:13.
NEoMASTERR вне форума Ответить с цитированием
Старый 21.02.2015, 23:29   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Вот так вроде нормально работает
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  BM: TBitmap;
begin
  BM := TBitmap.Create;
  BM.Width  := 400;
  BM.Height := 400;
  with BM.Canvas do begin
    Pen.Color :=clRed;
    Brush.Color := clBlack;
    RoundRect (0,0,400,400,100,100);
  end;

  with Form1.Canvas do begin
    MoveTo(0,0);
    LineTo(1000,1000);
    CopyMode := cmSrcAnd;
    CopyRect (Rect(10,10,410,410), BM.Canvas, Rect(0,0,400,400));
  end;

  BM.Free;
end;
Sibedir вне форума Ответить с цитированием
Старый 22.02.2015, 09:18   #3
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Мой компонент с самостоятельной отрисовкой, никакого кода из других юнитов

В общем пока проблема решена, добавил в переменные цвет фона, по стандарту берётся btnFace
Код:
    FBackgroundColor:TColor;
    FBackgroundColor:=clBtnFace;

    b.Canvas.Brush.Style:=bsSolid;
    b.Canvas.Brush.Color:=FBackgroundColor;
    b.Canvas.FillRect(b.Canvas.ClipRect);
Здравствуйте

Последний раз редактировалось NEoMASTERR; 22.02.2015 в 09:20.
NEoMASTERR вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прозрачность Silant Помощь студентам 0 26.04.2012 18:37
Прозрачность digital-stream Общие вопросы Delphi 1 14.11.2011 21:03
Прозрачность на Image1.Canvas FanRa3 Мультимедиа в Delphi 2 22.05.2011 11:49
Прозрачность SanekIrk Общие вопросы Delphi 4 30.12.2008 12:12
прозрачность sergei64_89 Общие вопросы .NET 1 29.07.2008 21:43