OberonPlace.com Forums

OberonPlace.com Forums (http://forum.oberonplace.com/index.php)
-   Macros/Add-ons (http://forum.oberonplace.com/forumdisplay.php?f=21)
-   -   Document Colors (http://forum.oberonplace.com/showthread.php?t=24810)

mtracy 10-05-2018 18:07

Document Colors
How can I reset the document colors with a macro?

I can cycle it on/off but can't figure out how to "reset" it. Once a color shape is deleted the doc palette still shows the color until you click thru and hit reset.

Sub RefreshDocPalette()


End Sub

P.s. why after hitting "reset palette" does it add a black swatch even though there's no black used in the doc.

mtracy 10-05-2018 18:11

One suggestion is close but it deletes all the colors. As one is "doodling" lots of colors get added to the document coors palette. Even after you delete a bunch of different colored shapes. Manually hit reset and only the colors that exist in the document are displayed.

mtracy 10-05-2018 18:11

Oops, forgot to add the suggestion

For i = ActiveDocument.Palette.Colors.Count To 1 Step -1
ActiveDocument.Palette.RemoveColor (i)
Next i

shark 18-05-2018 06:31

If you programmatically delete shape then you can check if there are any other objects of the same color left. And then delete this color from palette

mtracy 23-05-2018 15:13

I've experimented with several scripts but can't seem to get it?

shark 24-05-2018 05:05

delete color from palette

Sub DeleteColors()
Dim s As Shape, c As Color
    Set s = ActiveShape: If s Is Nothing Then Exit Sub
    If s.Fill.Type <> cdrUniformFill Then Exit Sub
    Set c = s.Fill.UniformColor
    s.Delete 'delete selected shape
    'looking for the same color
    For Each s In ActivePage.Shapes.All
        If s.Fill.Type = cdrUniformFill Then
            If c.IsSame(s.Fill.UniformColor) Then Exit Sub
        End If
    With ActiveDocument.Palette
        .RemoveColor .GetIndexOfColor(c)
    End With
End Sub

mtracy 24-05-2018 09:12

That actually requires you to select all the shapes and then just deletes 1 shape.

shark 28-05-2018 03:16

there is no need to select all the shapes. Macro deletes one selected shape and removes its color from the palette, if there are no more objects with the same color in current document.

if you want to delete several objects of different colors and remove their colors from the palette, then the macro needs to be slightly modified

mtracy 29-05-2018 14:34

I don't want to delete any shapes at all. I merely want the Document Colors to reflect only the colors currently used in the document. The Doc Color palette will show all colors ever used even after all shapes using that color are gone or changed.
The macro should "get color" of each shape and delete the colors from the Doc Palette that aren't currently in the doc.

shark 01-06-2018 05:03

try this:


Sub RemoveWasteColors()
Dim c As Color, sr As New ShapeRange, srAllShapes As ShapeRange, s As Shape
    Set srAllShapes = ActivePage.Shapes.All
    For Each c In ActiveDocument.Palette.Colors
        For Each s In srAllShapes
            If s.Fill.Type = cdrUniformFill Then
                If c.IsSame(s.Fill.UniformColor) Then sr.Add s
            End If
        Next s
        If sr.Count > 0 Then
            srAllShapes.RemoveRange sr: sr.RemoveAll
            With ActiveDocument.Palette
                .RemoveColor .GetIndexOfColor(c)
            End With
        End If
    Next c
End Sub

All times are GMT -5. The time now is 06:40.

Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Copyright © 2011, Oberonplace.com