Hi, ich habe eine DB Control programmiert und habe da ein PopupMenü um
den ControlTyp zu ändern dieser Componente zugewiesen
EDIT
COMBOBOX
CHECKBOX
MEMO
DATEPICKER
-------------
Feld entfernen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| type TFieldTyp = (EDIT, COMBOBOX, .., DATEPICKER, ..); TDBField = class(TCustomPanel) FField : TControl; ... ... procedure SetFieldType(const Value : TFieldTyp); end; procedure TDBField.SetFieldType(const Value : TFieldTyp); begin if(Assigned(FField))then FreeAndNil(FField); case Value of EDIT : begin FField := TDBEdit.Create(Self); TDBEdit(FField)... TDBEdit(FField)... end; DATEPICKER :begin FField := TDBPlannerDatePicker.Create(Self); TDBPlannerDatePicker(FField)... ... end;
end; |
Wenn ich FreeAndNil(FField); bei dem TDBPlannerDatePicker aufrufe bekomme ich Zugriffsverletzung
bei allen anderen Componenten gibts keine Problemme
Ich habe zuerst gedacht dass die DBPlannerDatePicker Comoponente nicht von TControl ableitet
aber der Hersteller schreibt:
"TDBPlannerDatePicker descends from TControl,
so this cannot be the issue."
Nun hatte ich ein ähnliches Problem wenn ich bei der Eingabe von Enter eine TEdit releasen wollte
aber da gab's auch Zugriffsverletzung!
Kann es sein weil ich dieses Popup der DBPlannerDatePicker zugewiesen habe und ich im PopupMenü den
ControlTyp wähle und dann diese Componente release dass diese Zugriffsverletzung auslöst?
//EDIT
OK ich habe das Problem gelöst! Und zwar indem ich nicht mehr property PopupMenu setze sondern das
PopupMenu einfach per Rechte Maustaste Popupe! 