Pluginy

Plánuješ rozšířit pluginy také pro filtrování ? Třeba že by PluginWork byla funkce, která by vracela zda je(není) cache ve filtru ?

A také by mě zajímalo, zda nějak jednoduše lze do externího programu v proceduře PluginWork předat parametry aktuální cache. Tj. např. voláním funkce do dll, která by se nahrála při PluginStart (parametry a typ volání by byly "napevno" ). Takhle se parametry dají sestavit a předat pouze voláním RunExec a to je velmi zdlouhavé, nebo číst data ze souboru db3. A to mě zase přijde že to je proti koncepci pluginů (a navíc nelze použít aktuální výběr).

A když už otravuju, tak navrhuju přidat jednu obecnou proměnnou, ve které by byl Handle hlavního okna programu. Pak by externí program mohl vytvářet modální dialogy nad GeoGetem.

Díky

Filozofie je jine… pracujes prave s vysledkem apliakce filtru, takze by takova funkce logicky vracela vzdy true.

To co patrne chces se bude resit trosku jinak tim, ze v dalsich verzich budes moci z pluginu volat postupne vic a vic funkci samotneho Geogetu. Takze nebude problem si treba ve PluginStart zavolat nahrani dat podle nejakeho filtru, aby pak PluginWork byl zavolan pro kazdou kesku, ktera splnuje vybrany filtr.

Nebo jsi to myslel tak, ze by ses pro kazdou kesku mohl zeptat, jestli nahodou nesplnuje nejaky uplne jiny filtr, nez jakym byla keska zobrazena? To by jiste slo take.

Vsak parametry aktualni kese v PluginWork mas k dispozici uvnitr preddefinovanych promennych, ne?

Pokud ti jde o to, abys mohl volat z pluginu funkce z nejake DLL, pak to neni problem zaridit.

Tak to uz vubec neni problem.

Dokonce technicky jde zaridit i to, ze by se ty formulare mohly definovat i primo ve skriptu, ale to je uz takova trosku vyssi divci. Umis-li vyrobit DLL s formularem ve tvem oblibenem programovacim jazyce, pak je jiste jednodusi zavolat tu DLL.

Předně díky za rychlou odpověď.

To sem přesně myslel. Mám nachystanou knihovnu s "prostorovými dotazy", např. cache kolem trasy, cache v polygonu (s návazností na GISovská data) apod.

To ano, ale chtěl bych je předat do externího programu. Program nastartuju přes PluginStart a končím voláním PluginStop. No a když chci předat parametry cache, tak se musí volat v PluginWork fce RunExec s poskládanými parametry. No a exetrní program musí zjišťovat, jestli už nebeží jeho instance, když ano, tak předat parametry do první spuštěné, ukončit druhou instanci a tak pořád dokola. A to hodně zdržuje.

To by bylo super :wink: v PluginStart zavolat něco jako LoadLibrary a GetProcsAddress, v PluginWork[ volat fci knihovny a v PluginStop ukončit FreeLibrary.

jasne, kdybys pro kazdou kesku volal nejakou funkci v DLL s temi aktualnimi parametry, ktere by te zrovna zajimaly, pak bys problem nemel, ne?

Bude to jeste jednodusi. O nahravani i uvolnovani se nebudes muset starat. (DLL se zavede pri prvnim pouziti, uvolni se na konci skriptu)

Proste definujes funkci a reknes skriptu, ze je to tahle funkce v teto DLL s touto volaci konvenci. A pak tuto funkci ve skriptu volas jako jakoukoliv jinou funkci. Pochopitelne si musis dat pozor, aby sedely parametry.

Pak to muze v tom skriptu vypadat treba takhle:



/deklarace funkci v nejakych DLL
function FindWindow(C1, C2: PChar): Longint; external '[email protected] stdcall';
function ShowWindow(hWnd, nCmdShow: Longint): Integer; external '[email protected] stdcall';
function SetWindowText(hWnd: Longint; Text: PChar): Longint; external '[email protected] stdcall';

//a pak se to da volat treba takto:
procedure delejneco;
var 
  i: Longint;
  wnd: Longint;
Begin
  wnd := Findwindow('', 'Innerfuse Pascal Script III');
  SetWindowText(Wnd, 'This is DLL demo, it calls some windows user32 routines. This will hide this window for a few seconds');
  for i := 0 to 200000 do begin end;
  ShowWindow(Wnd, 0); // hide it
  for i := 0 to 200000 do begin end;
  SetWindowText(Wnd, 'Wasn''t that nice?');
  ShowWindow(Wnd, 5); // show it
  for i := 0 to 200000 do begin end;
  SetWindowText(Wnd, 'Innerfuse Pascal Script III');
End;


Tak takhle by to bylo úplně maximálně super, víc si už nemůžu přát :slight_smile:

Je to Pascal Script od RemObjects ?

Bingo! :wink:

Tak to sou super možnosti před náma :slight_smile: Do příští středy bohužel mám práce nad hlavu, ale pak se hned vrhnu na "GISovský" pluginy.

Tak jsem trosku vylepsoval skripty, na pristi verzi se urcite da tesit:

  • pridana podpora pro volani externich DLL
  • pridana podpora pro nejake zakladni tridy, jako je treba TStringList (dynamicka kolekce retezcu), streamy, atd.
  • funkce na zobrazovani ‘busy dialogu’
  • pridany funkce na pridavani a odebirani radku ve vyberu
  • funkce na nahravani filtru a dotazovani-se na filtr
  • vylepsen hlavni plugin tak, ze se da volat nejen na prave zobrazene zaznamy, ale ze se da volat i na uplne vsechny zaznamy v databazi. (tento rezim se zapina pres flag pluginu)

Tak to já se už teším. Některé věci už mám předpřipravené:
(mapa je samozřejmě offline)

Dokumentace Geogetu již byla rozšířena o nové možnosti skriptu. viz. http://geoget.ararat.cz/doku.php/doc:macro

Pokud se nic nezvrtne, nová verze by mohla vyjít zítra.