Мда, интересное поведение у этой прозрачности... Похоже, действительно что-то где-то глючит...
Заимствовал PNG-файл Ивана Кашперука из этого сообщения
Поздравления (Репутация и Количество сообщений):
Положил его в корень диска C. Как видно, цвет фона у него голубой (Excel во время записи макроса показал RGB 226, 240, 255 ). Однако, наш код, использующий белый цвет (RGB 255, 255, 255), правильно (почему??) установил прозрачность (у меня, во всяком случае, это так).
X++:
static void Job198_2(Args _args)
{
ComExcelDocument_RU doc = new ComExcelDocument_RU();
Image image = new Image();
COM xlApp;
COM wbook;
COM activeSheet;
COM range;
COM shape;
COM pf;
;
doc.NewFile('',false);
wbook = doc.getComDocument();
xlApp = wbook.Parent();
activeSheet = xlApp.ActiveSheet();
range = activeSheet.Range('B10');
//image.captureScreen(0+(i-1)*2, 0+(i-1)*2, 300+(i-1)*2, 100+(i-1)*2);
image.loadFile(@'C:\Andre_2000.PNG'); //
image.clipboardCopy();
range.pasteSpecial(0);
// 18.05.2009 ПРОЗРАЧНОСТЬ -->
shape = xlApp.Selection();
shape = shape.ShapeRange();
pf = shape.PictureFormat();
pf.TransparentBackground(-1);
pf.TransparencyColor(WinAPI::RGB2int(255,255,255)); // белый
//pf.TransparencyColor(WinAPI::RGB2int(226,240,255)); // голубой
// 18.05.2009 <--
doc.visible(true);
}
А вот использование вышеупомянутого (законного!) голубого окончилось неудачей - фон не стал прозрачным. В то же время, как я уже говорил, можно всё переложить на плечи Excel и при чтении из файла:
X++:
static void Job198_2(Args _args)
{
ComExcelDocument_RU doc = new ComExcelDocument_RU();
Image image = new Image();
COM xlApp;
COM wbook;
COM activeSheet;
COM range;
COM shape;
COM pf;
;
doc.NewFile('',false);
wbook = doc.getComDocument();
xlApp = wbook.Parent();
activeSheet = xlApp.ActiveSheet();
shape = activeSheet.Pictures();
shape = shape.Insert(@'C:\Andre_2000.PNG'); //
shape = shape.ShapeRange();
range = activeSheet.Range('B10');
shape.Top(range.Top());
shape.Left(range.Left());
pf = shape.PictureFormat();
pf.TransparentBackground(-1);
pf.TransparencyColor(WinAPI::RGB2int(226,240,255)); // голубой
shape.Select();
doc.visible(true);
}