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 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
preguntas sobre DBEDITS

Buenas noches..
tengo una consulta

tengo varios dbedits, los cuales se activan o desactivan de acuerdo a algunas condiciones que se originan al salir del primer dbedit

Código Delphi [-]
  edtMaterial.Enabled := qryUbicarCuentainv.AsString = 'S';
  edtActivo.Enabled := qryUbicarCuentaACT.AsString = 'S';
  edtArea.Enabled := qryUbicarCuentaArea.AsString = 'S';
  edtCantidad.Enabled := qryUbicarCuentainv.AsString = 'S';
  edtCCosto.Enabled := qryUbicarCuentaCCosto.AsString = 'S';
  edtAnexo.Enabled := qryUbicarCuentaAnexo.AsString = 'S';
  edtRuc.Enabled := qryUbicarCuentainv.AsString = 'S';

pero al salir del primer dbedit.. el foco como que... se pierde el cursor desaparece y no se en que campo estoy hasta que escribo algo

no se si me deje entender
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #2  
Antiguo 03-05-2011
urixiv urixiv is offline
Miembro
 
Registrado: sep 2006
Posts: 23
Poder: 0
urixiv Va por buen camino
No sé si con esto te ayudo o no, pero por lo que entiendo, habilitas /deshabilitas unos edits en función de unas condiciones, y luego no sabes donde esta el foco, pero tú sí que sabes donde lo quieres tener verdad?

En tal caso fuerza tu el foco, porque el al cambiar el enabled supongo que pierde el taborder.

para forzar el foco es
Código Delphi [-]
miEdit.setFocus;

Bueno, si no es esto a lo que te referías perdona!!!
Responder Con Cita
  #3  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Gracias por la respuesta...
si se que puedo activar el foco con setfocus

hago la instruccion pero al parecer delphi no le esta haciendo caso
voy a seguir investigando
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #4  
Antiguo 03-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En algunos hilos se ha hablado de un tema similar, por lo visto hay ocasiones que no se sabe el motivo, pero que ocurre eso, que no se ve el cursor, aunque tenga el foco, si escribes entonces aparece.
Los comentarios de distintos compañeros fueron similares y no hubo forma de encontrar un patrón que diera alguna pista, ocurría con distintas configuraciones, versiones varias de delphi, etc.
A mí mismo me ocurre con una ventana (un form) del programa que estoy haciendo ahora, sin embargo no me ocurre con ninguna de las otras ventanas, siendo todas heredadas de una misma 'form plantilla'. La he dejado por imposible y he pensado tan sólo en cambiarle de color al entrar para que el usuario sepa que está ahí el foco, aunque eso implicaría cambiarlo en todo el programa, y no es algo que me apetezca hacer.
Responder Con Cita
  #5  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mmm mis conocimientos no estan tan avanzados
pero si alguien se animara a hacer un componente Edit o TDBedit

en el cual cuando se entre se coloque de un color y cuando se salga se coloque del color original... seria estupendo

mmmm creo que mirare temas sobre creacion de componentes
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #6  
Antiguo 03-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bueno, en principio es sólo poner en el 'onEnter' algo así como 'Color:=clBlue' y en el 'onExit' volver a poner el color que tenía al entrar.
Responder Con Cita
  #7  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
en Visual Fox uno podia crear una Clase que se derivaba de un componente se le agregaban propiedades y se podia usar dentro de los formularios

con esto conseguia hacer por ejemplo edits con mascaras

en delphi hay algo parecido?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #8  
Antiguo 03-05-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Realiza una búsqueda al respecto ..... seguro que encuentras miles de mensajes al respecto en los foros
__________________
Piensa siempre en positivo !
Responder Con Cita
  #9  
Antiguo 03-05-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 oscarac.

Cuando la propiedad Enabled de un control esta en False el control ignora el mouse y el teclado. Al salir del DBEdit, se envía el Foco al próximo control determinado por TabOrder, sin importar que el estado de este sea Disabled. Si el próximo control a la salida del DBEdit tiene su propiedad Enabled a
True no se produce ese efecto.

Una solución que se me ocurre, es utilizar este código para deshabilitar los DBEdits:
Código Delphi [-]
function TForm1.ControlesOff: Boolean;
begin
  edtMaterial.Enabled := qryUbicarCuentainv.AsString = 'S';
  edtActivo.Enabled := qryUbicarCuentaACT.AsString = 'S';
  edtArea.Enabled := qryUbicarCuentaArea.AsString = 'S';
  edtCantidad.Enabled := qryUbicarCuentainv.AsString = 'S';
  edtCCosto.Enabled := qryUbicarCuentaCCosto.AsString = 'S';
  edtAnexo.Enabled := qryUbicarCuentaAnexo.AsString = 'S';
  edtRuc.Enabled := qryUbicarCuentainv.AsString = 'S';
  Result:= edtMaterial.Enabled;
end;

Ignoro cuando realizas las consultas y activas/desactivas los DBEdits, pero supongamos que lo haces en el evento OnExit del primer DBEdit
que adjuntaste:
Código Delphi [-]
procedure TForm1.edtMaterialExit(Sender: TObject);
begin
  // Ejecutar las consultas
  if ControlesOff then 
  begin
    edtMaterial.Enabled:= True; // habilitar
    edtMaterial.SetFocus;       // darle el foco nuevamente (o a otro control.)
  end;
end;
Espero que te sirva o al menos te aporte alguna una idea.


Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 03-05-2011 a las 18:34:02.
Responder Con Cita
  #10  
Antiguo 03-05-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Oscara en el Ftp del club puedes encontrar un componente que cree hace meses, se llama ScreenColorcenter, eliges el color para cuando tenga el foco, lo sueltas en el form principal, en muy importante que lo actives al crearse el form y lo desactives al cerrar el form, ya que lo que hace es actuar sobre todos lo programas activos, cambiando el color al recibir el foco de varios componentes, sin tener que poner código, alguno.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #11  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
explico un poco mas lo que hago...

efectivamente tengo un primer dbedit en el cual solicito una cuenta contable, que de acuerdo a las caracteristicas de la cuenta, se activaran / desactivaran otros dbedits
ya tengo un procedimiento que me ubica la cuenta y es algo como esto..

Código Delphi [-]
procedure TfrmingresoComprobantesVariosd.edtCuentaExit(Sender: TObject);
Var _Cuenta : String;
begin
_Cuenta := edtCuenta.Text;
    if not VerificarCuenta (_Cuenta, Derecha(dmGlobal.g_nivelCuenta,1)) then
      begin
        frmCatalogoPlanContable := TfrmCatalogoPlanContable.Create(Self);
        frmCatalogoPlanContable.FormStyle := fsNormal;
        frmCatalogoPlanContable.Visible := False;
        frmCatalogoPlanContable.t_para := True;
        frmCatalogoPlanContable.ShowModal;
      end;
    edtCuenta.Text := dmGlobal.vResultCuenta;
    frmIngresoComprobantesVarios.tVoucherCuenta.Value := dmGlobal.vResultCuenta;
    lblCuenta.Caption := dmGlobal.vResultCuentaDescripcion;
    HabilitarEdits;

    If edtCuenta.Text = '' then
        edtCuenta.SetFocus;

lo curioso es que he puesto que cuando entre al dbedit.. me cambie de color pasar saber que es lo que hace... y al salir del primer edit el flujo desaparece presiono ENTER de nuevo y nuevamente aparece en el primer dbedit despues de eso el flujo sigue normal

si yo supiera que control se debe activar seria mas facil, pero eso depende de lo que mande la cuenta contable, ejemplo :

Campos existente
Centro de costos
Area
Presupuestos
Obras
Recursos
Codigo de Anexo
Flujo de Gasto

si selecciono la cuenta 63 se activara
centro de costos
area
presupuestos

si selecciono la cuenta 42 se activara
codigo de proveedor
area

si selecciono la cuenta 10 se activara
Flujo de gastos


espero que ahora se me entienda mejor
gracias
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #12  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
cosa curiosa

siguiendo con este tema
modifique el programa de tal manera que solo pase de un campo a otro y cuando pasa del primer edit al segundo el cursor desaparece (ya me esta volviendo loco)
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #13  
Antiguo 03-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
cosa rarisima

Utilice el componente que muy amablemente me menciono José Luis Garcí para tener una idea de donde es que va el foco, el asunto es que cuando activo/ desactivo los edits, luego de solicitar la cuenta contable, el foco "desaparece", es decir el edit no se pinta(lo que me indica donde esta actualmente el foco)

entonces al presionar enter... el foco regresa al primer edit y de ahi ya todo funciona bien... cosa rara no?
a alguien le sucede o sucedio algo parecido?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #14  
Antiguo 04-05-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Hola oscara, acabo de probar el componente con un par de edit y grid y no me hace lo que me comentabas en el mensaje privado, no veo que afecte al grid, de todas maneras puedes cambiar el código de:

Código Delphi [-]
procedure TCenterScreenColor.AdmitComponent(Component:TWinControl);
begin
     if (Component is TCustomForm) then
     if Component.ClassType=Tform then
     begin
         if FForm=true then VarPrivPassComponent:=True
                       else VarPrivPassComponent:=False;
     end else
     begin
        if ((Component is TCustomEdit) or (Component is TDateTimePicker))then
        begin
           if FEdit_DBEdit=true then VarPrivPassComponent:=True
           else VarPrivPassComponent:=False;
        end else
        begin
           if (Component is TCustomMemo) then
           begin
              if FMEmo_DbMEmo=true then VarPrivPassComponent:=True
                                   else VarPrivPassComponent:=False;
           end else
           begin
              if (Component is TCustomComboBox) then
              begin
                  if FComboBox_DBCombobox=true then VarPrivPassComponent:=True
                                               else VarPrivPassComponent:=False;
              end else
              begin
                 if FOther=true then VarPrivPassComponent:=True
                                else VarPrivPassComponent:=False;
              end;
           end;
        end;
     end;
end;

por

Código Delphi [-]
procedure TCenterScreenColor.AdmitComponent(Component:TWinControl);
begin
   if not (Component is TCustomDBGrid) then
   begin
     if (Component is TCustomForm) then
     if Component.ClassType=Tform then
     begin
         if FForm=true then VarPrivPassComponent:=True
                       else VarPrivPassComponent:=False;
     end else
     begin
        if ((Component is TCustomEdit) or (Component is TDateTimePicker))then
        begin
           if FEdit_DBEdit=true then VarPrivPassComponent:=True
           else VarPrivPassComponent:=False;
        end else
        begin
           if (Component is TCustomMemo) then
           begin
              if FMEmo_DbMEmo=true then VarPrivPassComponent:=True
                                   else VarPrivPassComponent:=False;
           end else
           begin
              if (Component is TCustomComboBox) then
              begin
                  if FComboBox_DBCombobox=true then VarPrivPassComponent:=True
                                               else VarPrivPassComponent:=False;
              end else
              begin
                 if FOther=true then VarPrivPassComponent:=True
                                else VarPrivPassComponent:=False;
              end;
           end;
        end;
     end;
  end;
end;

Lo que haría es si el componente es un Dbgrid (LLamo al ancestro de los Dbgrid, para que admita la mayor parte de ellos), no sigue y si es otro componente si.

Me imagino ya que no lo he probado que deberas incluir la unidad Dbgrids.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #15  
Antiguo 04-05-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Por cierto Oscara, ten en cuenta que el componente va afectar a toda la aplicación y otras que estén activas en Windows, mientras este activo el componente, por eso es fundamental, activarlo al iniciarse la aplicación y desactivarlo una vez termines, ya que si no lo haces quedara activo en otras aplicaciones de Windows.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #16  
Antiguo 04-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mientras intentaba resolver este problema y para saber qué control tiene el componente, lo que hice fue poner un ttimer y un tlabel, cada segundo escribía en el caption del tblabel el nombre del control con el foco, no recuerdo de memoria, pero creo que era algo así como:
Código Delphi [-]
label1.caption := application.activecontrol.name
De esa forma podía saber que aunque no se viera el cursor, el foco realmente estaba allí... y así maldecir con seguridad a delphi/¿windows? por no mostrar el cursor... hasta que pulsara alguna tecla.
Responder Con Cita
  #17  
Antiguo 29-10-2015
Avatar de Espartaco
[Espartaco] Espartaco is offline
Miembro Premium
 
Registrado: oct 2005
Posts: 107
Poder: 19
Espartaco Va por buen camino
Hola ya se que hace muchos años de este hilo pero buscando solucion a un problema me lo he encontrado, no se si es demasiado tarde.
He descubierto que si muestro un application.messagebox, al salir del mensaje me hace lo que decis, en cambio si lo hago con un showmessage no lo hace.
No se donde esta el problema pero he descubierto esto.
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
Preguntas sobre Codigos de Barras? jamiguel77 Impresión 14 05-06-2012 22:19:50
Preguntas sobre TChart Keating Gráficos 5 09-11-2010 19:50:54
preguntas sobre cursos anubis Debates 1 12-12-2009 13:18:06
Dos preguntas sobre el DBLookUpComboBox el_barto Conexión con bases de datos 2 23-06-2005 16:06:09
Más preguntas sobre servicios vittorio API de Windows 1 27-12-2003 01:57:12


La franja horaria es GMT +2. Ahora son las 01:56:13.


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