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

Registrado: 16 Nov 2005Mensajes: 154
|
Publicado: Dom 22 Jul, 2012 1:31 pm Asunto: Centrar Caption en Formulario |
|
|
Necesito centrar el texto caption del formulario
He estado buscando y no he dado con nada
Agrdezco ideas |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
philips Capt

Registrado: 16 Nov 2005Mensajes: 154
|
Publicado: Lun 30 Jul, 2012 10:17 am Asunto: |
|
|
Gracias Angel por responderme
Lo que necesito es centrar el texto del Form1->Caption
Es decir el texto que aparece en la parte superior del formulario
Saludos |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 30 Jul, 2012 11:56 am Asunto: |
|
|
| philips escribió: | Gracias Angel por responderme
Lo que necesito es centrar el texto del Form1->Caption
Es decir el texto que aparece en la parte superior del formulario
Saludos |
Yo te aconsejaría que pusieras un TLabel, un TStaticText o un TPanel con la propiedad Align a alTop y la propiedad Alignment a taCenter. Si usas un TPanel puede parecer que es del propio formulario si además pones BevelInner y BevelOuter a bvNone.
 _________________ 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 03 Ago, 2012 4:10 pm Asunto: |
|
|
Quizás te sirva este ejemplo escribiendo la respuesta al mensaje WM_NCPAINT (pintar el frame de una ventana)
| Código: |
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall WMNCPaint(TMessage &Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_NCPAINT, TMessage, WMNCPaint)
END_MESSAGE_MAP(TForm)
};
|
| Código: |
void __fastcall TForm1::WMNCPaint(TMessage &Msg)
{
static String _Caption = Caption;
TForm::Dispatch(&Msg);
TCanvas *Canvas = new TCanvas();
Canvas->Handle = GetWindowDC(Handle);
SetWindowText(Handle, "");
NONCLIENTMETRICS NCM;
NCM.cbSize = sizeof(NONCLIENTMETRICS);
if(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &NCM, 0))
Canvas->Font->Handle = CreateFontIndirect(&NCM.lfCaptionFont);
TRect WRect;
TRect CRect;
GetWindowRect(Handle, &WRect);
CRect.Left = GetSystemMetrics(SM_CXSIZE) + GetSystemMetrics(SM_CXBORDER) + GetSystemMetrics(SM_CXFRAME);
CRect.Top = GetSystemMetrics(SM_CYFRAME)+ 3;
CRect.Right = WRect.Right - WRect.Left - (CRect.Left * 3) - GetSystemMetrics(SM_CXFRAME) -1;
CRect.Bottom = CRect.Top + GetSystemMetrics(SM_CXSIZE) - 1;
SetBkMode(Canvas->Handle, TRANSPARENT);
Canvas->Font->Color = 0;
DrawText(Canvas->Handle, _Caption.c_str(), -1, &CRect, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
CRect.Top--;
CRect.Right--;
if(Active) Canvas->Font->Color = clCaptionText;
else Canvas->Font->Color = clInactiveCaptionText;
DrawText(Canvas->Handle, _Caption.c_str(), -1, &CRect, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
ReleaseDC(Handle, Canvas->Handle);
delete Canvas;
}
|
Saludos. |
|
| Volver arriba |
|
 |
philips Capt

Registrado: 16 Nov 2005Mensajes: 154
|
Publicado: Sab 04 Ago, 2012 8:29 pm Asunto: |
|
|
Gracias a los dos por vuestras respuestas
escafandra, he probado tu codigo pero no me centra el caption del formulario
Como solución temporal he hecho lo siguiente
AnsiString titulo="Caption de prueba";
int i=(Form1->Width-titulo.Length())/10;
int j;
for (j=0;jCaption=titulo;
Se que es una chapucilla, pero a falta de una solución como es debido me saca del paso |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Dom 05 Ago, 2012 1:00 am Asunto: |
|
|
| philips escribió: | | ...escafandra, he probado tu codigo pero no me centra el caption del formulario... |
Pues no debes haberlo probado bien. A mi me mo centra perfectamente.
Fíjate bien en todo el código incluida la definición completa de la clase, no solo en la función.
Saludos. |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Dom 05 Ago, 2012 8:46 pm Asunto: |
|
|
Añado una mejora al código, la respuesta al mensaje WM_ACTIVATE:
| Código: |
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall WMActivate(TMessage &Msg);
void __fastcall WMNCPaint(TMessage &Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_NCPAINT, TMessage, WMNCPaint)
MESSAGE_HANDLER(WM_ACTIVATE, TMessage, WMActivate)
END_MESSAGE_MAP(TForm)
};
|
| Código: |
void __fastcall TForm1::WMActivate(TMessage &Msg)
{
TForm::Dispatch(&Msg);
Perform(WM_NCPAINT, 0, 0);
}
void __fastcall TForm1::WMNCPaint(TMessage &Msg)
{
static String _Caption = Caption;
TForm::Dispatch(&Msg);
TCanvas *Canvas = new TCanvas();
Canvas->Handle = GetWindowDC(Handle);
SetWindowText(Handle, "");
NONCLIENTMETRICS NCM;
NCM.cbSize = sizeof(NONCLIENTMETRICS);
if(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &NCM, 0))
Canvas->Font->Handle = CreateFontIndirect(&NCM.lfCaptionFont);
TRect WRect;
TRect CRect;
GetWindowRect(Handle, &WRect);
CRect.Left = GetSystemMetrics(SM_CXSIZE) + GetSystemMetrics(SM_CXBORDER) + GetSystemMetrics(SM_CXFRAME);
CRect.Top = GetSystemMetrics(SM_CYFRAME)+ 3;
CRect.Right = WRect.Right - WRect.Left - (CRect.Left * 3) - GetSystemMetrics(SM_CXFRAME) -1;
CRect.Bottom = CRect.Top + GetSystemMetrics(SM_CXSIZE) - 1;
SetBkMode(Canvas->Handle, TRANSPARENT);
Canvas->Font->Color = 0;
DrawText(Canvas->Handle, _Caption.c_str(), -1, &CRect, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
CRect.Top--;
CRect.Right--;
if(Active) Canvas->Font->Color = clCaptionText;
else Canvas->Font->Color = clInactiveCaptionText;
DrawText(Canvas->Handle, _Caption.c_str(), -1, &CRect, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
ReleaseDC(Handle, Canvas->Handle);
delete Canvas;
}
|
Saludos. |
|
| 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.
|