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 25-10-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
checklistbox y pagecontrol para usarlo dockeable

Buenas foristas del clubdelphi, tengo ciertas dudas con respecto a la creacion en modo de ejecucion de checklistbox, y transformarlo en dockeable y colocarlo dentro del page control como pestañas.. el punto es.

estoy intentando crear mediante un boton y un combobox los checklistbox. la cuestion es cuando se repite el nombre dice que ya esta creado uno, como capturo que ese checklistbox se cerro y libere el formulario? aqui mas o menos lo que llevo..

PD: soy novato, estoy animandome con el delphi gracias de antemano.. aca el codigo

Código Delphi [-]
............. 
 public
  cajas : tchecklistbox;
      { Public declarations }
  end;
.............

procedure TfrmVentas.Button1Click(Sender: TObject);
begin

  cajas := tchecklistbox.Create(frmventas);
  cajas.Top := 10;
  cajas.Left := 10;
  cajas.Height := 300;
  cajas.Width := 300;
  cajas.Parent := pagecontrol1;
  cajas.Name := combobox1.Text;
  cajas.Items.Add('el nombre es:'+cajas.Name);
  cajas.Items.Add(combobox1.Text);
  cajas.DragKind := dkDock;
  cajas.DragMode := dmAutomatic;

 end;

el combobox lo llenare con base de datos, son como grupos.. cuando seleccione grupo1 buscara en base de datos mysql todos los que esten con ese grupo... los agregue en checklistbox.. ( todavia no llego ahi ) pero estoy tratando de que sea asi... porque las pestañas necesito que se llamen igual como el grupo, pero no consigo ponerle caption ... y mire aca DockForm, pero no se mucho si sea factible crear formularios y dentro de ese formulario el checklistbox, porque necesito capturar cuando se cierre el checklistbox para liberar ese checklistbox para que pueda ser creado de nuevo..

por otra parte tmb pense en ejecutarlos todos los grupos y tenerlos ocultos pero no se si seria practico eso... aparte que no conozco cuantos grupos seran.. ya pueden ser ilimitados grupos...

Saludos espero puedan orientarme un poco..
Responder Con Cita
  #2  
Antiguo 25-10-2011
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 adsbernardo.

Cita:
la cuestion es cuando se repite el nombre dice que ya esta creado uno, como capturo que ese checklistbox se cerro
Si no te entendí mál, creo que podrías hacerte una función que verifique si el CheckListBox existe:
Código Delphi [-]
...
function TForm1.ExisteCtrl(Nombre: string):Boolean;
var
  i: Integer;
begin
  Result:= False;
  for i:= 0 to ComponentCount -1 do
    if Components[i].Name = Nombre then
      Result:= True;
end;

Para usarla por ejemplo:
Código Delphi [-]
procedure TfrmVentas.Button1Click(Sender: TObject);
begin
  if not ExisteCtrl(ComboBox1.Text) then  // ¿ Ya fue creado ?
    with TCheckListBox.Create(Self) do    // no, crearlo
    begin
      Parent:= Self;
      Name:= ComboBox1.Text;
      DragKind:= dkDock;
      DragMode:= dmAutomatic;
      ...
    end
   else                                       
     ShowMessage('Ya existe');  //si, ya existe. (aca la acción que desees hacer)
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 25-10-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
[quote=ecfisa;416704] Hola adsbernardo.

Si no te entendí mál, creo que podrías hacerte una función que verifique si el CheckListBox existe:
Código Delphi [-]
...
function TForm1.ExisteCtrl(Nombre: string):Boolean;
var
  i: Integer;
begin
  Result:= False;
  for i:= 0 to ComponentCount -1 do
    if Components[i].Name = Nombre then
      Result:= True;
end;

Con respecto a esa funcion si estoy creando checklistbox en modo de ejecucion, como hago para que verifique todos los creados? porq en ComponentCount y en Components[i].Name me dice que no esta declarado, asumo que aqui es donde coloco los checklistbox?

Añado: que estoy creando los checklistbox en modo ejecucion, en ese caso como se deberia validar si esta o no esta? con la funcion que me diste?

pd: Mil gracias amigo ecfisa!

Última edición por asdbernardo fecha: 25-10-2011 a las 20:51:16. Razón: Anexe que estoy creando los checklistbox en modo ejecucion
Responder Con Cita
  #4  
Antiguo 25-10-2011
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.

No entiendo bién a que te referis, pero a ver si puedo explicarme mejor:

La función 'ExisteCtrl' (o el nombre que le des) recorre todos los componentes del form verificando que el componente exista (haya sido creado) y devuelve True si es así. Caso contrario devuelve False.

Como en la creación del TCheckListBox le asignas el nombre de este modo:
Código Delphi [-]
  cajas.Name := combobox1.Text;
Antes de dicha creación deberías verificar:
Código Delphi [-]
 
  if ExisteCtrl(combobox1.Text) then 
  ...

Agregándola a tu código inicial sería:
Código Delphi [-]
procedure TfrmVentas.Button1Click(Sender: TObject);
begin
  if not ExisteCtrl(ComboBox1.Text) then     // si no existe el componente
  begin
    cajas := tchecklistbox.Create(frmventas);  // crearlo
    cajas.Top := 10;
    cajas.Left := 10;
    cajas.Height := 300;
    cajas.Width := 300;
    cajas.Parent := pagecontrol1;
    cajas.Name := combobox1.Text;
    cajas.Items.Add('el nombre es:'+cajas.Name);
    cajas.Items.Add(combobox1.Text);
    cajas.DragKind := dkDock;
    cajas.DragMode := dmAutomatic;
   end
   else  // el componente existe,
          // aquí la accion que decidas tomar 
          // o ninguna en cuyo caso sobraría 'else'
end;

Un saludo.

Edito: No había visto tu último comentario:
Cita:
Añado: que estoy creando los checklistbox en modo ejecucion, en ese caso como se deberia validar si esta o no esta? con la funcion que me diste?
Si, asi es Bernardo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 25-10-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

No entiendo bién a que te referis, pero a ver si puedo explicarme mejor:

La función 'ExisteCtrl' (o el nombre que le des) recorre todos los componentes del form verificando que el componente exista (haya sido creado) y devuelve True si es así. Caso contrario devuelve False.

Como en la creación del TCheckListBox le asignas el nombre de este modo:
Código Delphi [-]
  cajas.Name := combobox1.Text;
Antes de dicha creación deberías verificar:
Código Delphi [-]
 
  if ExisteCtrl(combobox1.Text) then 
  ...

Agregándola a tu código inicial sería:
Código Delphi [-]
procedure TfrmVentas.Button1Click(Sender: TObject);
begin
  if not ExisteCtrl(ComboBox1.Text) then     // si no existe el componente
  begin
    cajas := tchecklistbox.Create(frmventas);  // crearlo
    cajas.Top := 10;
    cajas.Left := 10;
    cajas.Height := 300;
    cajas.Width := 300;
    cajas.Parent := pagecontrol1;
    cajas.Name := combobox1.Text;
    cajas.Items.Add('el nombre es:'+cajas.Name);
    cajas.Items.Add(combobox1.Text);
    cajas.DragKind := dkDock;
    cajas.DragMode := dmAutomatic;
   end
   else  // el componente existe,
          // aquí la accion que decidas tomar 
          // o ninguna en cuyo caso sobraría 'else'
end;

Un saludo.

Edito: No había visto tu último comentario:

Si, asi es Bernardo.
Ok amigo Ecfisa gracias de nuevo por tomarte la amabilidad de responderme.. coloque la funcion, pero me muestra undeclared identifiquer? ComponentCount y en Components[i].Name por eso te hice la pregunta ... Saludos voy a chequear a ver...
Responder Con Cita
  #6  
Antiguo 25-10-2011
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 Bernardo.
Cita:
me muestra undeclared identifiquer
Es probable que hayas declarado la cabecera como función y no como método de TfrmVentas, ya que en realidad es Self.ComponentCount (o visto de otro modo, frmVentas.ComponentCount).

Debería estar más o menos así:
Código Delphi [-]
type
  TfrmVentas = class(TForm)
  ...
  private
     function ExisteCtrl(Nombre: string):Boolean; // puede ir en la sección public...
  public
  end;
...
implementation

function TfrmVentas.ExisteCtrl(Nombre: string):Boolean;
var
  i: Integer;
begin
  Result:= False;
  for i:= 0 to ComponentCount -1 do
    if Components[i].Name = Nombre then
      Result:= True;
end;
...

También se puede utilizar como función pero deberás indicar el form a que te refieres precediendo a ComponentCount y Components así:
Código Delphi [-]
   frmVentas.ComponentCount ...
   frmVentas.Components[i]...

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 25-10-2011 a las 22:07:21.
Responder Con Cita
  #7  
Antiguo 25-10-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
Si amigo, acabe de componerlo quedo así,
la función
Código Delphi [-]

function ExisteCtrl(Nombre: string):Boolean;
var
  J: Integer;
begin
   with frmventas do
    begin
  Result:= False;
  for J:= 0 to ComponentCount - 1 do
    if Components[J].Name = Nombre then
      Result:= True;
    end;
end;

Código Delphi [-]
procedure TfrmVentas.Button1Click(Sender: TObject);
begin
if not ExisteCtrl(ComboBox1.Text) then  // ¿ Ya fue creado ?
    with TCheckListBox.Create(Self) do    // no, crearlo
    begin
  cajas := tchecklistbox.Create(frmventas);
  cajas.Top := 10;
  cajas.Left := 10;
  cajas.Height := 300;
  cajas.Width := 300;
  cajas.Parent := pagecontrol1;
  cajas.Name := combobox1.Text;
  cajas.Items.Add('el nombre es:'+cajas.Name);
  cajas.Items.Add(combobox1.Text);
  cajas.DragKind := dkDock;
  cajas.DragMode := dmAutomatic;
    end
    else
     ShowMessage('Ya existe');  //si, ya existe. (aca la acción que desees hacer)
 end;

Gracias amigo ecfisa, Muy amable! y sobre todo con excelente paciencia..

PD: Hoy estoy con poca cabeza, espero ya recuperarme!
Responder Con Cita
  #8  
Antiguo 26-10-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Otra alternativa para prescindir de crear una funcion que busque el componente es

Código Delphi [-]
procedure TfrmVentas.Button1Click(Sender: TObject);
begin
{FindComponent, se encuentra en la Unit Classes
Devuelve el componente asociado al nombre que recibe de parametro}
    if FindComponent(ComboBox1.Text)=Nil then  // ¿ Ya fue creado ?
    with TCheckListBox.Create(Self) do    // no, crearlo
    begin
           cajas := tchecklistbox.Create(frmventas);
           cajas.Top := 10;
           cajas.Left := 10;
           cajas.Height := 300;
           cajas.Width := 300;
           cajas.Parent := pagecontrol1;
           cajas.Name := combobox1.Text;
           cajas.Items.Add('el nombre es:'+cajas.Name);
           cajas.Items.Add(combobox1.Text);
           cajas.DragKind := dkDock;
           cajas.DragMode := dmAutomatic;
    end
    else
     ShowMessage('Ya existe');  //si, ya existe. (aca la acción que desees hacer)
 end;

Saludos
Responder Con Cita
  #9  
Antiguo 26-10-2011
asdbernardo asdbernardo is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 37
Poder: 0
asdbernardo Va por buen camino
Gracias amigo Cloayza, Tambien si funciona esa alternativa... 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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TTrayIcon como usarlo ? Cecilio Varios 18 30-11-2011 14:43:29
Report Manager...como usarlo..... chileno Impresión 2 26-09-2008 22:56:07
Obtener el Menu de Google Earth para usarlo en mi aplicacion vejerf API de Windows 2 26-05-2008 08:49:26
grfinger como usarlo ? martita Varios 0 13-02-2008 18:47:37
pantalla dockeable dosena OOP 2 05-08-2003 18:55:51


La franja horaria es GMT +2. Ahora son las 06:46:21.


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