Přejít na obsah


Fotka

SaveToGUI neprovede změnu


Nejlepší odpověď HaLuMa , 06 duben 2024 - 16:04

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.
 

Přejít na celý příspěvek


  • Pokud chcete vložit odpověď, přihlašte se
5 odpovědí na toto téma

#1 Pontiac_CZ

Pontiac_CZ

    Advanced Member

  • Members
  • PipPipPip
  • 2 170 příspěvků(y)

Publikováno 20 březen 2024 - 16:03

Zkouším si příkazy na úpravy filtrů.

    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?


Tento příspěvek byl upraven od Pontiac_CZ: 20 březen 2024 - 16:05

  • 0

SW: a:Drake 6
HW: Ulefone PowerArmor 18t (Android 12), Qstarz BT-Q818XT bluetooth GPS modul

 

"When you go to hide a geocache, think of the reason you are bringing people to that spot. If the only reason is for the geocache, then find a better spot." – briansnat

 
 

 

 


#2 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 14 534 příspěvků(y)

Publikováno 22 březen 2024 - 22:52

Prověřím to, jen to nestihnu hned.
  • 1

#3 Pontiac_CZ

Pontiac_CZ

    Advanced Member

  • Members
  • PipPipPip
  • 2 170 příspěvků(y)

Publikováno 06 duben 2024 - 16:03

Díky, budu rád.


  • 0

SW: a:Drake 6
HW: Ulefone PowerArmor 18t (Android 12), Qstarz BT-Q818XT bluetooth GPS modul

 

"When you go to hide a geocache, think of the reason you are bringing people to that spot. If the only reason is for the geocache, then find a better spot." – briansnat

 
 

 

 


#4 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 14 534 příspěvků(y)

Publikováno 06 duben 2024 - 16:04   Nejlepší odpověď

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.
 


  • 2

#5 Pontiac_CZ

Pontiac_CZ

    Advanced Member

  • Members
  • PipPipPip
  • 2 170 příspěvků(y)

Publikováno 09 duben 2024 - 17:25

Aha! Chápu. GEOGET_GUIFILTER jsem v Předdefinovaných proměnných přehlídl, moje chyba. Znovu a pozorně si tento seznam pročtu. :)

 

Vyzkoušel jsem a funguje. SaveToGUI skutečně netřeba volat (v jakých případech je vlastně tato funkce užitečná?).

 

Díky,


  • 0

SW: a:Drake 6
HW: Ulefone PowerArmor 18t (Android 12), Qstarz BT-Q818XT bluetooth GPS modul

 

"When you go to hide a geocache, think of the reason you are bringing people to that spot. If the only reason is for the geocache, then find a better spot." – briansnat

 
 

 

 


#6 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 14 534 příspěvků(y)

Publikováno 10 duben 2024 - 11:54

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á.


  • 1




1 uživatel(ů) prochází toto téma

0 uživatelů, 1 návštěvníků 0 anonymních uživatelů

Reklama