fpspreadsheet: Reduce flicker of TsTabControl; still not perfect.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3754 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2014-11-20 16:48:31 +00:00
parent a7af4fa1b9
commit 824d6adb92
2 changed files with 12 additions and 20 deletions

View File

@ -6714,9 +6714,8 @@ begin
Result := TsWorksheet.Create; Result := TsWorksheet.Create;
Result.FWorkbook := Self; // Must be before "SetName" needing the workbook Result.FWorkbook := Self; // Must be before "SetName" needing the workbook
Result.Name := AName;
FWorksheets.Add(Pointer(Result)); FWorksheets.Add(Pointer(Result));
Result.Name := AName;
if Assigned(FOnAddWorksheet) then FOnAddWorksheet(self, Result); if Assigned(FOnAddWorksheet) then FOnAddWorksheet(self, Result);
end; end;

View File

@ -150,6 +150,7 @@ type
TsWorkbookTabControl = class(TTabControl) TsWorkbookTabControl = class(TTabControl)
private private
FWorkbookSource: TsWorkbookSource; FWorkbookSource: TsWorkbookSource;
FLockCount: Integer;
procedure SetWorkbookSource(AValue: TsWorkbookSource); procedure SetWorkbookSource(AValue: TsWorkbookSource);
protected protected
procedure Change; override; procedure Change; override;
@ -983,7 +984,7 @@ end;
-------------------------------------------------------------------------------} -------------------------------------------------------------------------------}
procedure TsWorkbookTabControl.Change; procedure TsWorkbookTabControl.Change;
begin begin
if FWorkbookSource <> nil then if (FWorkbookSource <> nil) and (FLockCount = 0) then
FWorkbookSource.SelectWorksheet(Workbook.GetWorksheetByIndex(TabIndex)); FWorkbookSource.SelectWorksheet(Workbook.GetWorksheetByIndex(TabIndex));
inherited; inherited;
end; end;
@ -1039,29 +1040,19 @@ procedure TsWorkbookTabControl.ListenerNotification(
AChangedItems: TsNotificationItems; AData: Pointer = nil); AChangedItems: TsNotificationItems; AData: Pointer = nil);
var var
i: Integer; i: Integer;
oldTabIndex: Integer; t: Integer;
list: TStringList;
begin begin
Unused(AData); Unused(AData);
// Workbook changed // Workbook changed
if (lniWorkbook in AChangedItems) then if (lniWorkbook in AChangedItems) then
begin begin
oldTabIndex := TabIndex; inc(FLockCount); // avoid WorkbookSelect message when adding each tab
list := TStringList.Create; GetSheetList(Tabs);
Tabs.BeginUpdate; t := TabIndex;
try TabIndex := Tabs.Count-1;
GetSheetList(list); t := TabIndex;
Tabs.Assign(list); dec(FLockCount);
if (oldTabIndex = -1) and (Tabs.Count > 0) then
TabIndex := 0
else
if oldTabIndex < Tabs.Count then
TabIndex := oldTabIndex;
finally
list.Free;
Tabs.EndUpdate;
end;
end; end;
// Worksheet changed // Worksheet changed
@ -1071,6 +1062,8 @@ begin
if i <> TabIndex then if i <> TabIndex then
TabIndex := i; TabIndex := i;
end; end;
t := TabIndex;
end; end;
{@@ ---------------------------------------------------------------------------- {@@ ----------------------------------------------------------------------------