Ver Mensaje Individual
  #9  
Antiguo 08-09-2010
ElielEgo ElielEgo is offline
Registrado
 
Registrado: sep 2010
Posts: 1
Reputación: 0
ElielEgo Va por buen camino
Hola mmmm se que quizá estan dando respuesta a la pregunta de alguien más, pero yo tengo el mismo problema y según yo no lo estoy haciendo de una forma erronea.

Les comento, Tengo una forma donde lo único que tengo es un TXMLDocument (name: xml_doc) con el que leo un cuestionario en xml. Este cuestionario por necesidades del mismo varía el número de respuestas que a efectos del sistema se convertirán en radiobuttons. Por tal motivo debo generarlos de manera dinámica cada vez que se cargue una pregunta. Sin embargo en ocasiones y no siempre en el mismo momento me marca este tipo de errores cuando genero los nuevos elementos.

este es mi código

Código Delphi [-]
procedure Tfrm_quiz.cargaPregunta(index:integer);
var
  pregunta:  IXMLNode ;
  arriba, i, max_node_child:integer;
  boton : TbitBtn;
  radio: TRadioButton;
  control : TControl;
  _label : Tlabel;
begin

  boton := nil;
  radio := nil;
  _label := nil;
  control := nil;
  //Index se refiere al número de nodo que leo del xml es decir el reactivo
  if (index <> 0) then
  begin    
    for i:= 0 to (self.ControlCount -1) do
    begin       
        control := self.Controls[0];//Siempre uso el 0 porque es como ir eliminando el primero que encuentra
        freeandnil(control);
    end;
  end;

  pregunta:= self.xml_doc.DocumentElement.ChildNodes[index];
  _label := TLabel.Create(nil);

  with _label do
    begin
      left := 16;
      top:= 16;
      caption := pregunta.ChildNodes['reactivo'].Text;
      parent:=self;
    end;


  max_node_child := pregunta.ChildNodes.Count - 1;
  arriba := 64;
  for i:= 1 to max_node_child do
  begin
    radio := TRadioButton.Create(nil);
    with radio do
    begin
      left := 16;
      top:= arriba;
      arriba := arriba +30;
      width := 560;
      name := 'rdb_'+inttostr(i);
      helpKeyword := pregunta.ChildNodes[i].Attributes['etiqueta'];
      caption := pregunta.ChildNodes[i].Text;
      onClick := evaluaClick;
      parent:=self;
    end;
  end;

  if (index < self.max_node -1) then
  begin
    boton := TbitBtn.Create (nil);
    with boton do
    begin
      caption := 'Siguiente';
      left := 506;
      top := 640;
      name := 'btn_siguiente';
      OnClick := BitBtn1Click;
      parent:=self;
    end;
  end
  else
  begin    
    boton := TbitBtn.Create (nil);
    with boton do
    begin
      caption := 'Finalizar';
      left := 506;
      top := 640;
      name := 'btn_finalizar';
      OnClick := finaliza;
      parent:=self;
    end;
  end;
end;

Muchas gracias a quien me pueda ayudar y seguimos en contacto por aca...
Responder Con Cita