 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 26 Dic, 2013 7:06 pm Asunto: Duda tonta con herencia |
|
|
Estoy usando un componente TDateTimePicker para que el usuario indique una fecha. Como puede sre que el rango de fechas no alcance la fecha del sistema me gustaría, por aquello de la elegancia, eliminar el circulo de la fecha del día de forma que no se muestre. He estado viendo la ayuda de este componente y, al menos en teoría, debería poder hacer esto:
| Código: | DateTimePicker1->ShowTodayCircle = false |
ya que este elemento desciende de TCommonCalendar. Sin embargo si pongo esa línea de código al compilar me da este error:
| Cita: | | [C++ Error] LisPer.cpp(28): E2247 'TCommonCalendar::ShowTodayCircle' is not accessible |
¿Cómo puedo acceder a las propiedades del componente antecesor del que quiero usar? _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Vie 27 Dic, 2013 8:08 pm Asunto: |
|
|
El problema que expones no se soluciona como crees. Puedes derivar una clase y saltarte la protección pero no quitaras el círculo que quieres.
TDateTimePicker no es un TCalendar hasta que no lo desplegamos. La solución puede hacerse desde la API de Windows asignando al evento OnDropDown el siguiente código:
| Código: |
void __fastcall TForm1::DateTimePicker1DropDown(TObject *Sender)
{
// Encontramos el HANDLE del calendario
HANDLE hCalendar = (HANDLE)SendMessage(DateTimePicker1->Handle, DTM_GETMONTHCAL, 0, 0);
if(hCalendar > 0)
SetWindowLong(hCalendar, GWL_STYLE, GetWindowLong(hCalendar, GWL_STYLE)|MCS_NOTODAYCIRCLE);
}
|
Saludos. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Sab 28 Dic, 2013 10:10 am Asunto: |
|
|
Muchas gracias. Lo he dejado así:
| Código: | HANDLE hCalendar = (HANDLE)SendMessage(Calendario->Handle, DTM_GETMONTHCAL, 0, 0);
if (hCalendar > 0)
{
SetWindowLong(hCalendar, GWL_STYLE, GetWindowLong(hCalendar, GWL_STYLE)|MCS_NOTODAY);
SetWindowLong(hCalendar, GWL_STYLE, GetWindowLong(hCalendar, GWL_STYLE)|MCS_NOTODAYCIRCLE);
} |
y así no se muestra ni el círculo ni el mensaje de Hoy... _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Sab 28 Dic, 2013 11:46 am Asunto: |
|
|
puedes ahorrar código así:
| Código: |
SetWindowLong(hCalendar, GWL_STYLE, GetWindowLong(hCalendar, GWL_STYLE)|MCS_NOTODAY|MCS_NOTODAYCIRCLE);
|
Saludos. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|