Přejít na obsah


Fotka

Pluginy


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

#1 FHonza

FHonza

    Advanced Member

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

Publikováno 06 listopad 2007 - 17:34

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
  • 0

#2 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 13 504 příspěvků(y)

Publikováno 06 listopad 2007 - 18:14

FHonza napsal/a:
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 ?


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.

FHonza napsal/a:
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.


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

FHonza napsal/a:
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).


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

FHonza napsal/a:
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.


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.
  • 0

#3 FHonza

FHonza

    Advanced Member

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

Publikováno 06 listopad 2007 - 18:37

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

HaLuMa napsal/a:
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.


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.

HaLuMa napsal/a:
Vsak parametry aktualni kese v PluginWork mas k dispozici uvnitr preddefinovanych promennych, ne?


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.

HaLuMa napsal/a:
Pokud ti jde o to, abys mohl volat z pluginu funkce z nejake DLL, pak to neni problem zaridit.


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

#4 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 13 504 příspěvků(y)

Publikováno 06 listopad 2007 - 19:10

FHonza napsal/a:

HaLuMa napsal/a:
Vsak parametry aktualni kese v PluginWork mas k dispozici uvnitr preddefinovanych promennych, ne?


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.


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

FHonza napsal/a:

HaLuMa napsal/a:
Pokud ti jde o to, abys mohl volat z pluginu funkce z nejake DLL, pak to neni problem zaridit.


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


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 'FindWindowA@user32.dll stdcall';
function ShowWindow(hWnd, nCmdShow: Longint): Integer; external 'ShowWindow@user32.dll stdcall';
function SetWindowText(hWnd: Longint; Text: PChar): Longint; external 'SetWindowTextA@user32.dll 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;

  • 0

#5 FHonza

FHonza

    Advanced Member

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

Publikováno 06 listopad 2007 - 19:15

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

#6 FHonza

FHonza

    Advanced Member

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

Publikováno 06 listopad 2007 - 19:24

Je to Pascal Script od RemObjects ?
  • 0

#7 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 13 504 příspěvků(y)

Publikováno 06 listopad 2007 - 19:51

FHonza napsal/a:
Je to Pascal Script od RemObjects ?


Bingo! ;)
  • 0

#8 FHonza

FHonza

    Advanced Member

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

Publikováno 06 listopad 2007 - 19:59

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

#9 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 13 504 příspěvků(y)

Publikováno 10 listopad 2007 - 16:11

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)
  • 0

#10 FHonza

FHonza

    Advanced Member

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

Publikováno 12 listopad 2007 - 6:27

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

#11 HaLuMa

HaLuMa

    Autor Geogetu

  • Members
  • PipPipPip
  • 13 504 příspěvků(y)

Publikováno 12 listopad 2007 - 22:46

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

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




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

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

Reklama