Delphi - ISAPI alkalmazásból dialógus ablak megjelenítése

forráskód letöltése
ISAPI DLL fejlesztése során sok esetben jó lenne tudni a programunk aktuális állapotáról. Mivel a DLL fejlesztése amúgy is körülményesebb a hagyományos programoktól, így egy-egy érték kijelzéséhez sokszor bonyolult megoldást találunk csak.
A legegyszerűbb megoldás az lenne, ha egy dialógus ablakot megjeleníthetnénk, melyben ki tudjuk írni a programfejlesztés során szükséges információkat. A probléma az csak, hogy ISAPI DLL-ből megjeleníteni egy dialóg ablakot nem lehet hagyományos módszerrel, mint például a ShowMessage hívásával egy hagyományos programnál.
Mellékelt példában bemutatjuk, hogy miként jeleníthetünk meg dialóg ablakot egy ISAPI DLL-ből hasonlóan a ShowMessage-hez. A mellékelt példa kipróbálásához a következő lépések szükségesek:
  • fordítsa le a mellékelt projektet
  • másolja át a létrejött DLL-t a webszervere azon könyvtárába, ahonnan az futtatható (pl.: Scripts)
  • indítson el egy böngészőt, majd írja be a DLL címét (pl.: http://www.animare.hu/scripts/Project1.dll)


Amikor fut a DLL, akkor megjelenik a szerver oldalon egy dialógus ablak. Attól függően, hogy Ok vagy a Mégsem gombbal zárjuk be az ablakot a DLL más és más HTML-t küld vissza a kliensnek.

Fontos tudni, hogy a megjelenő dialóg ablak mindig a szerver oldalán jelenik meg, attól függetlenül, hogy esetleg a kliens oldali kéréskor jelenítjük meg vagy sem. Így ez a módszer csak a program fejlesztése folyamán használható, éles alkalmazásban már nincs sok értelme.

A megvalósítás igen egyszerű. A dialóg megjelenítéséhez a MessageBox függvényt használjuk. Itt csupán két konstanst kell megadnunk ahhoz, hogy ISAPI DLL-ből megjeleníthető legyen. Az egyik a MB_TOPMOST, hogy minden más alkalmazás fölé kerüljön, a másik a MB_SERVICE_NOTIFICATION, mely lehetővé teszi, hogy szerviz alkalmazásból jelenítsünk meg ablakokat.
procedure TWebModule1.
  WebModule1WebActionItem1Action(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; 
  var Handled: Boolean);
begin
  if MessageBox(0, 'Üzenet az ISAPI Dll-ből', 'Fejléc', 
       MB_OKCANCEL+MB_TOPMOST+MB_SERVICE_NOTIFICATION)
       =IDOK then begin
    Response.Content:='ok';
  end else begin
    Response.Content:='mégsem';
  end;
end;