Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   evento OnClick de un TRichEdit (https://www.clubdelphi.com/foros/showthread.php?t=27782)

aranel 30-11-2005 17:44:08

evento OnClick de un TRichEdit
 
Hola, chicos, mirad, ya se que puede parecer una pregunta un poco tonta, pero ... el componente TRichEdit tiene un evento OnClick?? en la ayuda dice que sí, pero despues no se como asignarle ninguna función a ese evento. En cambio con un TMemo si que lo he conseguido.

Memo.OnClick := frmEditor.MemoClick;

sin embargo con el TRichEdit me dice que hay un error: "[Error] UfrmPrincipal.pas(292): E2362 Cannot access protected symbol TControl.OnClick"

Muchas gracias por adelantado

Un beso a todos!

dec 30-11-2005 17:59:14

Hola,

A mí lo que se me ocurre a bote pronto es que derives una clase de "TRichEdit" y publiques en esta su propiedad "OnClick", de este modo:

Código Delphi [-]
  type
    TRichEditEx = class(TRichEdit)
    published
      property OnClick;
    end;
Pero, no sé qué consecuencias tendría esto, quiero decir, cuando el "TRichEdit" proteje dicha propiedad tal vez tenga sus motivos... desde luego, si haces lo que refiero arriba sí que parece que puedes utilizar después el evento/propiedad que te interesa.

Edito: para que acaso te resulte más fácil el tema, puedes hacer uso de la "superposición de clases", de tal modo que, antes de la declaración del formulario en que haces uso del "TRichEdit" codifiques algo como esto:

Código Delphi [-]
 type
   TRichEdit = class(ComCtrls.TRichEdit)
   published
     property OnClick;
   end;
De ese modo, aunque mediante código (no con el inspector de objetos) ya podrás utilizar el evento/propiedad "OnClick" en el "TRichEdit" que estás utilizando ahora mismo.

aranel 30-11-2005 18:02:19

Muchas gracias!! lo vamos a intentar ahora mismo, a ver si con eso conseguimos hacerlo, y esperemso que no nos haga cosas demasiado raras.

dec 30-11-2005 18:07:36

Hola,

Para que quede un tanto más claro, ahí va el código "completo" de la unidad de un formulario en que se usa un "TRichEdit" normal, corriente y moliente, pero, que, gracias a la "superposición de clases", contará también con una propiedad/evento "OnClick":

Código Delphi [-]
unit Unit1;

interface

uses
  Forms, Classes, Controls,
  StdCtrls, ComCtrls, Dialogs;

type
  TRichEdit = class(ComCtrls.TRichEdit)
  published
    property OnClick;
  end;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    procedure FormCreate(Sender: TObject);
  private
    procedure RichEditClick(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  RichEdit1.OnClick := RichEditClick;
end;

procedure TForm1.RichEditClick(Sender: TObject);
begin
  ShowMessage('¡RichEditClick!');
end;

end.

aranel 01-12-2005 11:43:28

Muchas gracias por todo, pero al final publiqué la propiedad OnClick, pero me di cuenta de que también necesitaba la propiedad OnDblClick, y la publiqué también, pero entonces empezó a darme errores el programa, pero errores en sitios incomprensibles, como al asignarle un 3 a una variable, cosas que antes funcionaban correctamente. E incluso deshacía los cambios y volvía a ponerlo todo como antes, y seguia dandome esos errores que en principio no tenía porque darmelos. Y para que todo volviera a funcionar otra vez como al principio tenia que reiniciar el ordenador.

Entonces pensé que llevabas razón, que si TRichEdit protege esa propiedad por algo será. Entonces al final lo he solucionado utilizando un TMemo, que aunque no me deja poner una línea determinada de un color (por ejemplo, rojo) si que implementa la propiedad OnClick.


La franja horaria es GMT +2. Ahora son las 15:28:08.

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