PDA

Ver la Versión Completa : Me Da este error y no se como quitarlo


serhasae
05-07-2006, 17:32:03
Hace poco puse un metodo para que los formularios queden en la barra de tareas, sacado de trucomania y desde hace poco me da el siguiente hint, y el formulario principal cuando le doy a un combox se oculta, como si hubiera echo un click de minimizar y luego se vuelve a maximizar el formulario.

Esta es la llamda que tengo

procedure CreateParams(var Params: TCreateParams); override;


mas abajo tengo el formulario con el metodo:

procedure TFPass.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopWindow;
end;


Y en el hint me da el siguiente error desde entonces no va bien ...

verriding virtual method 'TFPass.CreateParams' has lower visibility(private) than base class 'TForm'(protected)

kuan-yiu
05-07-2006, 18:12:28
Me encontré una vez con un error similar, y había sido un despiste al declarar la función en la sección inadecuada, ¿dónde tienes la declaración del procedimiento?

Al González
05-07-2006, 19:50:49
¡Hola a todos!

Ese mensaje de compilación no es un error, sino un comentario (hint). Una advertencia de menor importancia que te indica que el método redefinido CreateParams fue declarado en una sección de menor nivel de acceso (Private) de TFPass, que el método CreateParams heredado de la clase padre TForm (el cual está declarado en la sección protegida —Protected—).

Cuando se redefine un método o propiedad no es posible forzarlo a que pierda visibilidad respecto al nivel de acceso que tiene en la clase padre. Es decir, si declaras un miembro de clase como protegido, redeclararlo en una clase descendiente como privado no lo vuelve privado (sigue siendo protegido).

Lo correcto es incluir una sección Protected en la clase TFPass, con la redefinición del método en cuestión.

Un abrazo público.

Al González. :)

serhasae
07-07-2006, 11:32:23
Vale ya he quitado el aviso de HINT cambiando poniendolo en la zona privada como protegido. Pero sigue haciendo cosas raras, hago click en un combox y el Form donde esta desaparece, quito el metodo Create Params del form y ya funciona correctamente el combox es de las TMS, antes me funcionaba perfectamente puede ser que el compilador ahora se me ralle.
Hago click en el combox de tipo dato, aparece un calendario pero desaparece el form, selecciono la fecha y ya vuelve a aparecer, algo pasa con el Create Params y mi manera de implementarlo.


private
protected
procedure CreateParams(var Params: TCreateParams); override;

procedure TFFicha.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopWindow;
end;


Alguien tiene alguna sugerencia porque con el Create Params se ralla la visualización. Gracias.

Lepe
07-07-2006, 13:10:14
Lo que estas haciendo es modificando la forma de crear la ventana, quizás lo que necesitas es modificar la creación del ComboBox o de la lista desplegable de ese combo.

No conozco los TMS, pero casi seguro que estas usando clases interpuestas ¿no?

Convendría que pusieras el código completo de la declaración del Form y del Combo.

Saludos

serhasae
07-07-2006, 13:24:26
A ver lepe yo con el combox no hago nada, es un combox de tipo fecha que añadi de las Tms, entonces queria que mi formulario se minimizara en la barra de tareas, añadi lo de Create Params a cada formulario y nada todo iba bien, ahora añadi simplemente un nuevo campo y me pasa lo siguiente en ese tipo de datos. Se me oculta el formulario cuando abro el combox y una vez selecciono la fecha, el formulario vuelve a ser visible. Las unicas declaraciones echas son esas que ves. Alguna idea al respecto?. No incluyo el codigo porque lo unico importante es eso, he aislado el error, pero no se como arreglarlo.

La declaracion del combox es

EFI: TPlannerDatePicker;

Declaracion del Formulario:

TFFicha = class(TForm)

Saludos y gracias Lepe.

dec
07-07-2006, 14:04:16
Hola,


Vale ya he quitado el aviso de HINT cambiando poniendolo en la zona privada como protegido.

No; lo que has hecho es situar la declaración del procedimiento dentro del bloque "protected". No es que este esté dentro del bloque "private": son bloques distintos y que no se "anidan".

Por lo demás, no sé si tendrá que ver o no, pero, esto es lo que se encuentra en la ayuda de Delphi acerca del método "CreateParams" en el contexto de la clase "TCustomForm":


The CreateWnd method calls CreateParams to initialize the parameters it passes to CreateWindowHandle. TCustomForm overrides CreateParams to customize the way the form creates its Windows representation after calling the inherited method. You should never need to override this method in the context of a form class.

The fields of the Params parameter become the parameters to a call to the CreateWindowEx OS function.

Sé que no te digo mucho con esto, pero, tal vez alguien que entienda más pueda referir porqué en la propia ayuda de Delphi se indica que nunca sería necesario sobreescribir dicho método en el contexto de una clase "TForm".

serhasae
07-07-2006, 14:12:22
Si esta claro que Private y Protected no estan anidados, pero sino redefines el medoto CreateParams con el override, entonces no se minimizaria el formulario en la barra de tareas, esto lo saque de un Post de Roman, lo que no entiendo es porque se ralla la aplicacion, a ver si MarcosZorrilla, Dephiar o Roman me pueden explicar que demonios esa pasando. Gracias dec por tus observaciones.

serhasae
09-07-2006, 10:48:10
Estoy mirando y no veo nada incorrecto en la declaracion. Podria declarar el combox calendario en otro lado para evitar ese comportamiento raro. A ver si alguien me echa un cable. Saludos.

serhasae
15-07-2006, 16:17:29
Joo nadie me puede dar alguna idea, voy perdido y no se que ha pasado. Gracias.

serhasae
15-07-2006, 16:36:41
Mala implementacion de Create Params lo vi en un post que discutia Roman con otro usuario y decian que era mejor añadir una segunda linea al create params, la quite y ya quite el error.

Debe de quedar asi el create params

inherited;
Params.ExStyle := WS_EX_APPWINDOW;