Ver Mensaje Individual
  #2  
Antiguo 26-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Jere_84.

No sé en que parte estas utilizando Generics, pero en la parte de código que puedo alcanzar a ver estas utilizando TList (aunque me parece mas simple usar TObjectList).

De acuerdo a lo que entendí, con TList creo que podrías hacer similar a esto:
Código Delphi [-]
...
var
  List: TList;

function CompareTags(Item1,Item2: Pointer): Integer;
begin
  if TEdit(Item1).Tag > TEdit(Item2).Tag then
    Result := 1
  else if TEdit(Item1).Tag = TEdit(Item2).Tag then
    Result := 0
  else
    Result := -1;
end;

{ Crear instancia List, buscar Edits visibles en PageControl,
  agregarlos a la lista y ordenarla por sus propiedades Tag }
procedure TForm1.FormCreate(Sender: TObject);
var
  i,j: Integer;
begin
  List := TList.Create;
  with PageControl1 do
    for i:= 0 to PageCount-1 do
      for j:= 0 to Pages[i].ControlCount-1 do
        if (Pages[i].Controls[j] is TEdit) and Pages[i].Controls[j].Visible then
          List.Add(TEdit(Pages[i].Controls[j]));
  List.Sort(CompareTags);
end;

{ Agregar Tags a los TField, 
  pasar contenido de los campos a Edits }
procedure TForm1.btnAddFieldsClick(Sender: TObject);
var
  i,j: Integer;
begin
  with DataModule2 do
  begin
    i:= 0;
    // Por si no existen la misma cantidad de campos que Edits
    while (i < CDS1.FieldCount)and(i < List.Count) do
    begin
      CDS1.Fields[i].Tag := TEdit(List[i]).Tag;
      Inc(i);
    end;
    // Pasar contenidos de campos a Edits
    for i:= 0 to List.Count-1 do
      for j:= 0 to CDS1.FieldCount-1 do
        if TEdit(List[i]).Tag = CDS1.Fields[j].Tag then
          TEdit(List[i]).Text := CDS1.Fields[j].AsString;
  end;
end;

// Liberar Lista
procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
  for i:= List.Count-1 downto 0 do TEdit(List[i]).Free;
  List.Free;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita