filtr := TGeoFilter.create;
filtr.LoadFromGUI;
ShowMessage('DistanceValue je ' + FlToStr(filtr.DistanceValue)); // "DistanceValue je 25"
mi vrací 25 nebo 50 - dle toho, jaký filtr mám zrovna aktivní. Funguje to dle očekávání. Tak jsem si řekl, že by to mělo fungovat i nazpět. Přidal jsem:
filtr.DistanceValue := 2.0;
ShowMessage('DistanceValue je ' + FlToStr(filtr.DistanceValue)); // "DistanceValue je 2"
filtr.SaveToGUI;
Proběhlo bez chyb. Ale když kouknu do nastavení filtru, vidím tam stále 25 km. Když spustím filtrování (ať už F5 nebo do programu přidám "GeoListLoad;"), načtou se mi keše do vzdálenosti 25 km.
Takže k přenosu do filtru v GUI nedošlo. Kde dělám chybu?
Tak na to koukám, a je to trochu zašmodrchané. Ono se totiž nefiltruje podle GUI, ale podle interního instance objektu typu TGeoFilter. Jakmile chceš ten filtr editovat, tak se nahraje do GUI, ty ho ručně změníš, a pak se zase nahraje zpět z GUI do té instance, se kterou se pracuje.
Ty sis ale vytvořil svoji vlastní instanci TGeoFilter, zatímco zbytek Geogetu při editaci i filtrování používá jinou instanci. Proto tam ty změny nevidíš.
Tu interní filtrovací instanci máš ve skriptech dostupnou přes proměnnou Geoget_GUIfilter
Takže by mělo stačit jen:
ShowMessage('DistanceValue je ' + FlToStr(Geoget_GUIfilter.DistanceValue)); // "DistanceValue je 25"
Geoget_GUIfilter.DistanceValue := 2.0;
ShowMessage('DistanceValue je ' + FlToStr(Geoget_GUIfilter.DistanceValue)); // "DistanceValue je 2"
Tedy instanci nevytvářet, už tam je. A to nahravani do GUI by nemelo byt potřeba, to by se melo zavolat samo když se na filtr podivas. A filtrovani by melo jet podle toho, co je v teto instanci nastaveno.
Jen bacha na přepnuti filtru, to obsah teto instance prepise podle noveho filtru.
Ono je to tak, že celá tahle třída je používána interně Geogetem, a byla jen vypublikována i pro skripty. Takže ve všech těch třídách jsou věci, které ve skriptu nemají smysl, nicméně jsou používány interně Geogetem v situacích, kdy to smysl má.