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-03-2013
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Frames dentro de ControlPages

Hola amigos.
Tengo el siguiente problema.
En un formulario tengo una componente del tipo TPageControl en la que voy a tener varias sesiones de chat.
Cuando creo una nueva TTabSheet en esta creo un TFrame, al que en el momento de la creacion le seteo el sessionid.
Mi problema es que no encuentro la forma de acceceder a las variables y componentes del frame desdePageControl.
Este es el fragmento de codigo que crea cada page.

Código Delphi [-]
var
  frameChat: TfrChat;

procedure TfrmMediaTabs.AddNewTab(const Value: Integer);
var
  newtab: TsTabSheet;
begin
  newtab := TsTabSheet.Create(PageControl);
  newtab.Tag := StrToInt(ChatSession);
  newtab.PageControl := PageControl;

  FrameChat := TfrChat.Create(newtab);
  FrameChat.Name := 'Frame' + ChatSession;
  FrameChat.Parent := newtab;
  FrameChat.Align := alClient;
  FrameChat.SessionID := ChatSession;  // <---- como la puedo acceder

Espero haberme explicado bien.
Gracias.

Última edición por jars fecha: 05-03-2013 a las 18:25:32.
Responder Con Cita
  #2  
Antiguo 05-03-2013
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
SessionID es una variable accesible o propiedad publica del frame?
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #3  
Antiguo 05-03-2013
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Es una propiedad publica del frame.
Basicamente lo que quiero hacer es que cuando recibo un mensaje de chat, con el sessionid lo pueda localizar y agregar ese mensaje en el richedit del tab que corresponda.
Responder Con Cita
  #4  
Antiguo 05-03-2013
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No debería haber ningún problema. ¿Puedes mostrar cómo tienes declarada la propiedad SessionId del frame?

// Saludos
Responder Con Cita
  #5  
Antiguo 05-03-2013
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Roman, asi esta declarada:
Código Delphi [-]
type
  TfrChat = class(TFrame)
    Panel1: TPanel;
    btnSend: TcxButton;
    mSend: TsMemo;
    SB: TmxStatusBar;
    ToolBar1: TToolBar;
    btnSave: TToolButton;
    btnFont: TToolButton;
    Panel2: TPanel;
    mHistory: TJvRichEdit;
    FontDialog: TFontDialog;
    sAlphaImageList1: TsAlphaImageList;
  private
    FSessionID: string;
    procedure SetSessionId(const Value: string);
  public
    property SessionId: string read FSessionId write SetSessionId;
  end;

Si no deberia haber ningun problema, por favor decime como la accedo.
Gracias
Responder Con Cita
  #6  
Antiguo 05-03-2013
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Según ese código no deberías tener ningún problema! :S
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #7  
Antiguo 05-03-2013
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues sí, no debe haber ningún problema. Exactamente, ¿cuál es el mensaje de error que obtienes?

// Saludos
Responder Con Cita
  #8  
Antiguo 06-03-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Además de lo que te han dicho, tal vez deberías guardar en una lista las referencias a los Frames que vas creando. Es decir, si para crearlos todos usas el mismo código y la misma variable, te será más fácil acceder a los frames si los almacenas en una lista (TObjectList o TList).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 06-03-2013
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Pues lo que estoy haciendo ahora es guardandolo en un StrinList (Sessions), este es el código.
Código Delphi [-]
procedure TfrmMediaTabs.NewMessage(SessionId, TextMessage: string);
var
  x: Integer;
begin
  x := Sessions.IndexOf(SessionId);
  if x < 0 then Exit;
  TfrChat(Sessions.Objects[x]).mHistory.Text := TextMessage;
end;

Con este codigo, cada vez que llega un mensaje desde la web, intento agregarselo a la sessión que corresponda pero me encuentro que solamente me muestra el de la primera session y no el de la segunda.

Código Delphi [-]
  // frmMediaTabs es el formulario que contiene a PageControl
  frmMediaTabs.ChatSession := '1234';
  frmMediaTabs.Show;
  frmMediaTabs.NewMessage('1234', 'Este es el mensaje para la primera sesión');

  frmMediaTabs.ChatSession := '13587';
  frmMediaTabs.Show;
  frmMediaTabs.NewMessage('13587', 'Este es el mensaje para la segunda sesión');
Responder Con Cita
  #10  
Antiguo 06-03-2013
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Si tengo 3 tabs y estoy parado en el 3, como hago para acceder programaticamente a mHistory (TJvRichEdit) del frame de tab 1?
No encuentro la forma o no me doy cuenta de como hacerlo, .... se puede?
Responder Con Cita
  #11  
Antiguo 06-03-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
Cita:
Empezado por jars Ver Mensaje
Si tengo 3 tabs y estoy parado en el 3, como hago para acceder programaticamente a mHistory (TJvRichEdit) del frame de tab 1?
No encuentro la forma o no me doy cuenta de como hacerlo, .... se puede?
Hola.

No estoy seguro de haber interpretado lo que estas buscando, pero según lo que entendí sería:
Código Delphi [-]
  ...
  PageControl1.ActivePageIndex := 1;
  JvRichEdit.SetFocus;
  ...
En este caso la consulta está relativamente relacionada, pero recuerda que para nuevas preguntas se debe crear un nuevo hilo.

Saludos.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 06-03-2013 a las 19:19:38.
Responder Con Cita
  #12  
Antiguo 06-03-2013
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
No, me referia a acceder a mHistory pero sin cambiar de tab.
Responder Con Cita
  #13  
Antiguo 06-03-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.

Siempre que no pretendas darle el foco (ya que en ese momento JvRichEdit es invisible), podes acceder de forma directa:
Código Delphi [-]
   JvRichEdit.Text := 'Hola'

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #14  
Antiguo 06-03-2013
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Y como le indico que es el del primer tab.
Refresco un poco lo que hago.
En un formulario tengo una componente del tipo TPageControl en la que voy a tener varias sesiones de chat, una en cada Tab.
Cuando creo una nueva TTabSheet en esta creo un TFrame, al que en el momento de la creacion le seteo el sessionid.
Mi problema es que no encuentro la forma de acceceder a las variables y componentes del frame desde desde otro Tab.
Responder Con Cita
  #15  
Antiguo 06-03-2013
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Ten en cuenta que el PageControl, mas especificamente el Tab solo es el lugar donde se despliega visualmente y puedes acceder al objeto del frame desde cualquier lugar donde sea accesible.

Es decir que recorriendo así puedes encontrarlo y modificarlo

Código Delphi [-]
for i := 0 to Self.ComponentCount - 1 do
begin
  if Self.Components[i] is TFrChat then 
    if TFrChat(Self.Components[i]).SessionId = SessionIdEval then
      TFrChat(Self.Components[i]).Memo1.Add(NuevoMens);      
end;

Retomando lo que dice neftali,

Puedes hacer la creación de los objetos y llevarlos a un TList. Estando allí, en lugar de recorrer todos los componentes del formulario, solo recorres los objetos incluidos en la lista.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #16  
Antiguo 06-03-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
Cita:
Empezado por jars Ver Mensaje
Y como le indico que es el del primer tab.
Refresco un poco lo que hago.
En un formulario tengo una componente del tipo TPageControl en la que voy a tener varias sesiones de chat, una en cada Tab.
Cuando creo una nueva TTabSheet en esta creo un TFrame, al que en el momento de la creacion le seteo el sessionid.
Mi problema es que no encuentro la forma de acceceder a las variables y componentes del frame desde desde otro Tab.
Hola.

A ver si ahora entendí...

Tenes un PageControl, en cada TabSheet un Frame y dentro de cada uno de ellos un RichEdit (JvRichEdit) y tal vez otros componentes.
Si es así y le diste nombres a cada uno de los JvRichEdit (por ejemplo mHistory+ChatSession), un modo de acceder podría ser:
Código Delphi [-]
procedure TForm1.CambiarTextoRE(const aName, aText: string);
var
  S : TTabSheet;
  F : TFrame;
  i,j,k : Integer;
begin
  for i := 0 to PageControl1.ControlCount-1 do
  begin
    S := PageControl1.Controls[i] as TTabSheet;
    for j:= 0 to S.ControlCount - 1 do
    begin
      F := S.Controls[j] as TFrameChat;
      for k:= 0 to F.ControlCount -1 do
        if F.Controls[k].Name = aName then
          (F.Controls[k] as TRichEdit).Lines.Add(aText); // (no uso TjvRichEdit)
    end;
  end;
end;

Llamada de ejemplo:
Código Delphi [-]
  CambiarTextoRE('mHistory13587', 'Nueva linea de texto');

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
Dibujar frames Amos Gráficos 6 06-09-2007 20:31:48
Frames Caro Varios 4 17-06-2005 16:55:01
Uso de Frames jdangosto OOP 7 20-01-2005 00:15:03
Frames pepelu1975 OOP 2 21-05-2004 17:32:01
Frames pepelu1975 Varios 2 17-02-2004 18:00:30


La franja horaria es GMT +2. Ahora son las 16:06:22.


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