mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-10 18:17:18 +02:00
fix resizing notebook pages when adding all pages, which is, when setting showtabs property to true (fixes bug #1075)
git-svn-id: trunk@8040 -
This commit is contained in:
parent
f4dbf5df7b
commit
f7e93438b5
@ -59,6 +59,8 @@ type
|
||||
public
|
||||
class function CreateHandle(const AWinControl: TWinControl;
|
||||
const AParams: TCreateParams): HWND; override;
|
||||
class procedure AddAllNBPages(const ANotebook: TCustomNotebook);
|
||||
class procedure AdjustSizeNotebookPages(const ANotebook: TCustomNotebook);
|
||||
class procedure AddPage(const ANotebook: TCustomNotebook;
|
||||
const AChild: TCustomPage; const AIndex: integer); override;
|
||||
class procedure MovePage(const ANotebook: TCustomNotebook;
|
||||
@ -220,35 +222,6 @@ implementation
|
||||
uses
|
||||
LMessages;
|
||||
|
||||
{ -----------------------------------------------------------------------------
|
||||
Method: AddAllNBPages
|
||||
Params: Notebook - A notebook control
|
||||
Returns: Nothing
|
||||
|
||||
Adds all pages to notebook (showtabs becomes true)
|
||||
------------------------------------------------------------------------------}
|
||||
procedure AddAllNBPages(Notebook: TCustomNotebook);
|
||||
var
|
||||
TCI: TC_ITEM;
|
||||
I, Res: Integer;
|
||||
lPage: TCustomPage;
|
||||
begin
|
||||
for I := 0 to Notebook.PageCount - 1 do
|
||||
begin
|
||||
lPage := Notebook.Page[I];
|
||||
// check if already shown
|
||||
TCI.Mask := TCIF_PARAM;
|
||||
Res := Windows.SendMessage(Notebook.Handle, TCM_GETITEM, I, LPARAM(@TCI));
|
||||
if (Res = 0) or (dword(TCI.lParam) <> dword(lPage)) then
|
||||
begin
|
||||
TCI.Mask := TCIF_TEXT or TCIF_PARAM;
|
||||
TCI.pszText := PChar(lPage.Caption);
|
||||
TCI.lParam := dword(lPage);
|
||||
Windows.SendMessage(Notebook.Handle, TCM_INSERTITEM, I, LPARAM(@TCI));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ sets focus to a control on the newly focused tab page }
|
||||
procedure NotebookTabChanged(Notebook: TCustomNotebook; NewIndex: integer);
|
||||
var
|
||||
@ -393,6 +366,53 @@ begin
|
||||
Windows.SendMessage(ANotebook.Handle, TCM_DELETEITEM, Windows.WPARAM(AIndex), 0);
|
||||
end;
|
||||
|
||||
{ -----------------------------------------------------------------------------
|
||||
Method: AddAllNBPages
|
||||
Params: Notebook - A notebook control
|
||||
Returns: Nothing
|
||||
|
||||
Adds all pages to notebook (showtabs becomes true)
|
||||
------------------------------------------------------------------------------}
|
||||
procedure TWin32WSCustomNotebook.AddAllNBPages(const ANotebook: TCustomNotebook);
|
||||
var
|
||||
TCI: TC_ITEM;
|
||||
I, Res: Integer;
|
||||
lPage: TCustomPage;
|
||||
WinHandle: HWND;
|
||||
begin
|
||||
WinHandle := ANotebook.Handle;
|
||||
for I := 0 to ANotebook.PageCount - 1 do
|
||||
begin
|
||||
lPage := ANotebook.Page[I];
|
||||
// check if already shown
|
||||
TCI.Mask := TCIF_PARAM;
|
||||
Res := Windows.SendMessage(ANotebook.Handle, TCM_GETITEM, I, LPARAM(@TCI));
|
||||
if (Res = 0) or (dword(TCI.lParam) <> dword(lPage)) then
|
||||
begin
|
||||
TCI.Mask := TCIF_TEXT or TCIF_PARAM;
|
||||
TCI.pszText := PChar(lPage.Caption);
|
||||
TCI.lParam := dword(lPage);
|
||||
Windows.SendMessage(WinHandle, TCM_INSERTITEM, I, LPARAM(@TCI));
|
||||
end;
|
||||
end;
|
||||
AdjustSizeNotebookPages(ANotebook);
|
||||
end;
|
||||
|
||||
procedure TWin32WSCustomNotebook.AdjustSizeNotebookPages(const ANotebook: TCustomNotebook);
|
||||
var
|
||||
I: Integer;
|
||||
R: TRect;
|
||||
WinHandle: HWND;
|
||||
begin
|
||||
WinHandle := ANotebook.Handle;
|
||||
// Adjust page size to fit in tabcontrol, need bounds of notebook in client of parent
|
||||
TWin32WidgetSet(WidgetSet).GetClientRect(WinHandle, R);
|
||||
R.Right := R.Right - R.Left;
|
||||
R.Bottom := R.Bottom - R.Top;
|
||||
for I := 0 to ANotebook.PageCount - 1 do
|
||||
SetBounds(ANotebook.Page[I], R.Left, R.Top, R.Right, R.Bottom);
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Method: RemoveAllNBPages
|
||||
Params: Notebook - The notebook control
|
||||
@ -403,18 +423,12 @@ end;
|
||||
procedure TWin32WSCustomNotebook.RemoveAllNBPages(const ANotebook: TCustomNotebook);
|
||||
var
|
||||
I: Integer;
|
||||
R: TRect;
|
||||
WinHandle: HWND;
|
||||
begin
|
||||
WinHandle := ANotebook.Handle;
|
||||
for I := ANotebook.PageCount - 1 downto 0 do
|
||||
Windows.SendMessage(WinHandle, TCM_DELETEITEM, Windows.WPARAM(I), 0);
|
||||
// Adjust page size to fit in tabcontrol, need bounds of notebook in client of parent
|
||||
TWin32WidgetSet(WidgetSet).GetClientRect(WinHandle, R);
|
||||
R.Right := R.Right - R.Left;
|
||||
R.Bottom := R.Bottom - R.Top;
|
||||
for I := 0 to ANotebook.PageCount - 1 do
|
||||
SetBounds(ANotebook.Page[I], R.Left, R.Top, R.Right, R.Bottom);
|
||||
AdjustSizeNotebookPages(ANotebook);
|
||||
end;
|
||||
|
||||
function TWin32WSCustomNotebook.GetPageRealIndex(const ANotebook: TCustomNotebook; AIndex: Integer): Integer;
|
||||
|
Loading…
Reference in New Issue
Block a user