<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content=text/html;charset=ISO-8859-1>
<META content="MSHTML 6.00.6000.16850" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY text=#000000 bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Gracias, </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>De verdad esto es de gran ayuda.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>FG</FONT></DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=josea@artextrading.com href="mailto:josea@artextrading.com">Jose 
  Antonio Cuello</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A 
  title=lazarus-es@lists.lazarus.freepascal.org 
  href="mailto:lazarus-es@lists.lazarus.freepascal.org">lazarus-es@lists.lazarus.freepascal.org</A> 
  </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Tuesday, June 16, 2009 1:33 
AM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> Re: [Lazarus-es]Resumen de 
  Lazarus-es, Vol 21, Envío 23</DIV>
  <DIV><BR></DIV>Hola, sólo quería comentar unas cosillas que tal vez te puedan 
  ayudar.<BR>Al realizar la sentencia de adición de items al cualquier TStrings, 
  como son los items del combobox devuelve el indice que a añadido por lo que no 
  haría falta el contador y todo su control, es decir que bastaría con<BR><PRE wrap="">  <B>nCont :=</B> cboempresa.Items.Add(DataModule1.lstempresa.FieldByName('emp_razsoc').AsString);

</PRE>Otra idea, si en vez de usar Items.Add existe un Items.AddObject( 
  descripcion, objeto ) que resulta más útil para cuando queremos listas más 
  complejas.<BR>Puede parecer más complejo pero da una mayor flexibilidad, 
  sobretodo de cara a que posteriormente queramos ampliar los datos a guardar. 
  Por ejemplo.<BR>
  <BLOCKQUOTE><SMALL>// Declaración de los datos a guardar<BR>type <BR>  
    TmiObjeto = class<BR>  private<BR>    FCampo1: 
    String;<BR>    FCampo2: String;<BR>  
    public<BR>    property Campo1: String read FCampo1 write 
    FCampo1;<BR>    property Campo2: String read FCampo2 write 
    FCampo2;<BR>  end;<BR><BR>// Declaracion de variables<BR>var opc: 
    TmiObjeto;<BR><BR>// Rutina de carga<BR>while Not DataModule1.lstempresa.EOF 
    Do<BR>begin<BR>  opc := TmiObjeto.Create;<BR>  opc.Campo1 := 
    DataModule1.lstempresa.FieldByName('emp_razsoc').AsString;<BR>  
    opc.Campo2 := 
    DataModule1.lstempresa.FieldByName('emp_id').AsString;<BR>  
    cboempresa.Items.AddObject(DataModule1.lstempresa.FieldByName('emp_razsoc').AsString, 
    opc);<BR>  DataModule1.lstempresa.Next;<BR>end;<BR><BR>// Rutina de 
    recogida de 
    datos<BR>DataModule1.lstcencosto.Params.ParamByName('ID').AsString:= 
    cboempresa.Items.Objects[cboempresa.ItemIndex].Campo2;<BR></SMALL></BLOCKQUOTE>Espero 
  haberme expresado correctamente, se entienda y sobre todo sea de 
  utilidad.<BR><BR>P.S.: Los objetos del combobox son liberados al destruir el 
  combobox, a menos que se cambie una propiedad del mismo a false pero que no me 
  recuerdo ahora cual es.<BR><PRE wrap=""></PRE>
  <BLOCKQUOTE 
  cite=mid:mailman.394.1245105528.54703.lazarus-es@lists.lazarus.freepascal.org 
  type="cite"><PRE wrap="">Amigos,

Estoy trabajando un programa sencillo, pero me he trancado en un problema con el combobox.

Estoy cargando un combobox con data, alli coloco la descripcion y tambien creo un array global al formulario donde guardo el id de la data.

Digamos algo asi

var
  TxtQuery: String;
  nCont: Integer;
begin
  TxtQuery:='Select emp_id,emp_razsoc from empresa';
  DataModule1.lstempresa.SQL.Text:=TxtQuery;
  DataModule1.lstempresa.Open;
  cboempresa.Items.Clear;
  if DataModule1.lstempresa.RecordCount >0 then
     begin
        SetLength(aItems, DataModule1.lstempresa.RecordCount );
        nCont:=1;
        while Not DataModule1.lstempresa.EOF Do
        begin
            cboempresa.Items.Add(DataModule1.lstempresa.FieldByName('emp_razsoc').AsString);
            aItems[nCont]:=DataModule1.lstempresa.FieldByName('emp_id').AsString;  //array creado para guardar el ID de empresa.
            DataModule1.lstempresa.Next;
            nCont:=nCont + 1;
        end;
     end;
  DataModule1.lstempresa.Close;   

Hasta alli todo OK, el punto esta cuando realizo la sinconizacion Combobox + Array desde el evento OnChange del combobox.

if (cboempresa.ItemIndex>0) then
 begin
    DataModule1.lstcencosto.Close;
    DataModule1.lstcencosto.Params.ParamByName('ID').AsString:= aItems[cboempresa.ItemIndex];
    DataModule1.lstcencosto.Open;
    DataModule1.lstcencosto.Refresh;
   // monitor de valores
    stdato.caption:=aItems[cboempresa.ItemIndex] ;
 end;     

Como veran este me refresca otro DataSet con informacion x empresa, pero el combobox no se ubica en la posicion que deberia ser, siempre se salta un registro.Por tanto, el codigo de empresa no siempre es el real.

Es problema de logica o no debi usa el evento OnChange si no otro ?.

No uso el DBCombobox ni el DBLookupCombox  porque no despliegan la lista, asi que estoy usando algo que siempre usaba en VB6.

Saludos.

FG
  </PRE></BLOCKQUOTE>
  <P>
  <HR>

  <P></P>_______________________________________________<BR>Lazarus-es mailing 
  list<BR>Lazarus-es@lists.lazarus.freepascal.org<BR>http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es<BR></BLOCKQUOTE></BODY></HTML>