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