PDA

Ver la Versión Completa : Tengo dudas con el libro delphi2006


kratos1981
24-10-2017, 03:16:29
Hola buen dia, hace una semana comencé a leer DELPHI2006, ya que quiero aprender a programar aplicaciones para puntos de venta y rockolas, todo iba bien con los ejemplos a pesar de que uso el delphiXE2, hasta que no pude entender donde se coloca este procedimiento

procedure TMainForm.ShowButtons(Sender: TObject);
begin
Button1.Visible := CheckBox1.Checked;
Button2.Visible := CheckBox1.Checked;
Button3.Visible := CheckBox1.Checked;
Button4.Visible := CheckBox1.Checked;
end;

En los demàs ejemplos al colocar cualquier objeto al formulario, en propiedades en la pestaña evento se crea un procedimiento, bueno pues al día de hoy no he podido encontrar donde se crea ese procedimiento y al intentar escribirlo tal cual, el programa me muestra un error a la hora de correrlo, para evitar ese problema usè el evento onClick del CheckBox.

quedando de esta manera.

procedure TForm.CheckBox1.Click(Sender: TObject);
begin
Button1.Visible := CheckBox1.Checked;
Button2.Visible := CheckBox1.Checked;
Button3.Visible := CheckBox1.Checked;
Button4.Visible := CheckBox1.Checked;
end;

El cual me ha servido, todo estaba bien, hasta que al avanzar con otros ejemplos me muestra un error, cada vez que activo y desactivo la el checkbox.

El codigo del nuevo ejemplo es este

procedure TForm1.CheckBox1Click(Sender: TObject);
var
Cnt: Integer;
Comp: TComponent;
begin
for Cnt := 1 to 7 do
begin
Comp := FindComponent('Button' + IntToStr(Cnt));
TButton(Comp).Visible := CheckBox1.Checked;
end;
end;

y el error que me aparece dice ACCESS VIOLATION AT ADDRESS 0483FBB IN MODULE 'CHECKBOX1.EXE'. READ OF ADDRESS 00000061

echenme una explicaciòn, no quiero desanimarme mas del delphi

oscarac
24-10-2017, 06:19:54
porque le pones

for Cnt := 1 to 7 do

tienes 7 checkbox?

Neftali [Germán.Estévez]
24-10-2017, 09:23:15
...
procedure TMainForm.ShowButtons(Sender: TObject);
...
procedure TForm.CheckBox1.Click(Sender: TObject);


Si creas un nuevo formulario verás que la estructura que se crea en el .PAS asociado es la siguiente:


type
TForm2 = class(TForm)
procedure FormClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
procedure ShowButtons();
public
{ Public declarations }
procedure Publica(Sender: TObject);
end;


Los dos primeros procedimientos son eventos y su implementación es similar a la siguiente; Fíjate que están en la zona antes de la definicción private.


procedure TForm2.FormClick(Sender: TObject);
begin
...
end;

procedure TForm2.FormShow(Sender: TObject);
begin
...
end;


Los 2 segundos definidos en la parte private y public son procedimientos definidos (no eventos) cuya implementación es la siguiente:



procedure TForm2.Publica(Sender: TObject);
begin
...
end;

procedure TForm2.ShowButtons;
begin
...
end;


Los eventos se diferencias en que están "ligados" a algún componente visual.

En el código que has puesto, y los elementos marcados en rojo veo como cosas raras:
(1) Que unos hacen referencia a TMainForm y otros aTForm (seguramente por copiar y pegar)
(2) Que el procedimiento que te falla, deberá estar definido en la parte privada/public del formulario o en la zona anterior si es un evento.