Pluginy
#1
Publikováno 06 listopad 2007 - 17:34
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
#2
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.
#3
Publikováno 06 listopad 2007 - 18:37
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.
#4
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;
#5
Publikováno 06 listopad 2007 - 19:15
#7
Publikováno 06 listopad 2007 - 19:51
FHonza napsal/a:
Je to Pascal Script od RemObjects ?
Bingo!
#8
Publikováno 06 listopad 2007 - 19:59
#9
Publikováno 10 listopad 2007 - 16:11
#10
Publikováno 12 listopad 2007 - 6:27
(mapa je samozřejmě offline)
#11
Publikováno 12 listopad 2007 - 22:46
Pokud se nic nezvrtne, nová verze by mohla vyjít zítra.
0 uživatel(ů) prochází toto téma
0 uživatelů, 0 návštěvníků 0 anonymních uživatelů