Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-03-2018
Avatar de _Leo
_Leo _Leo is offline
Miembro
 
Registrado: ene 2017
Ubicación: Lanzarote (Islas Canarias)
Posts: 38
Poder: 0
_Leo Va camino a la fama
Lo malo de ES_RIGHT es que si por algún motivo se tiene que "re-crear" el TEdit se volverá a crear solo con los estilos que se le asignaron en la creación por tanto ignorara esto.

Seria fácil crear un componente derivado de TEdit con esta funcionalidad como tienen las versiones actuales de C++Builder si lo vas a usar mucho.

Con esta chapucilla puedes sustituir los edits que necesites sin crear un componente completo, no lo he probado mucho, así que podría explotar por algún lado ;-) Pero todo es probar.. la solución de ecfisa es más corta y quizás con ello ya te sirva, aunque no sé si tendría luego por algún lado alguna otra repercusión el usar BiDiMode que está pensado para idiomas que se escriben de derecha a izquierda como el árabe, por ejemplo.

Creamos una cabecera, y la llamamos por ejemplo: “EditR.h” con el siguiente contenido:
Código PHP:
#ifndef __EditR_H
#define __EditR_H

#include <memory>

class TEditR : public TEdit
{
    
virtual void __fastcall CreateParams(TCreateParamsParams) {
        
inherited::CreateParams(Params);
        
Params.Style Params.Style ES_RIGHT;
    }
public:
    
__fastcall TEditR(TComponentOwnerTEditSource) : TEdit(Owner) {
        
std::auto_ptr<TMemoryStreamms(new TMemoryStream);
        
Parent Source->Parent;
        
ms->WriteComponent(Source); // Salvamos las propiedades del TEdit
        
ms->Seek(0soFromBeginning);
        
delete Source// Eliminamos el TEdit original
        
ms->ReadComponent(this); // Recuperamos las propiedades en el TEditR
    
}

    static 
TEditR__fastcall Create(TEditSource) {
        return new 
TEditR(Source->OwnerSource);
    }
};

#endif 
Incluimos la cabecera en el Form que necesitemos y con cada Edit que queramos que se alinee a la derecha hacemos lo siguiente en el constructor por ejemplo:
Código PHP:
TEditR::Create(Edit1); 
Lo que hará es sustituir ese TEdit con el TEditR que aplica el estilo ES_RIGHT desde su creación, copia todas las propiedades del TEdit original, lo destruye y el nuevo ocupa su lugar, podemos seguir referenciándolo con el mismo nombre ya que se llama igual, y tampoco tenemos que preocuparnos de destruirlo ya que tendrá el mismo propietario que tenía el TEdit original y se destruirá como hubiese pasado originalmente con el TEdit.

Una prueba que podemos hacer para comprobar que la diferencia de hacerlo como dije en un principio y de esta manera es forzar a que se recree el Form usando:
Código PHP:
Form1->RecreateWnd(); 
Veremos que con la primera opción se pierde el ES_RIGHT y con la segunda se mantiene.

Si al final no explota por algún lado ;-) con muy pocos cambios se puede aprovechar para añadir otros estilos desde la creación.

Se podría hacer de otras maneras, pero yo creo que si lo usas mucho compensa crear un componente muy sencillo para ello..

Última edición por _Leo fecha: 01-03-2018 a las 12:42:45.
Responder Con Cita
  #2  
Antiguo 01-03-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Gracias por tu idea Leo. No es algo que use con demasiada frecuencia (de hecho en toda la aplciación debe usarse media docena de veces); como en muchas otras dudas que me has resuelto es más un tema de estética. La tendré en cuenta y no te quepa duda que la probaré.
Responder Con Cita
  #3  
Antiguo 01-03-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si como mencionas es de uso eventual, tal vez la solución mas simple sea usar en su reemplazo un componente TMemo ajustando su propiedad Alignment, v. gr.:
Código PHP:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  
Memo1->Height      21;
  
Memo1->Width       120;
  
Memo1->Alignment   taRightJustify;
  
Memo1->WantReturns false;
  
Memo1->Text        "3.141592654"// un ej.

Muestra:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 01-03-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Si como mencionas es de uso eventual, tal vez la solución mas simple sea usar en su reemplazo un componente TMemo ajustando su propiedad Alignment, v. gr.:
Pues mira, no se me había ocurrido y es una excelente idea.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Alinear texto a la derecha Tedit vtdeleon Trucos 0 08-06-2006 04:27:34
Alinear un TEdit a la derecha Gustavo Gowdak OOP 2 04-05-2006 22:04:57
Pasar el valor de un TEdit dentro de un StringGrid a otro TEdit que está fuera atirado Varios 4 11-09-2004 19:13:48
Alineación de controles roman OOP 9 24-08-2004 00:00:57
Alineación del contenido de un TEdit c748a OOP 4 22-05-2004 10:35:14


La franja horaria es GMT +2. Ahora son las 20:34:54.


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
Copyright 1996-2007 Club Delphi