Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-10-2005
Clantt Clantt is offline
Miembro
 
Registrado: abr 2004
Ubicación: Tarija
Posts: 34
Poder: 0
Clantt Va por buen camino
Cita:
Empezado por roman
Para lo primero simplemente pon

Código Delphi [-]
 Form2.memo1.items.add := 'cualquier cosa';
Cita:
Empezado por roman

El problema aquí surgirá cuando quieras mantener más de una conversación privada a la vez. No puedes usar la misma variable Form2 para todas ellas. Debes usar una variable distinta por cada ventana que uses.
Eso es exactamente lo que hice pero como tu dices no funciona si tengo varias conversaciones, la variable estaría ocupada, entonces la solución es que tengo que tener disponibles unos 20 forms uno para cada usuario que tenga, osea que finalmente tendría un máximo de 20 usuarios?.

Al parecer mi lógica del chat esta errónea no crees? mi cliente debería ser cada ventanita no la ventana principal? ¿Creo que estoy frito, por que la verdad no tengo idea de como hacerlo? espero alguna sugerencia saludos..
Responder Con Cita
  #2  
Antiguo 20-10-2005
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
Cita:
Empezado por Clantt
Al parecer mi lógica del chat esta errónea no crees?
No, no lo creo. Tal como la planteaste puede funcionar pero te hacen falta un poco de conocimientos técnicos para saber por dónde entrarle. Esto no tiene nada de malo, pero hay que solventarlo tarde o temprano.

Vamos a ver; obviamente no puedes declarar tantas variables como ventanas posibles ya que no puedes saber cuántas de ellas habrá en un momento dado.

Entonces lo que necesitas es una lista de objetos a la que puedas agregar o quitar elementos dinámicamente.

Dices que en tu ventana principal tienes una lista de usuarios. Si esta lista es un ListBox entonces ya tienes la mitad del camino recorrido.

La propiedad Items del ListBox es un objeto de tipo TStrings y como tal, tiene una propiedad Objects:


Código Delphi [-]
lbUsuarios.Items.Objects[Index]: TObject

que viene a ser un arreglo o lista de objetos, uno por cada elemento de Items, o sea de lbUsuarios (el ListBox de usuarios). Como un formulario es un objeto, bien puedes utilizar esto para guardar referencias a las ventanas de privados. Si no tienes privado con un usuario, el objeto correspondiente será nil.

Para fijar ideas, vamos a describir lo que pasaría cuando haces doble click sobre un usuario de la lista:
  1. lbUsuarios.ItemIndex te da el índice en la lista que ocupa el usuario
  2. Entonces lbUsuarios.Items.Objects[lbUsuarios.ItemIndex] es el objeto asociado a ese elemento de la lista.
  3. Al principio será nil pero es "la variable" en donde guardas el formulario que vas a crear:

    Código Delphi [-]
    var
      Ventana: TVentanaPrivado;
    
    begin
      // Creas el formulario para el privado
      Ventana := TVentanaPrivado.Create(Self);
    
      // Ajustas propiedades
      Ventana.Memo1.Text := 'Conversación privada con fulanito';
    
      // Muestras la ventana
      Ventana.Show;
    
      // Guardas la referencia a la ventana en la lista
      lbUsuarios.Items.Objects[lbUsuarios.ItemIndex] := Ventana
    end;
  4. Aquí, Ventana es una variable temporal, declarada en el evento OnDblClick o el método que uses para abrir el privado.

Así, en un momento dado, tendrías la siguiente situación, esquemáticamente hablando:

Código:
[pablo] --------> +--------------------+
[susana] -> nil   |                    |
[teresa] -> nil   |                    |
[lepe] -> nil     +--------------------+
[juanito] -> nil
[mamá] ---------> +--------------------+
                  |                    |
                  |                    |
                  +--------------------+
En el chat se encuentran pablo, susana, teresa, lepe, juanito y tu mamá y tienes conversaciones privadas con pablo y mamá.

Los otros elementos son nil pues no has iniciado conversaciones con ellos.

Si tienes que interactuar con la ventana de pablo, por ejemplo, primero que nada obtienes el índice que ocupa en la lista. Éste puede ser ItemIndex como antes, si es el que esá seleccionado o bien el obtenido de lbUsuarios.Items.IndexOf('pablo')

Una vez hecho esto, obtienes la referencia al privado:


Código Delphi [-]
var
  Ventana: TVentanaPrivado;

begin
  Ventana := TVentana(lbUsuarios.Items.Objects[Indice]);
end;

Y ya pudes interactuar usando la variable local Ventana.

Hay muchos otros detalles que tendrás que tomar en cuenta. Por ejemplo, ¿qué pasa cuando cierres una ventana de privado? Lo más sensato es que liberes su memoria poniendo Action := caFree en su evento OnClose. Pero de alguna manera tienes que avisarle a la ventana principal para que se entere de que ya no hay privado y vuelva a poner en nil la referencia correspondiente.

Pero por el momento ya tienes con qué comenzar.

Paralelamente te recomiendo que leas algún libro básico de Delphi. En la página de Ian Marteens podrás bajar gratuitamente La Cara Oculta de Delphi 4, que aunque no coincida conla versión que uses de Delphi, te servirá perfectamente para las nociones generales.

// Saludos
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


La franja horaria es GMT +2. Ahora son las 08:35:51.


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