Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   TWinControl en Delphi 2007 (https://www.clubdelphi.com/foros/showthread.php?t=57194)

gluglu 07-06-2008 14:16:38

TWinControl en Delphi 2007
 
Hola a todos ! :)

Estoy intentando pasar código a Delphi 2007.

Al parecer antes (al menos en Delphi 2006) la clase TWinControl tenía publicadas entre otras las propiedades Color y Font.

Yo al menos lo utilizaba para cambiar el color de fondo y del texto al obtener foco en un control de edición.

Código Delphi [-]
(Sender as TWinControl).Color := clWindow;
(Sender as TWinControl).Font.Color := clMaroon;

Ahora ya en Delphi 2007 estas propiedades no están publicadas y no puedo acceder directamente a ellas. Ello me obliga a hacer el Cast para cada caso, sean po.ej. TLabel's, TEdit's, o cualquier otro Control.

Existe alguna manera de evitar esto, es decir, no tener que preguntar cada vez por el tipo de control que quiero manejar ?

Quisiera evitar esto precisamente :

Código Delphi [-]
if Sender is TLabel then begin
  (Sender as TLabel).Color := clWindow;
  (Sender as TLabel).Font.Color := clMaroon;
end;
 
if Sender is TEdit then begin
  (Sender as TEdit).Color := clWindow;
  (Sender as TEdit).Font.Color := clMaroon;
end;
 
if Sender is TDBEdit then begin
  (Sender as TDBEdit).Color := clWindow;
  (Sender as TDBEdit).Font.Color := clMaroon;
end;
 
if Sender is TCheckBox then begin
  (Sender as TCheckBox).Color := clWindow;
  (Sender as TCheckBox).Font.Color := clMaroon;
end;
 
....

Gracias por vuestra ayuda. Saludos ;)

Al González 07-06-2008 16:53:57

¡Hola Gluglú!

Tengo dudas sobre si en alguna versión de Delphi las propiedades Color y Font fueron declaradas como públicas o publicadas a nivel de la clase TWinControl. :confused:

Mirando la VCL de Delphi 7, en ésta la visibilidad de dichas propiedades en TWinControl es Protected (la misma visibilidad que hereda de TControl). Es decir, tampoco en Delphi 7 TWinControl hace públicas las propiedades Color y Font.

¿Será posible que en Delphi 2006 las hayan hecho públicas y luego en 2007 las hayan regresado a su visibilidad tradicional? Me cuesta trabajo creer que algo así ocurriera.

Un favor: preséntanos la declaración completa de las clases TControl y TWinControl que tienes en la unidad Controls.pas de tu Delphi 2006 para salir de dudas.

Gracias.

Al González. :)

P.D. Tampoco veo alguna diferencia relevante en Delphi 2007. Me deja pensando que tal vez en Delphi 2006 utilizabas el truco de "molde de acceso", pero empleando una nueva clase de mismo nombre que TWinControl...

gluglu 07-06-2008 22:04:49

Pues al parecer tienes toda la razón, amigo Al ! ;)

Por lo que he estado investigando es cierto que nunca han estado publicadas las propiedades Color y Font del TWinControl. Al menos en Win32. Yo utilizaba D2006 en su versión VCL.Net y ahí sí que me permitía utilizarlo de la manera que he espuesto. Al parecer en VCL.Net si es posible y en Win32 no. :(

Saludos

Al González 07-06-2008 22:14:14

Cita:

Empezado por gluglu (Mensaje 292115)
...Al parecer en VCL.Net si es posible y en Win32 no. :(...

¡PUF! Que interesante dato. Lo que daría por ver el contenido de la unidad Controls.pas versión D2006.NET. :)

gluglu 07-06-2008 23:17:43

1 Archivos Adjunto(s)
Pues aqui te adjunto Borland.Vcl.Controls.pas que entiendo es lo que andamos buscando.

Sinceramente, si me pongo a mirar la unidad, yo tampoco veo donde se publica la porpiedad 'Colors'. El hecho claro es que en mi programa en VCL.Net (D2006) lo he utilizado infinitas veces tal y como he descrito.

Espero me puedas indicar si encuentras algo más concreto, ya por llegar hasta el 'fondo' del asunto.

Saludos

Al González 08-06-2008 00:12:17

Cita:

Empezado por gluglu (Mensaje 292121)
...donde se publica la porpiedad 'Colors'. El hecho claro es que en mi programa en VCL.Net (D2006) lo he utilizado infinitas veces tal y como he descrito.

Espero me puedas indicar si encuentras algo más concreto, ya por llegar hasta el 'fondo' del asunto...

La propiedad, según se dijo al principio, es Color (en singular), y, efectivamente, en el archivo Borland.Vcl.Controls.pas (VCL.NET) de Delphi 2006 aparece junto con Font y algunas otras con visibilidad pública en su declaración inicial:

Código Delphi [-]
  TControl = class(TComponent, IControl)
  ...
  public
    ...
    property Color: TColor read FColor write SetColor stored IsColorStored default clWindow;
    ...
    property Font: TFont read GetFont write SetFont stored IsFontStored;

Esto devela el misterio.

Ahora, mirando en mi Delphi 2007, encuentro curiosas diferencias:

1. La unidad en la carpeta "...\source\dotNet\vcl" se llama nuevamente Controls.pas, como en Delphi 7. Mi pregunta aquí es ¿por qué se regresó al nombre original?

2. La visibilidad de ambas propiedades está condicionada a la existencia de un símbolo de compilación llamado "CLR", que me parece es algo relacionado a .NET. Supongo que en D2007 es la misma unidad .pas para Win32 y .NET, y el símbolo CLR significa que está compilando para .NET. Y es que sólo cuando es CLR (.NET) declara las propiedades en cuestión como públicas. Con esto se hace compatible hacia atrás tanto en Win32 como en .NET.

Pero lo que no me gustó nadita fue que cuando abrí la ayuda de Delphi 2007 para buscar qué es "CLR" (sin encontrar ahí el significado), me apareció un icono en la barra de tareas diciendo algo como "Visual Studio better". Y ahora dicho icono tiene un desagradable comentario emergente que dice "Visual Studio Customer Experience Improvement Program".

Lo que no me explico es cómo rayos llegó ese molesto accesorio a mi computadora...:confused:...y quién fue el desgraciado que lo programó para lanzarse cuando se abriera la ayuda de Delphi....:confused:

¡Caramba! Es que es como si abriéramos Firefox (aunque yo uso más IE) y de pronto apareciera un mensaje diciendo "¡Hey! Internet Explorer es mejor, mira, ven a conocerlo". :eek: :eek: :eek:

¿A alguien más le ha aparecido ese programa espía en pantalla? :confused: ¿Saben de dónde proviene esa cosa llamada "Visual Studio Customer Experience Improvement Program"? Quiero pensar que CodeGear no tuvo nada que ver, pero si así fuera significaría que Microsoft está recurriendo a algo de lo más bajo y vil para alejar a la gente de RAD Studio. :mad:

Saludos desencajados.

Al González.

gluglu 08-06-2008 00:57:57

:eek: A mi no me sale nada de eso en mi ayuda de RAD 2007 !

Lo cual me sorprende más todavía. Buscando por 'CLR', me salen varias entradas, ninguna de ellas relacionada en manera alguna con lo que describes, y cito aquí la que yo creo que más se acerca :

Cita:

The Microsoft .NET Framework and the Common Language Runtime (CLR) provide a runtime environment in which components written in .NET languages can seamlessly interact with each other. A compiler for a .NET language does not emit native machine code. Instead, the language is compiled to an intermediate, platform neutral form called Microsoft Intermediate Language (MSIL, or IL for short). The modules containing IL code are linked together to form an assembly. An assembly can be made up of multiple modules, or it can be a single file. In either case, an assembly is a self-describing entity; it holds information about the types it contains, the modules that comprise the assembly, and dependencies on other assemblies. An assembly is the basic unit of deployment in the .NET development environment, and the CLR manages loading, compilation to native machine code, and subsequent execution of that code. Applications that run entirely within the context of the CLR are called managed code.

One of the services provided by the CLR is the ability for managed code to call on unmanaged code, that is, code that was compiled to native machine language and which does not execute within the environment of the CLR. For example, through a service called Platform Invoke (often shortened to PInvoke), managed code can call on native Win32 APIs. This ability extends to using legacy COM objects from a managed .NET application. The ability to interoperate between managed code and COM objects also goes in the other direction, making it possible to expose .NET components to unmanaged applications. To the unmanaged application, loading and accessing the .NET component almost entirely the same as accessing any other COM object.

P.D. Me equivoqué al escribir antes, y claro, me refería a la propiedad 'Color' en singular.

Al González 08-06-2008 03:52:09

Cita:

Empezado por Al González (Mensaje 292124)
...lo que no me gustó nadita fue que cuando abrí la ayuda de Delphi 2007...me apareció un icono en la barra de tareas diciendo algo como "Help make Visual Studio better". Y ahora dicho icono tiene un desagradable comentario emergente que dice "Visual Studio Customer Experience Improvement Program"....significaría que Microsoft está recurriendo a algo de lo más bajo y vil para alejar a la gente de RAD Studio. :mad:...

Buscando en Google, encontré que se trata de algo programado a propósito en .NET 2.0. Incluso ya ha sido denunciado por otros colegas:

http://qc.codegear.com/wc/qcmain.aspx?d=43088

http://memyselfanddelphi.blogspot.co...1_archive.html

Que mal se ve Microsoft con jugarretas como esas. El mensaje se interpreta como "tenemos miedo de que uses el .NET que pudimos crear gracias a exingenieros de Borland, con entornos de desarrollo mejores que el nuestro".

¿A qué personaje de Redmond se le habrá ocurrido hacer que .NET mostrara ese mensaje en pantalla, aún sin tener Visual Studio instalado? ¿A caso pensaron que nadie se molestaría, que nadie interpretaría con un mínimo de inteligencia la sucia maniobra? ¿Y ese es el Visual Studio que dices que va muy bien, Ramiro? ¡Joder! Yo prefiero la dignidad, la calidad y el honor que siguen caracterizando a nuestro Delphi.

En la sombra de este mal trago hay un poco de alegría, porque el abusivo monopolio tropieza con la misma bota que usa para intentar aplastar lo bien hecho.

Un abrazo despertando conciencia y "haciendo mejor" al mundo entero.

Al González.


La franja horaria es GMT +2. Ahora son las 04:58:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi