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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2010, 09:27   #1
Spot
Пользователь
 
Аватар для Spot
 
Регистрация: 04.06.2008
Сообщений: 32
По умолчанию Прозрачный bmp в RXDbgrid

Как вывести прозрачный bmp в RXDbgrid
Рисую так:
Код:
procedure TfMain.GrtekDrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
 Im1: TBitmap;
 grsndr:trxdbgrid;
begin
 grsndr:=sender as trxdbgrid;
 Im1 := TBitmap.Create;
With grsndr.Canvas do
 begin
   case DM.DSzakazy.DataSet.FieldByName('sost').AsInteger of
     40: Font.Color:=CLred;
     41,42: Font.Color:=CLblue;
     43,44,45,46: Font.Color:=clgreen;
   end;
   if (gdSelected in State)
   then Brush.Color:=$ccffff
   else brush.Color:=clWindow;
   if (Column.FieldName = 'vid') and (Column.Field.Text<>'')then
   begin
     FillRect(Rect);
     ILicons.GetBitmap(DM.DSzakazy.DataSet.FieldByName('imageindex').AsInteger, Im1);
     BrushCopy(Bounds(Rect.Left, Rect.Top, Im1.Width,
       Im1.Height), Im1, bounds(0, 0, Im1.width, Im1.height), clWhite);
     TextOut(Rect.Left+Im1.Width, Rect.Top+2, Column.Field.Text);
   end
   else
   begin
     FillRect(Rect);
     TextOut(rect.Left+2,rect.Top+2,Column.Field.Text)
   end;
 end;
end;
Spot вне форума Ответить с цитированием
Старый 15.02.2010, 11:16   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Как вариант (если подойдет). Делаем прозрачным текст, а не картинку. Тем более, что не понятно зачем нужно прозрачное изображение, если текст выводится справа от него.
Код:
procedure TfMain.GrtekDrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Im1: TBitmap;
begin
  Im1 := TBitmap.Create;
  try
    With Grtek.Canvas do begin
      case DM.DSzakazy.DataSet.FieldByName('sost').AsInteger of
        40: Font.Color:=CLred;
        41,42: Font.Color:=CLblue;
        43,44,45,46: Font.Color:=clgreen;
      end;
      if (gdSelected in State) then
        Brush.Color:=$ccffff
      else
        brush.Color := clWindow;
      FillRect(Rect);

      if (Column.FieldName = 'vid') and (Column.Field.Text<>'') then begin
        ILicons.GetBitmap(DM.DSzakazy.DataSet.FieldByName('imageindex').AsInteger, Im1);
        Draw(Rect.Left, Rect.Top, Im1);

        Im1.Transparent := True;
        Im1.TransParentColor := clWhite;
        Im1.Canvas.Brush.Color := clWhite;
        Im1.Width := Rect.Right - Rect.Left;
        Im1.Height := Rect.Bottom - Rect.Top;
        Im1.Canvas.FillRect(Classes.Rect(0, 0, Im1.Width, Im1.Height));
        Im1.Canvas.TextOut(0, 0, Column.Field.Text);

//        Draw(Rect.Left+Im1.Width,rect.Top+2, Im1); //справа от картинки
        Draw(rect.Left+2,rect.Top+2, Im1); //поверх картинки
     end else
       TextOut(rect.Left+2,rect.Top+2,Column.Field.Text)
   end;
  finally
    Im1.Free;
  end;
end;

Последний раз редактировалось Скандербег; 15.02.2010 в 11:18.
Скандербег вне форума Ответить с цитированием
Старый 16.02.2010, 02:40   #3
Spot
Пользователь
 
Аватар для Spot
 
Регистрация: 04.06.2008
Сообщений: 32
По умолчанию

Текст поверх картинки не лучший вариант.
Прозрачное изображение нужно потому, что у меня цвета ячеек разные
Например, когда цвет фона желтый, видно что bmp не прозрачный (белый фон)
Spot вне форума Ответить с цитированием
Старый 16.02.2010, 05:51   #4
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

При вставке картинки в ImageList надо указать в Transparent Color цвет фона (для этого еще и пипетка есть, если не известен цвет). При этом нужно добиться чтобы на примере изображения слева фон картинки был белым. Это не означает, что прозрачный цвет белый. Например, если вставить картинку из Борландовского набора картинок, где цвет фона в основном clOlive или clPurple, то в качестве прозрачного цвета должен быть один из них.
В последнем параметре BrushCopy нужно передать тот же цвет.

Последний раз редактировалось Скандербег; 16.02.2010 в 06:43.
Скандербег вне форума Ответить с цитированием
Старый 19.02.2010, 05:05   #5
Spot
Пользователь
 
Аватар для Spot
 
Регистрация: 04.06.2008
Сообщений: 32
По умолчанию

Imagelist у меня формируется программно. Картинки вставляю так:
Код:
procedure addnewfile(f:tSearchRec);
var tempbmp:tbitmap;
begin
  if ((f.Attr and faDirectory)<>faDirectory) and
  (f.Name<>'.')and(f.Name<>'..') then
   begin
     tempbmp:=TBitmap.Create;
     try
       tempbmp.LoadFromFile(Apppath+'\icons\'+f.Name);
       DM.Qinsimagelist.Close;
       Fmain.ILicons.AddMasked(tempbmp,clWhite);
     finally
       tempbmp.Free;
     end;
   end;
end;
Как видно, цвет маски clWhite, тот же цвет указываю в Brushcopy
Spot вне форума Ответить с цитированием
Старый 19.02.2010, 05:21   #6
Spot
Пользователь
 
Аватар для Spot
 
Регистрация: 04.06.2008
Сообщений: 32
По умолчанию

Получилось!
Как ни странно, при указании Mskcolor clred картинка стало прозрачным
Код:
Fmain.ILicons.AddMasked(tempbmp,clRed);
Помог это:
http://www.cyberguru.ru/delphi-sourc...ratchnymi.html

Спасибо Скандербегу за указание правильного пути решения вопроса
Spot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прозрачный ImageBox TaTT DoGG Общие вопросы .NET 0 12.08.2009 17:21
RxDBGrid Alex_09 БД в Delphi 0 23.04.2009 20:45
Прозрачный фон xakkkkker Мультимедиа в Delphi 10 24.12.2008 09:44
Прозрачный PageControl Nemez Компоненты Delphi 7 23.07.2008 06:58
прозрачный Image Roof Помощь студентам 8 27.07.2007 12:15