diff --git a/components/fpspreadsheet/fpspreadsheet.pas b/components/fpspreadsheet/fpspreadsheet.pas index 2aee3948b..ac5d526aa 100755 --- a/components/fpspreadsheet/fpspreadsheet.pas +++ b/components/fpspreadsheet/fpspreadsheet.pas @@ -951,6 +951,7 @@ type FOnAddWorksheet: TsWorksheetEvent; FOnRemoveWorksheet: TsRemoveWorksheetEvent; FOnSelectWorksheet: TsWorksheetEvent; + FOnChangePalette: TNotifyEvent; FFileName: String; FLockCount: Integer; FLog: TStringList; @@ -1065,6 +1066,8 @@ type property Options: TsWorkbookOptions read FOptions write FOptions; {@@ This event fires whenever a new worksheet is added } property OnAddWorksheet: TsWorksheetEvent read FOnAddWorksheet write FOnAddWorksheet; + {@@ This event fires whenever the workbook palette changes. } + property OnChangePalette: TNotifyEvent read FOnChangePalette write FOnChangePalette; {@@ This event fires whenever a worksheet is changed } property OnChangeWorksheet: TsWorksheetEvent read FOnChangeWorksheet write FOnChangeWorksheet; {@@ This event fires whenever a workbook is loaded } @@ -7323,6 +7326,8 @@ begin end; end; Result := Length(FPalette) - 1; + + if Assigned(FOnChangePalette) then FOnChangePalette(self); end; {@@ ---------------------------------------------------------------------------- @@ -7589,6 +7594,8 @@ begin {$IFDEF RNGCHECK} {$R+} {$ENDIF} + + if Assigned(FOnChangePalette) then FOnChangePalette(self); end; {@@ ---------------------------------------------------------------------------- diff --git a/components/fpspreadsheet/fpspreadsheetctrls.pas b/components/fpspreadsheet/fpspreadsheetctrls.pas index 75b5e4625..17cf30cf4 100644 --- a/components/fpspreadsheet/fpspreadsheetctrls.pas +++ b/components/fpspreadsheet/fpspreadsheetctrls.pas @@ -40,7 +40,7 @@ type which kind of item has changed: the workbook, the worksheet, a cell value, or a cell formatting, etc. } TsNotificationItem = (lniWorkbook, lniWorksheet, lniCell, lniSelection, - lniAbortSelection, lniRow); + lniAbortSelection, lniRow, lniPalette); {@@ This set accompanies the notification between WorkbookSource and visual controls and describes which items have changed in the spreadsheet. } TsNotificationItems = set of TsNotificationItem; @@ -75,6 +75,7 @@ type AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = 0); procedure SetFileName(const AFileName: TFileName); procedure SetOptions(AValue: TsWorkbookOptions); + procedure WorkbookChangedPaletteHandler(Sender: TObject); procedure WorkbookOpenedHandler(Sender: TObject); procedure WorksheetAddedHandler(Sender: TObject; ASheet: TsWorksheet); procedure WorksheetChangedHandler(Sender: TObject; ASheet: TsWorksheet); @@ -761,6 +762,7 @@ begin FWorkbook.OnChangeWorksheet := @WorksheetChangedHandler; FWorkbook.OnRemoveWorksheet := @WorksheetRemovedHandler; FWorkbook.OnSelectWorksheet := @WorksheetSelectedHandler; + FWorkbook.OnChangePalette := @WorkbookChangedPaletteHandler; // Pass options to workbook SetOptions(FOptions); end; @@ -867,9 +869,6 @@ procedure TsWorkbookSource.NotifyListeners(AChangedItems: TsNotificationItems; var i: Integer; begin - //if FControlLockCount > 0 then - // exit; - for i:=0 to FListeners.Count-1 do if TObject(FListeners[i]) is TsCellCombobox then TsCellCombobox(FListeners[i]).ListenerNotification(AChangedItems, AData) @@ -1069,6 +1068,15 @@ begin FPendingOperation := AOperation; end; +{@@ ---------------------------------------------------------------------------- + Event handler called whenever the palette of the workbook is changed. +-------------------------------------------------------------------------------} +procedure TsWorkbookSource.WorkbookChangedPaletteHandler(Sender: TObject); +begin + Unused(Sender); + NotifyListeners([lniPalette]); +end; + {@@ ---------------------------------------------------------------------------- Event handler called whenever a new workbook is opened. -------------------------------------------------------------------------------} @@ -1825,14 +1833,21 @@ var activeCell: PCell; begin Unused(AData); - if (Worksheet = nil) or ([lniCell, lniSelection]*AChangedItems = []) then + if (Worksheet = nil) or + ([lniCell, lniSelection, lniPalette]*AChangedItems = []) + then exit; activeCell := GetActiveCell; - if (([lniCell]*AChangedItems <>[]) and (PCell(AData) = activeCell)) or + if (([lniCell]*AChangedItems <> []) and (PCell(AData) = activeCell)) or (lniSelection in AChangedItems) then ExtractFromCell(activeCell); + + if (FFormatItem in [cfiFontColor, cfiBorderColor, cfiBackgroundColor]) and + (lniPalette in AChangedItems) + then + Populate; end; {@@ ----------------------------------------------------------------------------