Arne Fl. Jensen wrote:
> And both fail, with the same error in clientConnect and
> clientDisConnect, and postmessage.
> 
> In your examples, there is no postMessage or postthreadMessage.
> Are there any examples of this, in a formless app.?

Now there is one:

{code}
program Project1;

{ This demo shows how to register and use custom messages posted to }
{ the ICSv7 hidden window.                                          }

{$APPTYPE CONSOLE}

{$DEFINE NOFORMS} // Do not include unit Forms.pas

uses
  Windows, Messages, SysUtils, Classes,
  OverbyteIcsWndControl,
  OverbyteIcsHttpSrv;

type
  TMyHttpServer = class(THttpServer)
  private
    FMsg_WM_MYMESSAGE: UINT;
    FOnMyMessage: TNotifyEvent;
  protected
    procedure AllocateMsgHandlers; override;
    procedure FreeMsgHandlers;  override;
    function  MsgHandlersCount: Integer;  override;
    procedure WndProc(var MsgRec: TMessage);  override;
  public
    constructor Create(AOwner: TComponent); override;
    procedure PostMyMessage;
    property OnMyMessage: TNotifyEvent read FOnMyMessage write FOnMyMessage;
  end;

  TApp = class
  private
    FMyHttpServer : TMyHttpServer;
    procedure MyHttpServerMyMessage(Sender: TObject);
  public
    procedure Run;
  end;

constructor TMyHttpServer.Create(AOwner: TComponent);
begin
    inherited;
    { Make sure the internal window is created early otherwise our  }
    { overridden message registration methods were called too late. }
    AllocateHWnd;
end;

function TMyHttpServer.MsgHandlersCount : Integer;
begin
    Result := 1 + inherited MsgHandlersCount;
end;

procedure TMyHttpServer.AllocateMsgHandlers;
begin
    inherited AllocateMsgHandlers;
    FMsg_WM_MYMESSAGE := FWndHandler.AllocateMsgHandler(Self);
end;

procedure TMyHttpServer.FreeMsgHandlers;
begin
    if Assigned(FWndHandler) then
        FWndHandler.UnregisterMessage(FMsg_WM_MYMESSAGE);
    inherited FreeMsgHandlers;
end;

{ Message handler }
procedure TMyHttpServer.WndProc(var MsgRec: TMessage);
begin
    with MsgRec do
    begin
        if Msg = FMsg_WM_MYMESSAGE then
        begin
            try
                if Assigned(FOnMyMessage) then
                    FOnMyMessage(Self);
            except
                on E: Exception do
                    HandleBackGroundException(E);
            end;
        end
        else
            inherited WndProc(MsgRec);
    end;
end;

procedure TMyHttpServer.PostMyMessage;
begin
    PostMessage(Handle, FMsg_WM_MYMESSAGE, 0, 0);
end;

{ TApp }

procedure TApp.MyHttpServerMyMessage(Sender: TObject);
begin
    WriteLn('My message received');
    { In current ICSv7 call method PostQuitMessage to break the message loop }
    FMyHttpServer.PostQuitMessage;
    { In older versions you have to post message WM_QUIT yourself }
    //PostMessage(FMyHttpServer.Handle, WM_QUIT, 0, 0);
end;

procedure TApp.Run;
begin
    FMyHttpServer := TMyHttpServer.Create(nil);
    try
        FMyHttpServer.OnMyMessage := MyHttpServerMyMessage;
        FMyHttpServer.PostMyMessage;
        { Start the built-in message pump }
        FMyHttpServer.MessageLoop;
    finally
        FMyHttpServer.Free;
    end;
end;

var
    App: TApp;
begin
    try
        App := TApp.Create;
        try
            App.Run;
        finally
            App.Free;
        end;
        WriteLn('Press Enter to exit');
        ReadLn;
    except
        on E: Exception do
        begin
            WriteLn(E.ClassName + ' ' + E.Message);
            WriteLn('Press Enter to exit');
            ReadLn;
        end;
    end;
end.
{code}

-- 
Arno Garrels
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to