Saludos!
Para lo que quieres, entonces, tendrás que jugar con los eventos "OnChanging" y "OnChange" del TPageControl. Una forma que se me ocurre es guardar el índice de la pestaña actual en el evento "OnChanging" y despues comprobar el índice de la pestaña a la que se cambió en el "OnChange", si el índice es el de la pestaña a la que no quieres acceder, entonces, lo cambiarías al almacenado en el evento "OnChanging".
Por ejemplo, imaginemos un TPageControl con tres pestaña y no dejaremos acceso a la segunda pestaña:
Código Delphi
[-]
var
PagAct: Integer;
procedure TForm1.PageControl1Changing(Sender: TObject;
var AllowChange: Boolean);
begin
PagAct := (Sender as TPageControl).ActivePageIndex;
end;
procedure TForm1.PageControl1Change(Sender: TObject);
begin
if (Sender as TPageControl).ActivePageIndex = 1 then
(Sender as TPageControl).ActivePageIndex := PagAct;
end;
(Si no quieres usar una variable podrías usar, entonces, la propiedad "Tag" del TPageControl para almacenar la pestaña donde se encontraba el usuario)