osmeg,
Cita:
Empezado por osmeg
...Realicé lo que me indicaste (quitar sentencia redundante) pero ahora no aparece el componente en el Panel y sigue apareciendo el mismo error...
|
Cita:
Empezado por osmeg
...encontré una solución al problema del error Access violation...con la siguiente secuencia de pasos...Se oculta el componente...Se agregan los elementos necesarios...se muestra el componente...
|
Te comento:
1- El código del
Msg #1 crea dos instancias del componente TCategoryButtons,
una en la clase de TForm1 y otra dentro de un método de TForm1.
2- La idea de eliminar la sentencia redundante,
era para ejemplificar que el problema se originaba por las dos instancias del componente, no como una solución definitiva.
3- Una forma de eliminar el error de
Access Violation y
evitar la redundancia del componente TCategoryButtons es la siguiente:
Código Delphi
[-]
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons,
Vcl.CategoryButtons, Vcl.ExtCtrls, Vcl.ImgList;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure Panel1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Panel1Click(Sender: TObject);
var
seccionBotones : TCategoryButtons;
categoria : TButtonCategory;
boton : TButtonItem;
begin
seccionBotones := TCategoryButtons.Create(Panel1);
seccionBotones.Parent := Panel1;
categoria := seccionBotones.Categories.Add;
categoria.Caption := 'Categoria 1';
boton := categoria.Items.Add;
boton.Caption := 'Boton';
end;
end.
El código anterior en Delphi XE6 sobre Windows 7 Professional x32,
crea en Runtime un componente TCategoryButtons asociado a un TPanel y adiciona un botón al mismo.
Otro ejemplo
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons,
Vcl.CategoryButtons, Vcl.ExtCtrls, Vcl.ImgList, PNGImage;
type
TForm1 = class(TForm)
CategoryButtons1: TCategoryButtons;
ImageList1: TImageList;
Image1: TImage;
procedure CategoryButtons1CategoriesItemsClick(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CategoryButtons1CategoriesItemsClick(Sender: TObject);
var
Image : String;
Index : Integer;
begin
Index := TCategoryButtons(Sender).CurrentCategory.CategoryButtons.SelectedItem.Index;
Image := 'D:\Developers Delphi\Delphi Test (DXE6)\Test-17 (TCategoryButtons-1)\Images\'
+ 'Emoticons-'
+ IntToStr(TCategoryButtons(Sender).CurrentCategory.Items[Index].ImageIndex + 1)
+ '.png';
Image1.Picture.LoadFromFile(Image);
end;
end.
El código anterior en Delphi XE6 sobre Windows 7 Professional x32,
muestra un ejemplo de uso del componente TCategoryButtons configurado en Tiempo de Diseño, como se muestra en la siguiente imagen:
El código del ejemplo
funciona correctamente sin la necesidad de crear una nueva instancia del componente TCategoryButtons, dado que este es creado en la definición de la clase TForm1.
El código esta disponible en :
TCategoryButtons.rar
Espero sea útil
Nelson.