Delphi > Firemonkey
Zmena gradientu v runtime
(1/1)
raul:
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.
--- Kód: Delphi --- 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:
--- Kód: Delphi --- 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
raul:
Sakra,
proc to cloveku dojde hned, jak napise dotaz?
--- Kód: Delphi --- Obsah.fill.Gradient.Points.BeginUpdate; 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; Obsah.fill.Gradient.Points.EndUpdate;
Stanislav Hruška:
--- Citace: raul 04-08-2021, 18:51:17 ---Sakra,
proc to cloveku dojde hned, jak napise dotaz?
--- Konce citace ---
Lebo napísaním a odoslaním otázky sa stane niekoľko vecí
* človek si vyjasní o čom to vlastne je
* uvoľníš sa, zlikviduješ blok, a tým dáš mozgu šancu problém spracovaťMne sa to stáva bežne. Preto si niektoré otázky najprv napíšem, ale neodošlem. Pokiaľ mi nič nenapadne, tak to pošlem.
raul:
Jop
Navigace
[0] Seznam témat
Přejít na plnou verzi