Kreirano sam klasu UsrProperti koja ima više toga.
Kreirao sam ju kao TPersistent kako bih u property editoru vidio svoje dodane property-e na jednom mjestu
između ostalog postoji:
property NextControl: TWinControl
to je bilo koja kontrola koja može dobiti fokus.
Izmjenio sam OnKeyPress na način:
....
if Key = #13 then
MyProperty.NextControl.SetFoxus;
...
Problem je sljedeći:
1. property-u kontrole: NextContol (odabere se bilo koja kontrola s forme, npr edKonto)
2. obriše se s forme dodjeljena kontrola (u ovoj slučaju edKonto)
Delphi javlja Access violation.
Ako kontrolu edKonto obrišem u RunTime-u, ništa se ne događa i kontrola ne javi grešku.
Predpostavljam da je riječ o pokušaju pristupa objektu (fokusiranje) koji ne postoji.
Pokušaop sam prije upotrebe NextControl provjeravati da li ispravna.
Ovo je funkcija (našao na net-u) koja radi kontrolu i koju pozivam svaki put prije uprabe NextCotnrol (možad će kome trebati):
function tKnEdit.IsValidClass(Cls: TClass): Boolean;
var
i: Integer;
begin
for i := 0 to 99 do begin
Result := ( Cls = TObject ); // note that other modules may have a different root TObject!
if Result then Exit;
if IsBadReadPtr( Cls, sizeof( Pointer ) ) then Break;
if IsBadReadPtr( Pointer( Integer( Cls ) + vmtParent ), sizeof( Pointer ) ) then Break;
Cls := Cls.ClassParent;
end;
Result := False;
end;
function tKnEdit.IsValidObject(Obj: TObject): Boolean;
begin
Result := not IsBadReadPtr( Obj, sizeof( Pointer ) ) and IsValidClass( Obj.ClassType ) and not IsBadReadPtr( Obj, Obj.InstanceSize );
end;
Pozivam je:
if IsValiedObject(NextControl) then ...
Nadam se da ste imali živaca čitati post....