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 14-05-2014
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 11
wilcg Va por buen camino
Mostrar y ocultar texto de un TEdit creado en tiempo de ejecución

hola amigos del foro de nuevo buscando ayuda,

El problema es el siguiente, tengo TEdit creados en tiempo de ejecución y algunos ocultan el texto están configurados para ocultar el texto por medio del PasswordChar del Edit y conectados a un TPopupMenu hasta ahy todo bien. Lo que quiero es Mostrar y ocultar el texto del edit desde el TPopupMenu, Mas claro si esta oculto lo muestro y viciversa, pero solo quiero que sea con el TEdit seleccionado.
Haber si alguien me da una ayudita.
Responder Con Cita
  #2  
Antiguo 14-05-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 wilcg.

Ejemplo:
Código Delphi [-]
...
implementation

var
  EditCount: Integer = 1;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize; // a fines del ejemplo
end;

// Crear un Edit
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TEdit.Create(Self) do
  begin
    Name:= 'MiEdit'+IntToStr(EditCount);
    Parent:= Self;
    PasswordChar:= '*'; // oculta por defecto
    PopupMenu:= PopupMenu1;
    Width:= 100;
    Height:= 21;
    Left:= Random(Self.ClientWidth-100)+5;
    Top := Random(Self.ClientHeight-21)+5;
    //...
    Inc(EditCount);
  end;
end;

// Adecuar el texto a la acción
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
  if (PopupMenu1.PopupComponent as TEdit).PasswordChar = #0 then
    miShowHidePwd.Caption:= 'Ocultar contraseña'
  else
    miShowHidePwd.Caption:= 'Mostrar contraseña';
end;

// TMenuItem del TPopupMenu (ocultar/mostrar)
procedure TForm1.miShowHidePwdClick(Sender: TObject);
const
  PWDCHAR: array[Boolean] of Char = (#0, '*');
var
  E: TEdit;
begin
  E:= FindComponent(PopupMenu1.PopupComponent.Name) as TEdit;
  if Assigned(E) then
    E.PasswordChar:= PWDCHAR[E.PasswordChar = #0]
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 14-05-2014
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 11
wilcg Va por buen camino
Gracias ecfisa por contestar,

he realizado pruebas con tu código, y no va parece que falta agregarle algo para que quede bien.

creo que aquí no toma el edit indicado

Código Delphi [-]
procedure TForm1.miShowHidePwdClick(Sender: TObject);
const
  PWDCHAR: array[Boolean] of Char = (#0, '*');
var
  E: TEdit;
begin
  E:= FindComponent(PopupMenu1.PopupComponent.Name) as TEdit;
  if Assigned(E) then
    E.PasswordChar:= PWDCHAR[E.PasswordChar = #0]
end;

creo que en esta parte esta faltando algo, se indicaría el TEdit que queremos que haga la acción.
Código Delphi [-]
  E:= FindComponent(PopupMenu1.PopupComponent.Name) as TEdit;

aver si me ayudas
Responder Con Cita
  #4  
Antiguo 14-05-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 wilc.
Cita:
he realizado pruebas con tu código, y no va parece que falta agregarle algo para que quede bien.
Antes de publicarlo, el código fué probado en Delphi 7 bajo Windows 8.1 y funciona perfectamente sin necesidad de agregado alguno.

O hubo alguna omisión en el copiado/pegado o mas probablemente no hayas asignado valor a la propiedad Name en la creación de los TEdit, lo que justificaría que la función FindComponent no encontrara el componente. Sería muy interesante ver la adaptación que has echo del ejemplo.

Para que puedas comparar y corregir el/los errores con tranquilidad te adjunto los archivos fuentes + el ejecutable.

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 15-05-2014 a las 19:21:57.
Responder Con Cita
  #5  
Antiguo 15-05-2014
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 11
wilcg Va por buen camino
Tienes razón ecfisa, creo que el problema viene por como creo el TEdit, porque he hecho pruebas tal como tu código y funciona perfecto.

La forma como creo los TEdit es desde un archivo XML previamente guardado todos la información de cada TEdit.
aquí el código

Código Delphi [-]
var
  XML : TXMLDocument;
  NComponente : IXMLNode;
  l: Integer;
  Edit: TEdit;
begin
   XML := TXMLDocument.Create(Application);
   try
      XML.Active := True;

      XML.LoadFromFile(ExtractFilePath(Application.ExeName) + '\Plantillas\00001.xml');

      for l := 0 to XML.DocumentElement.ChildNodes.Count - 1 do
      begin

        // ¿Es una Edit?
        if XML.DocumentElement.ChildNodes[l].NodeName = 'Edit' then
        begin
          NComponente := XML.DocumentElement.ChildNodes[l];
          Edit := TEdit.Create(Scroll1);
          Edit.Parent := Scroll1;
          Edit.Name := NComponente.Attributes['Nombre'];
          Edit.Tag := NComponente.Attributes['ID'];
          Edit.Left := NComponente.Attributes['x'];
          Edit.Top := NComponente.Attributes['y'];
          Edit.Width := NComponente.Attributes['Ancho'];
          Edit.Height := NComponente.Attributes['Alto'];
          Edit.Font.Color := NComponente.Attributes['Color'];
          if NComponente.Attributes['Tipo'] = '*' then
          begin
            Edit.PasswordChar := '*';
            Edit.PopupMenu:= PopupMenu1;
          end;
        end;

      XML.Active := False;
   finally
      XML := nil;
   end;
   end;


esta es la forma como se crean los edit, creo que ahí esta el error.
Responder Con Cita
  #6  
Antiguo 15-05-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 wilcg.

Lo que podría estar provocando problemas es que el valor asignado a propiedad Name del control recién creado, bién podría estar vacío o ser inexistente:

Código Delphi [-]
 Edit.Name := NComponente.Attributes['Nombre'];
Nada asegura que exista 'Nombre', o que de existir, tenga algún valor designado.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 16-05-2014
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 11
wilcg Va por buen camino
Ecfisa, gracias amigo ya esta solucionado efectivamente el problema era eso, cambie la forma de crear los edit y funciona perfecto.
Código Delphi [-]
      for l := 0 to XML.DocumentElement.ChildNodes.Count - 1 do
      begin
          NComponente := XML.DocumentElement.ChildNodes[l];
          with TEdit.Create(self) do
          begin
            Parent:= ScrollB;
            Name:= 'txtEdit'+IntToStr(EditCount);
            Tag := NComponente.Attributes['ID'];
            Width:= NComponente.Attributes['Ancho'];
            Height:= NComponente.Attributes['Alto'];
            Left:= NComponente.Attributes['x'];
            Top := NComponente.Attributes['y'];
            Font.Color := NComponente.Attributes['Color'];
            if NComponente.Attributes['Tipo'] = '*' then
            begin
              PasswordChar := '*';
              PopupMenu:= PMContraseña;
            end;
            Inc(EditCount);
          end;      
      end;

este código funciona para mi proyecto
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
Mostrar/Ocultar columnas de un dbgrid en tiempo de ejecucion camiz Varios 1 29-08-2012 20:42:02
Evento en BitBtn creado en tiempo de ejecución newtron OOP 2 10-05-2012 16:54:14
eventos de PageControl creado en tiempo de ejecucion kaozz OOP 5 17-07-2007 15:02:10
Perder el control de un componente creado en tiempo de ejecución dec Trucos 0 30-06-2006 13:35:56
Mostrar un texto creado en tiempo de ejecución FunBit Varios 1 10-10-2005 13:23:39


La franja horaria es GMT +2. Ahora son las 20:19:08.


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