Zdarec,
narazil jsem na takovou zapeklitost. Mam na jedne tShape gradient s 5 body. De facto tim gradientem vybarvuji onu tShape, s tim, ze ve vysledku se nejedna o gradient, ale dva pruhy pres onen tShape. Problem je, ze pri prirazeni offset danemu tGradientPoint dojde k serazeni pointu Gradientu, ktery se pak rozhodi.
var old_off1 := Obsah.Fill.Gradient.Points[1].Offset;
var old_off2 := Obsah.Fill.Gradient.Points[2].Offset;
var old_off3 := Obsah.Fill.Gradient.Points[3].Offset;
var old_off4 := Obsah.Fill.Gradient.Points[4].Offset;
var off1 := KolikBudemeMit-0.003;
var off2 := KolikBudemeMit-0.002;
var off3 := KolikMame-0.001;
var off4 := KolikMame;
Obsah.Fill.Gradient.Points[1].Offset := off1;
Obsah.Fill.Gradient.Points[2].Offset := off2;
Obsah.Fill.Gradient.Points[3].Offset := off3;
Obsah.Fill.Gradient.Points[4].Offset := off4;
var new_off1 := Obsah.Fill.Gradient.Points[1].Offset;
var new_off2 := Obsah.Fill.Gradient.Points[2].Offset;
var new_off3 := Obsah.Fill.Gradient.Points[3].Offset;
var new_off4 := Obsah.Fill.Gradient.Points[4].Offset;
Hodnoty off<x> jsou v poradku; new_off<x> uz v poradku nejsou, neb v prirazeni dojde k serazeni toho pole, ktere je v teto chvili lokalne neplatne. Jasne, mohu resit, jestli mam hodnotu mensi ci vetsi nez predchozi a dalsi hodnotu, ale...
Metoda setOffset u gradientPoint:
if not SameValue(FOffset, Value, Single.Epsilon) then
begin
FOffset := Value;
Changed(False);
end;
Problem je v Changed, ktere kdyz obsahuje false, seradi seznam pointu. Bohuzel je setOffset privatni (misto protected), tudiz nejde pretizit.
Da se s tim nejak hnout, nebo se da treba lokalne provest jaky begin/end update a nastavit offsety bez serazovani ?
Diky