From a641e34bff84f90f33c78e58a85bf3133959dcb5 Mon Sep 17 00:00:00 2001 From: Juha Date: Fri, 7 Mar 2025 18:11:12 +0200 Subject: [PATCH] LCL: Improve getting an unused name for a new Notebook page. Issue #36957. --- lcl/include/notebook.inc | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/lcl/include/notebook.inc b/lcl/include/notebook.inc index cb4d6b9dcd..281f98dde7 100644 --- a/lcl/include/notebook.inc +++ b/lcl/include/notebook.inc @@ -11,6 +11,26 @@ ***************************************************************************** } + +function CreateUniquePageName(BaseName: string; OwnerComp: TComponent): string; +// Inspired by TCustomFormEditor.CreateUniqueComponentName +var + i, j: integer; +begin + i:=0; + Result:=BaseName; + while true do begin + j:=OwnerComp.ComponentCount-1; + while (j>=0) and (CompareText(Result,OwnerComp.Components[j].Name)<>0) do + dec(j); + if j<0 then exit; + inc(i); + if BaseName[length(BaseName)] in ['0'..'9'] then + BaseName:=BaseName+'_'; + Result:=BaseName+IntToStr(i); + end; +end; + {****************************************************************************** TUNBPages ******************************************************************************} @@ -69,29 +89,11 @@ end; function TUNBPages.AddObject(const S: string; AObject: TObject): Integer; var NewPage: TPage; - NewName: string; - OK: Boolean; - i: integer; begin Result := FPageList.Add(AObject); NewPage := TPage(AObject); if IsValidIdent(S) then - begin - NewName := S; - i := 1; - repeat - OK := True; - try - NewPage.Name := NewName; - except // Name was reserved, try adding numbers to it. - on E: EComponentError do begin - OK := False; - NewName := S + IntToStr(i); - Inc(i); - end; - end; - until OK; - end; + NewPage.Name := CreateUniquePageName(S, FNotebook.Owner); NewPage.Caption := S; NewPage.Parent := FNotebook; NewPage.Align := alClient;