FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
error al colocar un componente propio a un form
Estimados, estoy tratando de programar un componente propio y el código resultante es este.
//Inicio type TProducto = class(TPanel) protected procedure SetHeight(Value:integer); procedure SetWidth(Value:integer); procedure SetForma(Value:TShapeType); procedure SetEtiqueta(Value:String); procedure SetColorForma(Value:TColor); procedure SetOnMouseDown(Value:TMouseEvent); function GetForma:TShapeType; function GetHeight:integer; function GetWidth:integer; function GetEtiqueta:string; function GetColorForma:TColor; function GetOnMouseDown:TMouseEvent; published sForma:TShape; lEtiqueta:TLabel; constructor PanelCreate(Sender: Tcomponent); procedure PanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); property Height:integer read GetHeight write SetHeight default 0; property Width:integer read GetWidth write SetWidth default 0; property Forma:TShapeType read GetForma write SetForma default stRoundRect; property Etiqueta:string read GetEtiqueta write SetEtiqueta; property ColorForma:TColor read GetColorForma write SetColorForma default clGreen; property OnMouseDown:TMouseEvent read GetOnMouseDown write SetOnMouseDown; //property PopUpMenu:TPopUpMenu read GetPopUpMenu write SetPopUpMenu; public procedure MostrarMensaje; virtual; abstract; private end; //Fin Obviamente despues de implementation esta el código necesario para todos los procesos y funciones declarados para la clase, no lo escribo acá por que ya es mucho :S. El tema es que cuando registro esta clase y la instalo como un nuevo componente, aparece el la barra de componentes todo muy lindo, pero cuando la ubico en un form me sale un error "Acces violation in module productos.bpl" y luego "stack overflow save your work and restart delphi" cuac :SSS. por que se puede dar esto. sludos. |
#2
|
|||
|
|||
Hola...
Veo que ya tienes algunos mensajes en el foro, por lo cual ya deberías haber leido la Guía de Estilo de los foros... También te recomiendo que uses las etiquetas (sin los espacios en blanco) para mostrar tu código: var A, I: Integer; begin A := 3; for I := A to 10 do ShowMessage(IntToStr(I)) end;
Ves la diferencia? Ahora, sobre tu problema, algo me dice que el error se encuentra en el código del constructor CreatePanel, pero sin ver el código no te puedo decir más... Saludos... Última edición por maeyanes fecha: 14-09-2007 a las 21:24:56. |
#3
|
|||
|
|||
Este es el código del constructor
Código delphi [-] constructor TProducto.PanelCreate(Sender:Tcomponent); begin inherited Create(Sender); lEtiqueta:=TLabel.Create(Sender); lEtiqueta.Caption:=''+#13#10+''; lEtiqueta.Font.Size:=10; lEtiqueta.Font.Style:=[fsBold]; lEtiqueta.Top:=0; lEtiqueta.AutoSize:=false; lEtiqueta.OnMouseDown:=ShapeMouseDown; lEtiqueta.Font.Name:='Optima'; sForma:=TShape.Create(Sender); sForma.Brush.Style:=bsClear; sForma.Pen.Style:=psClear; sForma.OnMouseDown:=ShapeMouseDown; BevelInner:=bvNone; BevelOuter:=bvNone; Color:=clWhite; ParentShowHint:=false; ShowHint:=true; AutoSize:=true; OnMouseDown:=PanelMouseDown; InsertControl(sForma) ; InsertControl(lEtiqueta); end; saludos. |
#4
|
|||
|
|||
No veo nada raro en tu código...
Podrás subir la unidad del código en un archivo zip para que le eche un vistazo? Saludos... |
#5
|
|||
|
|||
ahí lo subi, espero que se entienda :S
gracias. |
#6
|
|||
|
|||
Ahí donde?
|
#7
|
|||
|
|||
Ahora si
|
#8
|
|||
|
|||
El error de Stack Overflow se da en este método:
Por que, por que estas haciendo llamadas recursivas del mismo método GetOnMouseDown... Solucion:
Ahora, como estás creando un componente visual, te recomiendo que en lugar de crear un constructor propio, redefinas el de TPanel:
Por cierto, los métodos para asignar propiedades deben ser siempre privados, a menos que quieras hacerlos virtuales para que futuros descendientes los puedan redefinir... Otra observación, el método MostrarMensaje lo declaras como un método abstracto, y al ser un componente visual, esto no es aconsejable, ya que para poder hacer buen uso del componente, tendrías que crear un descendiente que implementara la funcionalidad de MostrarMensaje... Saludos.... |
#9
|
|||
|
|||
compañero, muchas gracias, el problema del overflow se debía a eso y a las propiedas height y width que las estaba asignando igual que la de onmousedown, cambié tambien el constructor y todo esta perfecto, muchas gracias.
slds. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema con foco en componente propio | diegofhernando | OOP | 2 | 04-09-2007 17:58:34 |
Abrir archivo propio desde Windows....en programa propio | darkphantom | Varios | 12 | 22-02-2007 04:46:49 |
componente form transparente... | n3mohack | Varios | 10 | 13-01-2006 16:11:38 |
Preview propio en un form | brandolin | Impresión | 1 | 30-06-2005 14:44:30 |
Borrar componente de un Form | muzit | OOP | 7 | 23-10-2003 23:44:30 |
|