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