[ franjo_tahi2 @ 27.03.2014. 11:15 ] @
Napravio sam kontrolu od TEdit controle. 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: Code: .... 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): Code: 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: Code: if IsValiedObject(NextControl) then ... Nadam se da ste imali živaca čitati post.... |