Einzelnen Beitrag anzeigen

scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: Ein Objekt um ein selbst definiertes Ereignis erweitern

  Alt 1. Nov 2003, 13:58
Delphi-Quellcode:
unit UServer;

interface

uses classes, Dialogs, windows, extctrls, shellapi;
                                  
  type TFehlerEvent = procedure(Param1: String) of object; // "of object" evtl. weglassen, je nach dem, ob später eine normale procedure oder eine procedure, die in einem Form deklariert ist, werwendet wird.
  type TServer = class(Tcomponent)
    private
      FOnFehler: TFehlerEvent;
      TWarten : TTimer;
      function getBoServer : boolean;
      procedure SetOnOnline(Value: TFehlerEvent);
      procedure TWartenOnTimer(Sender : TObject);

    published
      property OnOnline: TFehlerEvent read FOnFehler write SetonOnline;

    protected

    public
      constructor create;
      procedure Execute;
  end;

implementation

  constructor TServer.create;
  begin
    inherited create(nil); // hier noch keine Aktionen
  end;

  procedure TServer.Execute;
  begin
    if getBoServer then
      begin
        If Assigned(FOnFehler) then // Der Aufruf geht dann so von statten
          FOnFehler('text');
      end
    else begin
      TWarten := TTimer.create(nil);
      TWarten.interval:=500;
      Twarten.OnTimer := TwartenOnTimer;
      TWarten.enabled:=true;
      ShellExecute(0, 'open', 'Server.exe', nil, 'C:\buco_bwp\Server', SW_SHOWNORMAL);
    end;
  end;

  function TServer.getBoServer : boolean;
  begin
    if FindWindow(nil, 'CAD-Server') = 0
    then
       result := false
    else
      result := true;
  end;

  procedure TServer.SetonOnline(Value: TFehlerEvent);
  begin
    FOnFehler = Value; // Hier wird nur die procedure zugeswiesen
  end;

  procedure TServer.TWartenOnTimer(Sender : TObject);
  begin
    if getBoServer
    then begin
      TWarten.enabled:=false;
      TWarten.free;
      If Assigned(FOnFehler) then // Der Aufruf geht dann so von statten
        FOnFehler('text');
    end;
  end;

end.
Delphi-Quellcode:
var
  EinServer : TServer;

procedure EinServerOnFehler(param1 : string);
begin
  ShowMessage('hallo');
end;

procedure EinServerStarten;
begin
  EinServer := TServer.Create;
  EinServer.OnOnline := EinServerOnFehler;
  EinServer.Execute;
end;
  Mit Zitat antworten Zitat