Ver Mensaje Individual
  #17  
Antiguo 27-05-2004
Sonic Sonic is offline
Miembro
 
Registrado: may 2004
Posts: 40
Reputación: 0
Sonic Va por buen camino
Muchas gracias por explicarme cómo pegar código.

Lo siento pero no consigo que el código funcione.
A continuación pego lo que he escrito:

Código:
 
 // ValidCtrCheck is used to assure that the components created do not have
 // any pure virtual functions.
 //
 
 static inline void ValidCtrCheck(TSRichEdit *)
 {
 		new TSRichEdit(NULL);
 }
 //---------------------------------------------------------------------------
 __fastcall TSRichEdit::TSRichEdit(TComponent* Owner)
 		: TRichEdit(Owner)
 {
 }
 //---------------------------------------------------------------------------
 namespace Srichedit
 {
 		void __fastcall PACKAGE Register()
 		{
 				 TComponentClass classes[1] = {__classid(TSRichEdit)};
 				 RegisterComponents("Samples", classes, 0);
 		}
 }
 //---------------------------------------------------------------------------
 void __fastcall TSRichEdit::SelectionChange (TObject *Sender)
 {
   ShowMessage("Hola Quillo 1aaaaa");
   inherited SelectionChange(TObject *Sender);
   //TCustomRichEdit::SelectionChange();  // Esto tampoco funciona
 }
Defino la función SelectionChange y recibo el warning de que estoy tapando a la virtual de TCustomRichEdit.

Pero cuando ejecuto el código y ocurre un evento OnSelectionChange solo se ejecuta el código de usuario y no el interno de mi componente.

Tras ver ese post de pista que ofreciste, se me ocurrio sencillamente suplantar al WndProc y capturar el mensaje EN_SELCHANGE, y tras esto ejecutar mi código y luego llamar al WndProc del TWinControl. Esto último ya lo he hecho con otro tipo de mensajes y funciona pero el mensaje EN_SELCHANGE no consigo capturarlo.

Así que de nuevo estoy estancado. Como puedes ver en el código e intentado usar lo de Inherited y esa parece ser la única forma en que compila y la linea que hay más abajo comentada es (según creo yo) otra forma de hacer lo mismo pero que tampoco funciona.

Ah otra cosa, viendo que no funcionaba miré esto:
Cita:
Empezado por Marto
begin
if Assigned(OnSelectionChange) then OnSelectionChange(Self);
E intenté implantarlo en el constructor de mi objeto de la siguiente manera:
Código:
   if (OnSelectionChange==NULL)
 	 OnSelectrionChange=SelectrionChange;
y también lo intenté con el Self que parece no reconocerlo de ninguna manera.

Tal y como lo veo ahora tengo dos opciones: intentar seguir por el camino que me marcó Marto, o instentar capturar el mensaje EN_SELCHANGE. Cualquiera de las dos soluciones me serviría. Aunque preferiría poder usar la de Marto ya que me parece la más sencilla de las dos (en cuanto a la estructura del programa).

Muchas Gracias
Responder Con Cita