You've already forked lazarus-ccr
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:
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
{@@ ----------------------------------------------------------------------------
|
{@@ ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user