Ver Mensaje Individual
  #1  
Antiguo 26-04-2013
Avatar de Jere_84
Jere_84 Jere_84 is offline
Miembro
NULL
 
Registrado: sep 2011
Ubicación: Córdoba, Argentina
Posts: 214
Reputación: 0
Jere_84 cantidad desconocida en este momento
Exclamation Utilización de Generics.Collections

Hola hoy modifique una rutina que tiene como objetivo tomar el Nº de Tag de los edit visibles que tengo puestos dentro de un pagecontrol los guarda en un Array de enteros, luego se ordenan (Sort).... después se asigna estos valores a la propiedad Tag de los campos persistentes de Clientdataset que están en un datamodule y por ultimo se asigna los valores de los campos persistentes a los edit visibles de los page control de la ventana que tienen el asignado el mismo Nº de tag que los campos persistentes... Para el array utilice la la unit Generics.Collections que por los ejemplos que eh visto en internet solo se usa para aplicaciones de consola... el tema es que esto andada de maravilla, a no ser por un Access Violation que me esta dando al cerrar la aplicación.. creo que el motivo de esta violación debe ser la implementacion de esta Unit ya que antes de la modificación no salia este error y sale el este error solo cuando abro esta ventana, en las otras no utilizo esta rutina.

Cita:
---------------------------
Application Error
---------------------------
Exception EAccessViolation in module '@#&%'.exe at 00005DBE.

Access violation at address 00405DBE in module '@#&%.exe'. Read of address 8D726142.

---------------------------
Aceptar
---------------------------
Esta es mi rutina:

Código Delphi [-]
procedure TvfInforNoved.AsignaMinMax2(vDataModulo: TDataModule; vTag: integer);
var
  vI, vJ, vK: integer;
  ListaDeTags: TList;
begin
  vK := 0;
  ListaDeTags:= TList.Create;
  try

    for vI := 0 to JfPageControlOrdenRango.Tabs.Count - 1 do
      if JfPageControlOrdenRango.Tabs[vI].Visible then
        for vJ := 0 to JfPageControlOrdenRango.Tabs[vI].Page.ControlCount - 1 do
          if JfPageControlOrdenRango.Tabs[vI].Page.Controls[vJ] is TJfEdit then
            if (JfPageControlOrdenRango.Tabs[vI].Page.Controls[vJ] as TJfEdit).Visible then
              if (JfPageControlOrdenRango.Tabs[vI].Page.Controls[vJ] as TJfEdit).Tag >= vTag then
                ListaDeTags.Add((JfPageControlOrdenRango.Tabs[vI].Page.Controls[vJ] as TJfEdit).Tag);

    ListaDeTags.Sort;

    for vI := 0 to vDataModulo.ComponentCount - 1 do
      if vDataModulo.Components[vI] is TClientDataSet then
        if (vDataModulo.Components[vI] as TClientDataSet).Tag <> 0 then
          for vJ := 0 to (vDataModulo.Components[vI] as TClientDataSet).FieldCount - 1 do
          begin
            (vDataModulo.Components[vI] as TClientDataSet).Open;
            (vDataModulo.Components[vI] as TClientDataSet).Fields.Fields[vJ].Tag := ListaDeTags.Items[vK];
            Inc(vTag);
            Inc(vK);
          end;

    for vI := 0 to JfPageControlOrdenRango.Tabs.Count - 1 do
      if JfPageControlOrdenRango.Tabs[vI].Visible then
        for vJ := 0 to JfPageControlOrdenRango.Tabs[vI].Page.ControlCount - 1 do
          if JfPageControlOrdenRango.Tabs[vI].Page.Controls[vJ] is TJfEdit then
            if (JfPageControlOrdenRango.Tabs[vI].Page.Controls[vJ] as TJfEdit).Visible then
              for vK := 0 to vDataModulo.ComponentCount - 1 do
                if (vDataModulo.Components[vK] is TField) and (vDataModulo.Components[vK].tag = JfPageControlOrdenRango.Tabs[vI].Page.Controls[vJ].Tag) then
                begin
                 (JfPageControlOrdenRango.Tabs[vI].Page.Controls[vJ] as TJfEdit).Value := (vDataModulo.Components[vK] as TField).AsVariant;
                  Break;
                end;
  finally
    ListaDeTags.Free;
  end;
end;


Esta correcto utilizar Generics.Collections en una aplicación digamos de 'win' ya que esto tiene que se lo que me provoca el Acces Violation.
Gracias.
Responder Con Cita