Ver Mensaje Individual
  #5  
Antiguo 11-12-2014
osmeg osmeg is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 18
Reputación: 0
osmeg Va por buen camino
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;     
{ Private declarations }   
public     
{ Public declarations }   
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; //Linea nueva: Oculta el componente seccionBotones

categoria:=seccionBotones.Categories.Add; 
categoria.Caption:= 'Categoria 1';  

boton:= categoria.Items.Add; 
boton.Caption:='Boton';
 
seccionBotones.Show; //Línea nueva: Muestra el componente seccionBotones

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.
Responder Con Cita