Gracias por responder
ecfisa,
Estuve comparando el uso del componente TCategoryButtons (y todos sus derivados: TButtonCategory y TButtonItem) cuando se crea tanto en tiempo de diseño como en tiempo de ejecución. Tras revisar durante algún tiempo, encontré una solución al problema del error Access violation at address..., con la siguiente secuencia de pasos:
1. Se oculta el componente principal (TCategoryButtons)
2. Se agregan los elementos necesarios al componente principal
3. Una vez agregados todos los elementos, se muestra el componente principal.
Creo que queda mas clara la idea expresandola en código:
Código Delphi
[-]
type TForm1 = class(TForm)
Panel: TPanel;
procedure PanelClick(Sender: TObject);
private
seccionBotones: TCategoryButtons;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.PanelClick(Sender: TObject);
var
categoria:TButtonCategory;
boton: TButtonItem;
begin
seccionBotones:= TCategoryButtons.Create(Panel);
seccionBotones.Parent:= Panel;
seccionBotones.Hide;
categoria:=seccionBotones.Categories.Add;
categoria.Caption:= 'Categoria 1';
boton:= categoria.Items.Add;
boton.Caption:='Boton';
seccionBotones.Show;
end;
La verdad desconozco porqué de esta forma se soluciona el problema del error. Depronto alguno de ustedes quiera complementar esa solución justificandola.
Saludos y gracias por su colaboración.