Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-12-2013
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
referencia de tedit en TComponentList

Buen dia, les platico un poco mi duda si yo creo un tedit y lo agrego a un tcomponentlist de esta manera

Código Delphi [-]
 product: TComponentList;

Código Delphi [-]
      
          edit:= TEdit.Create(nil);
          edit.Name:='Edt'+inttostr(Qry_lineaproductoP.fieldbyname('id').Value);
          //edit.Caption:=Qry_lineaproducto.fieldbyname('nombre').Value;
          edit.Left:= leftEdit;
          edit.Top:=top;
          edit.Width:=57;
          edit.Height:=17;
          edit.Parent:=PageControl1.Pages[tabshhet];
          edit.Tag :=Qry_lineaproductoP.fieldbyname('id').Value;
          //CheckBox.hint:=Qry_unit.fieldbyname('semail').Value;
          edit.OnExit:=DoOnExit;
          edit.text:=Qry_lineaproductoP.fieldbyname('max').Value;
          product.Add(edit);
                                           <--aqui no necesito  destruir a edit?? con edit.free;


si despues modifico alguna propiedad de ese edit en el form por medio de la funcion DoOnExit

Código Delphi [-]
procedure TFrm_POmym1.DoOnExit(Sender: TObject);    
begin
  if Sender is Tedit then
  begin
    with Tedit(Sender) do
    begin
        color:=clSkyBlue;
   .
   .
   .

si recorro el tcomponent list de esta manera, ese cambio a la propiedad text del edit esta ligado en el tcomponentlist??

Código Delphi [-]

   for i := product.Count-1 downto 0 do
    begin
             showmessage((TEdit(product[i]).text);  <--Rsultado debe de ser color clSkyBlue
    end;

gracias por anticipado
Responder Con Cita
  #2  
Antiguo 05-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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 richy08.
Cita:
si recorro el tcomponent list de esta manera, ese cambio a la propiedad text del edit esta ligado en el tcomponentlist??
Si. En este otro ejemplo, se ponen todos los edits agregados al TComponentList en color rojo:
Código Delphi [-]
...
var
  i: Integer;
begin
  for i := 0 to product.Count-1 do
    TEdit(product.Items[i]).Color := clRed;
end;

Cita:
<--aqui no necesito destruir a edit?? con edit.free;
Si no pones la propiedad OwnsObjects en False, TComponentList liberará los componentes agregados cuando se destruya la instancia del mismo.

Ejemplo:
Código Delphi [-]
procedure TForm.FormDestroy(Sender: TObject);
begin
  product.Free;
end;

Cita:
Código Delphi [-]
showmessage((TEdit(product[i]).text);  <--Rsultado debe de ser color clSkyBlue
Eso no va a suceder... El procedimiento ShowMessage recibe como parámetro el texto y no las propiedades del TEdit, por lo tanto no lo mostrará en color clSkyBlue.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 05-12-2013
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
gracias ecfisa por la respuesta , creo que lo ultimo fue error de dedo , pero si se pone asi, esto si lo imprimiria

Código Delphi [-]
showmessage(inttostr((TEdit(product[i]).color));

ahora me surge otra duda como puedo dibujar los componentes de producto(TComponent list) de nuevo en la forma , esto lo necesito por que en la pantalla
necesito paginar los productos, pero algunos datos puieron haber cambiado(por ejemplo el color del tedit) y al regresar a la misma pagina necesito que se repinten igual.

saludos
Responder Con Cita
  #4  
Antiguo 05-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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 richy08.

No se si entendí lo que buscas hacer, ¿ Es algo como tomar una instantánea mediante el TComponentList, modificar alguna propiedad en algún edit y luego volverlos al estado anterior ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 05-12-2013
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
trato de explicarlo mejor, en la pantalla solo apareceran por ejemplo 20 productos , de un total de 100, entonces los productos se paginaran de 20 en
20(total 5 paginas ) , usare dos botones uno de atras y otro de adelante, para ir apareciendo los productos segun en la paginacion en que esten.

ejemplo:

estoy en la paginacion 1 y muevo una propiedad de un tedit por ejemplo la de color, luego presiono el boton de adelante (cambio a pagina 2) , si despues presiono el boton hacia atras (cambio a pagina 1), me gustaria volver a pintar ese tedit pero desde el TObjectList para que aparezca con su propiedad color modificada, entonces la pregunta es como pintar los objetos del TobjectList a la forma

saludos
Responder Con Cita
  #6  
Antiguo 05-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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 richy08.

De ahí mi pregunta anterior... No creo que te sea útil para ese propósito.

Lo que sucede es que las propiedades Items[n] de TComponentList y TObjectList, en realidad son apuntadores (a un TComponent y un TObject respectivamente). Por lo tanto todo cambio que se provoque en un componente asignado, se verá reflejado en el elemento de la lista y viceversa.

Por ejemplo, si tenemos asignado en la posición 10 de una lista el control "Edit11" es lo mismo hacer:
Código Delphi [-]
  (FindComponent('Edit11') as TEdit).Color := clBlak;
que:
Código Delphi [-]
  
  (Lista.Items[10] as TEdit).Color := clBlack;
Ambos códigos hacen referencia a la misma instancia, uno u otro provocan el mismo efecto.

Si deseas guardar los estados relevantes de los controles de cada TTabSheet al abandonarlo para restaurarlo al ingresar nuevamente, podrías valerte de TIniFile o TRegistry.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 05-12-2013
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
Gracias ecfisa, si eso me temia por eso me estaba apoyando en un tmemo, ahi guardo las propiedas que cambian (que en realidad solo es el campo text
que guarda una cantidad), y si esa cantidad es mayor que 0 se pinta de azul, entonces creare una funcion que me recupere del tmemo esa propiedad(cuando pagine ) y de existir se la volvere a aplicar , muchas gracias por tu tiempo y explicacion

saludos
Responder Con Cita
  #8  
Antiguo 06-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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 richy08.

Para no dejarte la pelota picando, te pongo un ejemplo de como hacerlo en ambos casos.

Usando Registry:
Código Delphi [-]
...
implementation

uses Registry;

var
 CurrentTab: Integer = 0;

procedure TForm1.FormCreate(Sender: TObject);
var
  i,j: Integer;
  e  : TEdit;
begin
  with TRegistry.Create do
  try
    RootKey:= HKEY_CURRENT_USER;
    if OpenKey('MiProg\PageCtrl',False) then
    begin
      with PageControl1 do
      begin
        for i := 0 to PageCount - 1 do
          for j := 0 to Pages[i].ControlCount-1 do
            if Pages[i].Controls[j] is TEdit then
            begin
              e := TEdit(Pages[i].Controls[j]);
              e.Text := ReadString(e.Name+'Text');
              e.Color:= ReadInteger(e.Name+'Color');
            end;
        CloseKey;
        ActivePageIndex := 0;
      end;
    end;
  finally
    Free;
  end;
end;

procedure TForm1.PageControl1Change(Sender: TObject);
var
  i: Integer;
  e: TEdit;
begin
  with TRegistry.Create do
  try
    RootKey:= HKEY_CURRENT_USER;
    if OpenKey('MiProg\PageCtrl', True) then
    begin
      with PageControl1 do
      begin
        for i := 0 to Pages[CurrentTab].ControlCount-1 do
          if Pages[CurrentTab].Controls[i] is TEdit then
          begin
            e := TEdit(Pages[CurrentTab].Controls[i]);
            WriteString(e.Name+'Text', e.Text);
            WriteInteger(e.Name+'Color', e.Color);
          end;
        for i := 0 to Pages[ActivePageIndex].ControlCount-1 do
          if Pages[ActivePageIndex].Controls[i] is TEdit then
          begin
            e := TEdit(Pages[CurrentTab].Controls[i]);
            WriteString(e.Name+'Text', e.Text);
            WriteInteger(e.Name+'Color', e.Color);
          end;
        CurrentTab := ActivePageIndex;
      end;
      CloseKey;
    end;
  finally
    Free;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i, j: Integer;
  e: TEdit;
begin
  with TRegistry.Create do
  try
    RootKey:= HKEY_CURRENT_USER;
    if OpenKey('MiProg\PageCtrl', True) then
    begin
      with PageControl1 do
      begin
        for i := 0 to PageCount - 1 do
          for j := 0 to Pages[i].ControlCount-1 do
            if Pages[i].Controls[j] is TEdit then
            begin
              e := TEdit(Pages[i].Controls[j]);
              WriteString(e.Name+'Text', e.Text);
              WriteInteger(e.Name+'Color', e.Color);
            end;
        end;
        CloseKey
     end;
  finally
    Free;
  end;
end;

Usando IniFiles:
Código Delphi [-]
...
implementation

uses IniFiles;

var
 CurrentTab: Integer = 0;

procedure TForm1.FormCreate(Sender: TObject);
var
  i,j: Integer;
  e : TEdit;
begin
  with TIniFile.Create(ExtractFilePath(Application.ExeName)+'PROG.INI') do
  try
    with PageControl1 do
    begin
      for i:= 0 to PageCount - 1 do
        for j:= 0 to Pages[i].ControlCount-1 do
          if Pages[i].Controls[j] is TEdit then
          begin
            e := TEdit(Pages[i].Controls[j]);
            e.Text := ReadString(e.Name,'Text','');
            e.Color:= ReadInteger(e.Name,'Color',clWindow);
          end;
      ActivePageIndex := 0;
    end;
  finally
    Free;
  end;
end;

procedure TForm1.PageControl1Change(Sender: TObject);
var
  i: Integer;
  e: TEdit;
begin
  with TIniFile.Create(ExtractFilePath(Application.ExeName)+'PROG.INI') do
  try
    with PageControl1 do
    begin
      for i:= 0 to Pages[CurrentTab].ControlCount-1 do
        if Pages[CurrentTab].Controls[i] is TEdit then
        begin
          e := TEdit(Pages[CurrentTab].Controls[i]);
          WriteString(e.Name,'Text', e.Text);
          WriteInteger(e.Name,'Color', e.Color);
        end;
      for i:= 0 to Pages[ActivePageIndex].ControlCount-1 do
        if Pages[ActivePageIndex].Controls[i] is TEdit then
        begin
           e := TEdit(Pages[CurrentTab].Controls[i]);
           e.Text := ReadString(e.Name,'Text','');
           e.Color:= ReadInteger(e.Name,'Color',clWindow);
        end;
      CurrentTab := ActivePageIndex;
    end;
  finally
    Free;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i,j: Integer;
  e: TEdit;
begin
  with TIniFile.Create(ExtractFilePath(Application.ExeName)+'PROG.INI') do
  try
    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 then
          begin
            e := TEdit(Pages[i].Controls[j]);
            WriteString(e.Name,'Text', e.Text);
            WriteInteger(e.Name,'Color', e.Color);
          end;
  finally
    Free;
  end;
end;

Saludos
__________________
Daniel Didriksen

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



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Referencia al formulario Kiranov OOP 15 31-01-2013 22:24:27
Parámetros por referencia a un .exe Parsec OOP 4 25-05-2012 20:19:28
Referencia a una const sleep25000 Varios 6 16-12-2011 10:55:36
Referencia circular Enan0 Varios 3 31-10-2006 22:56:26
Pasar el valor de un TEdit dentro de un StringGrid a otro TEdit que está fuera atirado Varios 4 11-09-2004 19:13:48


La franja horaria es GMT +2. Ahora son las 18:36:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi