Hello all,
I have searched for weeks now and can not figure out this problem.
all I want to do is ues a .Fill file to fill a selected object. I have used the record macro feature and came up with this code
Sub TemporaryMacro() ' Recorded 7/13/2019 Dim OrigSelection As ShapeRange Set OrigSelection = ActiveSelectionRange OrigSelection(1).Style.StringAssign "{""fill"":{""type"":""9"",""primaryColor"":""CMYK255,USER,0,0,0,0,100,cccd19cb-4675-4a5e-8bda-d0bbbaab8af0"",""secondaryColor"":""CMYK,USER,0,0,0,0,100,00000000-0000-0000-0000-000000000000"",""overprint"":""0"",""tilingInterTileOffset"":""0"",""tilingHeight"":""1016000"",""tilingFlagsMirrorVertical"":""0"",""fillName"":""cc613529-4bf9-4200-93f9-14cc2b217794.24.colorbitmap"",""tilingXOffset"":""0"",""tilingFlagsNoSeams"":""0"",""tilingFlagsMirrorHorizontal"":""0"",""tilingWidth"":""1016000"",""tilingFlagsColumnOffset"":""0"",""tilingFlagsScale"":""0"",""tilingFlagsScaleToObject"":""0"",""skew"":""0"",""tilingYOffset"":""0"",""angle"":""0""},""outline"":{""color"":""CMYK,USER,0,0,0,100,100,00000000-0000-0000-0000-000000000000"",""width"":""1764""},""transparency"":{}}" OrigSelection(1).Style.StringAssign "{""fill"":{""type"":""9"",""primaryColor"":""CMYK255,USER,0,0,0,0,100,cccd19cb-4675-4a5e-8bda-d0bbbaab8af0"",""secondaryColor"":""CMYK,USER,0,0,0,0,100,00000000-0000-0000-0000-000000000000"",""overprint"":""0"",""tilingInterTileOffset"":""0"",""tilingHeight"":""1016000"",""tilingFlagsMirrorVertical"":""0"",""fillName"":""980ea7ed-30d3-4800-97b9-7c561de7db79.23.colorbitmap"",""tilingXOffset"":""0"",""tilingFlagsNoSeams"":""0"",""tilingFlagsMirrorHorizontal"":""0"",""tilingWidth"":""1016000"",""tilingFlagsColumnOffset"":""0"",""tilingFlagsScale"":""0"",""tilingFlagsScaleToObject"":""0"",""skew"":""0"",""tilingYOffset"":""0"",""angle"":""0""},""outline"":{""color"":""CMYK,USER,0,0,0,100,100,00000000-0000-0000-0000-000000000000"",""width"":""1764""},""transparency"":{}}"End Sub
The file that I am trying to load is "C:\Users\username\Documents\Corel\Corel Content\Fills\ Starter pack\Bitmap Pattern 021.fill"
It will work fine with the recorded code on one computer but will not run on a different computer, both computers have the same file,
I have tried replacing the "fillName"":""980ea7ed-30d3-4800-97b9-7c561de7db79.23.colorbitmap" section with the file path but this dose not work on either computer.
Anyone have any Idea how to make this work. If it makes a difference I can move all 300 colors to a shared network drive so all the computer are reading from the same file. not there own user name folder.
Just to clarify all i want to do is fill the selected object using a .fill file seams like this should be easy but I give up.
Thank you in advance for any help.
I don't know how to use a .fill file through the API. I do know how to apply a bitmap pattern fill by specifying a bitmap to use.
This code will apply a bitmap pattern fill to a single selected object, based on the file "test_tile.png" specified in the code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Sub test_bitmap_pattern_fill() Dim sr As ShapeRange Dim s As Shape Dim pfThis As PatternFill Const dblTileWidth As Double = 1 Const dblTileHeight As Double = 1 If Not ActiveDocument Is Nothing Then Set sr = ActiveSelectionRange If sr.Count = 1 Then Set s = sr(1) If s.CanHaveFill Then Set pfThis = s.Fill.ApplyPatternFill(cdrBitmapPattern, "D:\test_tile.png") pfThis.TileHeight = dblTileWidth pfThis.TileWidth = dblTileHeight End If Else MsgBox "Selection must be a single shape." End If Else MsgBox "No document is active." End If End Sub
The tile width and height are set by constants in the macro; adjust as suits your need.There are other properties that could be set for the fill, e.g., offset, skew, rotation, and whether the fill transforms with the shape.
Here's the file I used for the bitmap. I'm sharing it on Google Drive because the forum software won't allow upload of a file that large. The .fill file is a ZIP file, and that's where I got the bitmap:
test_tile.png
.
Thank you for the code, very Interesting how you have the if statement inside of a if statement, Took a while to wrap my head around that one. this will work for me but I would like to keep the question open because It doesn't truly answer the question and there is like 20 lines of code with this that looks like it could be 1 line if anyone knows how to do it the other way.
Thanks again!
TimH@alegacyinstone.com said:there is like 20 lines of code with this that looks like it could be 1 line if anyone knows how to do it the other way
What I posted could have many fewer lines of code if I took away all of the "safeties" that I included to avoid generating an error if the macro were run with no document open, or with no object selected, or with multiple objects selected, or with a single object selected that cannot have a fill.
If there is a better way to apply a bitmap pattern fill, then I hope that someone posts it here so that I can learn about it.