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 14-07-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 15
FideRosado Va por buen camino
Chat Comico - Dudas y mas

Hola amigos he creado un chat, pero acabo de encontrarme con algo que he querid hacer el caso es que esta es la idea que me he creado en un form que tiene lo basico para que ande, le llamaremos form2, del cual a partir de el crearems cuantos necesitemos, el caso es que como veran, los mensajes originalmente deberian estar en la parte inferir saliendo desde abajo, el cas es que imprimo paneles en un ScrollBox, el cual por defectto los imprime en la parte superior, y eso es lo que me mmolesta, por lo menos saber como se puede imprimir desde abajo.. como se muestra la imagen..


http://clubdelphi.com/foros/attachme...1&d=1405318188
Imágenes Adjuntas
Tipo de Archivo: jpg capturachatofide1.jpg (39,7 KB, 22 visitas)
__________________
"Aquellos que dicen que algo no puede hacerse, suelen ser interrumpidos por otros que lo están haciendo"
Responder Con Cita
  #2  
Antiguo 14-07-2014
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 FideRosado.
Cita:
Empezado por FideRosado Ver Mensaje
... imprimo paneles en un ScrollBox, el cual por defectto los imprime en la parte superior, y eso es lo que me mmolesta, por lo menos saber como se puede imprimir desde abajo.. como se muestra la imagen..
En principio es muy simple, basta con fijar su propiedad Align = alBottom.

Pero... si deseas que los mensajes mas recientes vayan quedando debajo de los mas antiguos se complica un poco, ya que hay que forzar el órden por defecto de alineación alBottom.

Te pongo un ejemplo de como podrías implementarlo de este último modo:
Código Delphi [-]
...
implementation

uses Contnrs;

var
  PnlList: TObjectList;
  MsgCount: Integer = 1;

procedure TForm1.FormCreate(Sender: TObject);
begin
  PnlList:= TObjectList.Create;
  Timer1.Interval:= 1000;
  Timer1.Enabled:= True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
const
  PNL_HEIGHT = 60;
  MENSAJES: array [1..5] of string = (
    'Hola ¿ Como estas ?','Bién, ¿ Todavia de vacaciones ?','Si, vuelvo mañana',
    '¿ Como está el clima allá ?','Ayer llovió pero hoy esta lindo');
  PNL_COLOR: array[Boolean] of TColor = (clCream, clMoneyGreen);
var
  pnl: TPanel;
  i:Integer;
begin
  ScrollBox1.DisableAlign;
  for i:= PnlList.Count-1 downto 0 do
    with TPanel(PnlList[i]) do
    begin
      Align:= alNone;
      Top:= Top - PNL_HEIGHT;
    end;
  ScrollBox1.EnableAlign;
  pnl:= TPanel.Create(Self);
  pnl.Parent:= ScrollBox1;
  pnl.Width:= ScrollBox1.Width-10;
  pnl.Height:= PNL_HEIGHT;
  pnl.Align:= alBottom;
  pnl.Name:= 'PanelChat'+IntToStr(MsgCount);
  pnl.Caption:= IntToStr(MsgCount)+') '+MENSAJES[MsgCount]+'  ';
  pnl.ControlStyle:= pnl.ControlStyle - [csParentBackground];
  pnl.Color:= PNL_COLOR[Odd(MsgCount)];
  PnlList.Add(pnl);
  for i:= PnlList.Count-1 downto 0 do
    TPanel(PnlList[i]).Align:= alBottom;
  Inc(MsgCount);
  if MsgCount = 6 then Timer1.Enabled:= False;
end;

...

procedure TForm1.FormDestroy(Sender: TObject);
begin
  PnlList.Free;
end;

Salida del demo:



Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 14-07-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 15
FideRosado Va por buen camino
felicidades

has lgrado lo que pense, puedes adjuntarme el proy para verle el codigo, pues com ke me pierdo un pco.. saque un biejo proy que tengo y estuve mirando esas propiedades..
__________________
"Aquellos que dicen que algo no puede hacerse, suelen ser interrumpidos por otros que lo están haciendo"
Responder Con Cita
  #4  
Antiguo 14-07-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 15
FideRosado Va por buen camino
respuesta

he usado esta simple funcion para poner los ultimos en el fondo
algo sencillo

Código Delphi [-]
for i:= ScrollBox1.ControlCount - 1 downto 0 do begin
    if ScrollBox1.Controls[i] is TPanel then begin
       TPanel(ScrollBox1.Controls[i]).Align:=alTop;
       TPanel(ScrollBox1.Controls[i]).Align:=alBottom;
    end;
  end;
__________________
"Aquellos que dicen que algo no puede hacerse, suelen ser interrumpidos por otros que lo están haciendo"
Responder Con Cita
  #5  
Antiguo 14-07-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 15
FideRosado Va por buen camino
respuesta

aunke seguire buscando formas mas adecuadas para hacero.. claro esta..
__________________
"Aquellos que dicen que algo no puede hacerse, suelen ser interrumpidos por otros que lo están haciendo"
Responder Con Cita
  #6  
Antiguo 15-07-2014
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 FideRosado.

Si, ese código es mas simple, pero no tan eficiente por que tiene que buscar entre todos los controles que existan en el ScrollBox. Usar un TObjectList para almacenar sólo los Panels añadidos reduce la cantidad de elementos a recorrer y obviamente también evita evaluar si se trata de un Panel u otro control.

Código Delphi [-]
var
  PnlList: TObjectList;

....
begin
  // creación del nuevo TPanel pnl
  pnlList.Add(pnl);
  ScrollBox1.DisableAlign;
  for j:= PnlList.Count-1 downto 0 do
  begin
    TPanel(PnlList[j]).Align:= alTop;
    TPanel(PnlList[j]).Align:= alBottom;
  end;
  ScrollBox1.EnableAlign;
  ....

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 15-07-2014 a las 03:11:42.
Responder Con Cita
  #7  
Antiguo 15-07-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 15
FideRosado Va por buen camino
respuesta

si eso es, el recorre buscando los controles y les cambia laAlign,pero la verdad es que no entiend lo que me pones, es que necesito seguir un codigo ya echo para entender esa cmplegidad. si puedes adjuntame el proy enviamelo a ...
__________________
"Aquellos que dicen que algo no puede hacerse, suelen ser interrumpidos por otros que lo están haciendo"

Última edición por ecfisa fecha: 15-07-2014 a las 05:47:55. Razón: Quitar dirección de correo electrónico
Responder Con Cita
  #8  
Antiguo 15-07-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.918
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Lo que te mostraron resuelve de forma muy directa el problema. Haz seguido un curso en programación? Entiendes las bases? Sabes, por ejemplo, como procesar listas, ordenar & buscar items? Sabes que es Queue y un Stack?

Porque si las bases no las tienes claras, vas a a perder mucho tiempo intentando hacer las cosas.
__________________
El malabarista.
Responder Con Cita
  #9  
Antiguo 15-07-2014
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 FideRosado Ver Mensaje
si eso es, el recorre buscando los controles y les cambia laAlign,pero la verdad es que no entiend lo que me pones, es que necesito seguir un codigo ya echo para entender esa cmplegidad. si puedes adjuntame el proy enviamelo a ...
Hola FideRosado.

Soy respetuoso de las normas de nuestro sitio y si lees la norma 11 de la guía de estilo, entenderás por que no respondo de forma privada.
Además de ir contra nuestras normas, publicar tu correo te deja expuesto a recibir spam, motivo por el cuál modifico ese punto de tu mensaje.

Sin embargo, con muchísimo gusto te agrego un ejemplo simplificado, pero totalmente funcional, que implementa mi sugerencia anterior.
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation

uses Contnrs;

var
  PnlList: TObjectList;
  MsgCount: Integer = 1;

procedure TForm1.FormCreate(Sender: TObject);
begin
  PnlList:= TObjectList.Create; // Crear lista
  Timer1.Interval:= 500;
  Timer1.Enabled:= True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
const
  PNL_HEIGHT = 60;
var
  pnl: TPanel;
  j: Integer;
begin
  // Creación de un panel
  pnl:= TPanel.Create(Self);
  pnl.Parent:= ScrollBox1;
  pnl.Width:= ScrollBox1.Width-10;
  pnl.Height:= PNL_HEIGHT;
  pnl.Name:= Format('PanelChat%d',[MsgCount]);
  pnl.Caption:= Format('Mensaje: %d',[MsgCount]);

  // Agregarlo a la lista;
  PnlList.Add(pnl);

  // Reorganizar paneles
  for j:= PnlList.Count-1 downto 0 do
  begin
    (PnlList[j] as TPanel).Align:= alTop;
    (PnlList[j] as TPanel).Align:= alBottom;
  end;

  Inc(MsgCount);
  if MsgCount = 7 then Timer1.Enabled:= False; // límite 7 msgs
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  PnlList.Free; // Liberar lista
end;

end.
El TTimer, la variable MsgCount y algun otro detalle están a fin de simular el arribo de los mensajes.

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 15-07-2014 a las 08:15:50.
Responder Con Cita
  #10  
Antiguo 15-07-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.088
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Soy respetuoso de las normas de nuestro sitio y si lees la norma 11 de la guía de estilo, entenderás por que no respondo de forma privada.
Además de ir contra nuestras normas, publicar tu correo te deja expuesto a recibir spam, motivo por el cuál modifico ese punto de tu mensaje.
Me "copio y pego" esa frase tan bien expresada, porque hace falta usarla más veces de las que quisiera
Responder Con Cita
  #11  
Antiguo 15-07-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 15
FideRosado Va por buen camino
respuesta

tienen razn, necesitaba verlo desde es punto de vista..
__________________
"Aquellos que dicen que algo no puede hacerse, suelen ser interrumpidos por otros que lo están haciendo"
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
Un cómico sueco se come parte de su culo!! Bicho La Taberna 2 09-10-2007 22:06:09
como hacer una especie de chat(consulta chat) bellleti Conexión con bases de datos 3 10-07-2007 13:30:01
Chat wgandalf Internet 2 01-12-2005 16:31:17
Chat Barzaugc Varios 7 07-06-2005 23:16:12
El chat no funciona BeN Varios 0 15-05-2005 04:40:31


La franja horaria es GMT +2. Ahora son las 19:23:33.


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