Saber si un control tiene asignado OnEnter
Hola compis.
He hecho la tipica funcion para resaltar los controles de entrada (TEdit, TmaskEdit, etc). Todo funciona bién. Este es el código El tema es que algunos controles ya tienen las funciones onenter y onexit activadas, asi que las sustituyo. Lo que no acierto es ha averiguar si el control ya tiene asignados los enventos para no incluirlos en esta funcion, y que sean esa funciones las que gestionen su entrada y salida algo si como Si no, despues de activar la funcion tengo re reescribir el codigo a cada control que tenga un onenter o un onextit FechaVencimiento.onExit := FechaVencimientoExit A ver si sabeis como hacerlo (y me lo contais, :).) Thanks |
Hola.
Proba de este modo:
Saludos. |
Hola,
No sé si me estoy perdiendo algo, pero, ¿qué pasa si se usa la función "Assigned"? Tal que así:
|
Cita:
// Saludos |
Haciendo una combinación del código de ecfisa y Dec:
La línea "Self.Components[i].inheritsFrom(TCustomEdit)" es más adecuada a tu caso (tienes varios clases de editores). Además, sino me equivoco funcionará con TMemo's. Saludos. |
Bueno, bueno...sin pelearse :D
Muchas gracias a todos, lo mas "sencillo" y con menos código es el metodo de dec. Ya solo falta que se pueda acceder a la clase del formulario (self) y asi esa rutina se puede incorporar a biblioteca y no tener que ponerla en cada formulario. Es decir sustituir TFormProveedorFactura por Self. ¿que, sabeis hacerlo?:p
|
Hola.
Del modo que te sugerí, no tendrías ningún problema. Ejemplo:
Y detectará si el método cuyo nombre enviamos está activo en cualquier componente. Saludos. |
Gracias ecfisa
Si que detecta el metodo, sin hacer referencia al formulario, lo que falta es que la asignacion tambien sea anonima
Todavia hay que hacer referencia a "TFormProveedorFactura" para asignarle el nuevo evento, ¿como podriamos hacerlo con Self o como parametro? Thanks |
Cita:
Si lo que quieres es asignar ControlExit al componente, creo que te sobraría con
Si el problema es que es el bucle el que hace:
Siempre puedes ponerle al procedimiento un "AOwner: TComopnent" y recorrer ese. Es decir:
|
Cita:
Fijate si te sirve de este modo:
Ejemplo de uso:
Saludos. |
Gracias, gracias ;)
Al final es una combinacion de los metodos de ecfisa y y ozswizzard. En esta procedure se produce el error [DCC Error] UnitProveedorFactura.pas(1099): E2362 Cannot access protected symbol TWinControl.OnEnter [DCC Error] UnitProveedorFactura.pas(1099): E2035 Not enough actual parameters en las lineas Obj.OnEnter := ControlEnter; Obj.OnExit := ControlExit;
asi que de momento el mejor resultado es:D
Asi que este pequeño codigo se puede trasportar al resto de formularios y con solo cambiar el formulario propietario ya esta y no se toca mas código. Las rutinas para comprobar metodos y asignarlos ya estan en la bliblioteca general de funciones (Gracias de nuevo).;) Digo esto por que si lo saco de type TForm, se queja de la siguiente linea [DCC Error] UnitProveedorFactura.pas(1099): E2009 Incompatible types: 'method pointer and regular procedure' en AssignMethod(AOwner.Components[i], 'OnEnter', ControlEnter); osea, la buena seria esta para que no hubiera que tocar nada de codigo, pero no se resolver el problema 'method pointer and regular procedure'
Saludos |
Perdona que siga, pero me he dado cuenta que se puede hacer mas sencillo si pertenecen a la clase del formulario
Ya solo falta sacarlo del formulario y que este (Self) sea un parametro:) Sigo, a ver si lo consigo |
Es que yo lo hice para que lo pusieras en una unidad externa al formulario, así sólo tienes que poner en el uses de cada formulario (o hacer un formulario padre del cual hereden todos) y ya está.
Pensé, además, que era lógico que para llamar a "ControlesResaltados" había que pasarle el formulario, :) Bueno, me alegro de que te haya funcionado. |
Hola ozaWizzard.
pero no te da error Obj.OnEnter := ControlEnter; [DCC Error] Metodos.pas(47): E2362 Cannot access protected symbol TWinControl.OnEnter Uso Delphi 10,si no la verdad que lo ideal es que sea una unidad y la llamemos en el uses. ¿Que version usas? |
La verdad es que ni lo probé, lo puse aquí directamente
|
Pero vamos, que lo del "as Tipo" lo puedes hacer a un nivel que te permita modificarle el OnEnter o el OnExit, aunque si así funciona, pues mejor :)
Yo es que asigno el método OnExit a unos TEdit y unos TMemo, por lo tanto, en lugar de TWinControl usaba TCustomEdit y si funciona. |
Yo he probado con TLabeledEdit y tambien me dice
[DCC Error] Metodos.pas(70): E2009 Incompatible types: 'method pointer and regular procedure' Asi que me quedo como estoy, ya le hemos dedicado unas horas y tampoco es que se nos vaya la vida en ello. Muchas Gracias Compi. Una cervecitas, pago Yo.:cool: |
No, sí está claro, en la pregunta del principio lo pone, saber si el componente tiene ese propiedad, yo he tirado por la calle de en medio...
Acepto la cerveza :D:cool: |
La franja horaria es GMT +2. Ahora son las 16:38:56. |
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