![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Cita:
Vuelve a revisar el código y seguro que encontrarás cómo solucionarlo. Observa los puntos donde crea la etiqueta (SetupInternalLabel) y donde le asigna el Parent (SetParent) y verás que primero verifica que sea distinto de nil. También observa el uso de FreeNotification y Notification. El primero le indica a la etiqueta que le avise cuando se destruya y así, en Notification poder poner a nil la referencia. // Saludos |
#2
|
|||
|
|||
lo he hecho esto que me dices.El setupinternallabel, si no recuerdo mal, lo que hacia era crearlo.
Y el notification le pasa el componente y la orden opremove o algo asi era Flabel := nil Todo esto lo he probado. No se.Haber si alguien seria tan amable de hacer un pequeño componente muy pequeño que lo unico que haga sea crar dos componentes a partir de uno y que cuando se cierre el programa no de todos esos errores. Se que es un poco pedir, pero es que no me funciona lo que en teoria deberia de funcionar. Muchas gracias
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón). |
#3
|
||||
|
||||
Cita:
Código:
unit EditEx; interface uses SysUtils, Classes, Controls, StdCtrls; type TEditEx = class(TEdit) private FBoton: TButton; protected procedure SetParent(AParent: TWinControl); override; procedure Notification(AComponent: TComponent; AOperation: TOperation); override; public constructor Create(AOwner: TComponent); override; published property Boton: TButton read FBoton; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TEditEx]); end; constructor TEditEx.Create; begin inherited; FBoton := TButton.Create(Self); FBoton.FreeNotification(Self); end; procedure TEditEx.SetParent(AParent: TWinControl); begin inherited; if Assigned(FBoton) then FBoton.Parent := AParent; end; procedure TEditEx.Notification(AComponent: TComponent; AOperation: TOperation); begin inherited; if (AComponent = FBoton) and (AOperation = opRemove) then FBoton := nil; end; end. Claro que verás que aunque puedes modificar las propiedades del botón en el inspector de objetos, no puedes moverlo, ni siquiera seleccionarlo en el formulario mediante el ratón. Dependiendo de lo que desees quizá te convenga fijarte con más detalle en la implementación de TLabeledEdit para lograr que el botón se mueva junto con tu Edit. // Saludos |
#4
|
||||
|
||||
Vale aclarar que yo estoy haciendo las pruebas en Delphi 5.
Lo único que agregué en un momento, pero luego quité fue: Código:
procedure Tedit2.SetParent(AParent: TWinControl); begin inherited; if not (csDestroying in ComponentState) Then FBoton.Parent := AParent; end; ![]() Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. ![]() |
#5
|
|||
|
|||
Funciona.
¿Una cosa delphi.com.ar, que significa esa linea que has añadido milagrosa? ![]() ¿Y que diferencia hay con delphi 5 ? Muchas gracias a los dos. Saludos
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón). |
#6
|
|||
|
|||
Una pequeña cosa, ya puestos.
como existen estos mensajes de windows procedure CMVisiblechanged(var Message: TMessage);message CM_VISIBLECHANGED; procedure CMEnabledchanged(var Message: TMessage);message CM_ENABLEDCHANGED; procedure CMBidimodechanged(var Message: TMessage);message CM_BIDIMODECHANGED; que me sirven para saber si ha cambiado el bidimode o etc..., entonces yo se lo asigno al button. ¿que mensaje de windows es, el que se llama cuando un componente se mueve por la pantalla? no DRAG, sino que se mueve como sea. ¿O no necesito un mensaje de windows con un twincontrol? como por ejemplo esta el doenter;override; ¿no habra un domove o algo asi? Aunque he buscado en la ayuda y no encontrado nada. La diferencia con el labelededit, es que lleva el buton asignado como una propiedad, entonces supongo que el solo ya se encarga de moverlo cuando toca. Pero en mi caso no quiero hacerlo asi, quiero controlar yo de alguna manera cuando el edit se mueve. Espero se me enitenda Gracias y ya con esto creo que no tengo ninguna intención más de molestar.Por que tela la de preguntas que he hecho en este hilo Muchas gracias a los dos (Repito)y un saludo.
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón). |
#7
|
|||
|
|||
mi ultima pregunta ya me la contesto yo.I lo pongo por si alguien nunca tiene la misma duda.
procedure WMmove(var Message: TMessage); message WM_MOVE; Y creo que la penultima pregunta que hice lo de la linea milagrosa, es que no se le debe asignar el parent en el momento de la destrucción, ¿NO? Saludos
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón). |
![]() |
|
|
![]() |
|