Page 1 of 1

Automatická obnova obrázku

PostPosted: Thu 12. Nov 2020 9:07:31
by mistepik
Dobrý den,

Rád bych nějak vložil obrázek z webu, který poskytuje API softwaru pro hlídání dostupnosti. Nicméně by bylo potřeba aby se automaticky každých x sekund obnovoval. Když je aplikace nabízena do webu, tak i když stránku refreshnu, případně jdu z panelu na jiný panel, tak obrázek zůstane nezměněný, pravděpodobně je uložený do cache. Je nějaká možnost jak bych to mohl udělat? :)

Děkuji za odpověď

Re: Automatická obnova obrázku

PostPosted: Fri 13. Nov 2020 10:35:11
by Pavel Klimíček
Dobrý den.
Není mi úplně jasné technické provedení Vašeho obrazu.
- jakou verzi Promotic používáte?
- kde je obrázek umístěn (webová adresa, lokálně)?
- jaký grafický objekt používáte ke zobrazení (PmgRasterImage, PmgFrame)?
- pokud je to webová adresa, zobrazujete samotný obrázek nebo webovou stránku, která obrázek nabízí?

Možná by Vám ale pomohlo toto řešení:
https://www.promotic.eu/cz/pmdoc/Direct ... romWeb.htm
Pokud se bude takový obrázek stahovat a ukládat s nějakou frekvencí opakovaně (v PmaSequencer).
Pak se na něj můžete v obraze objektem PmgRasterImage napojit.
Refresh (výměna obrázku) se ale dlouho otevřeném obrazu neprovede automaticky.
To můžete vyřešit v Promotic9 pomocí AddEventTimer
https://www.promotic.eu/cz/pmdoc/Object ... tTimer.htm
nebo založení proměnné "var1" typu Long a následujícího skriptu v události onRefresh objektu PmgRaserImage:
Code: Select all
var vTime = Pm.CreatePmDateObject();
var sec = vTime.GetSecond();
var oVal = pMe.Vars("var1");
if(oVal.Value != sec)
{
  pMe.Src = sec % 2 ? "" : "#appres:Cam1.jpg";
  oVal.Value = sec;
}

Re: Automatická obnova obrázku

PostPosted: Wed 18. Nov 2020 10:20:12
by mistepik
Dobrý den,

Používám poslední verzi Promotic9.0.13. Obrázek každých 5 sekund stahuji do adresáře Resource, k zobrazení poté používám PmgRasterImage. Nicméně i pokud použiji vámi uvedený script do události OnRefresh, tak obrázek se sice refreshne, nicméně v prohlížeči se zobrazí původní, tudíž ten, který je uložen do cache v počítači uživatele. Pokud v lokální aplikaci jdu na obraz o stavu připojení, obrázek se obnoví na aktuální, poté ale zůstává stejný do té doby, než jdu na obraz znovu. Nicméně aplikace bude běžet jako služba, tudíž bude přístupná pouze z webu.

Re: Automatická obnova obrázku

PostPosted: Thu 19. Nov 2020 18:47:46
by Pavel Klimíček
Dobrý den.
Podařilo se mi Váš problem vyřešit.
V grafickém objektu PmgRasterImage smažte skript v události onRefresh a odstraňte stávající proměnnou.
Založte novou proměnnou "var1" typu Boolean.
Do události onStart vložte tento javaskript:
Code: Select all
function OnTick()
{
   pMe.Src = (oVal.Value) ? "" : pMe.Root.ClientType==1 ? "#appres:Cam1.jpg":"#appres:Cam1.jpg"+"?"+Pm.Time;
   pMe.Root.AddEventTimer((oVal.Value) ? 30 : 5000, 1, OnTick);
   //Pm.Debug("Time = " + Pm.Time+", var = " + oVal.Value);
   oVal.Value = !oVal.Value;
}
var oVal = pMe.Vars("var1");
pMe.Root.AddEventTimer(1000, 1, OnTick);

(a upravte si jméno souboru s obrázkem tak jak pořebujete)
Všimněte si, že pro webového klienta bude za názvem souboru přidáno "?+hodnota okamžitého času".
Tím se "cache" na webu neuplatní, protože hodnota parametru se s každým načtením změní.

Re: Automatická obnova obrázku

PostPosted: Fri 20. Nov 2020 9:11:45
by mistepik
Dobrý den,

Vámi uvedené řešení funguje příkladně :) Mockrát vám děkuji.

Přeji pěkný den