Einzelnen Beitrag anzeigen

ustra

Registriert seit: 12. Mär 2003
Ort: Geesthacht
138 Beiträge
 
Delphi 5 Professional
 
#1

Ein Objekt um ein selbst definiertes Ereignis erweitern

  Alt 1. Nov 2003, 13:43
Hallo,

ich habe mir ein kleines Objekt geschrieben, das überprüft, ob ein Programm mit dem Titel "CAD-Server" geöffnet ist (Stichwort Findwindow). Ich überprüfe mit einem Timer, ob das Programm geöffnet ist. Der Timer läuft solange, bis das Programm geöffnet ist. So weit auch alles kein Problem. Nun ich will dem Objekt ein eigenes Ereignis definieren(ich nenne es onOnline). Das soll ausgelöst werden, wenn das Programm geöffnet ist. Und nun stellt sich mir die Frage, wie ich das mache. ich habe schon auf Delphi-treff.de nachgesehen und schon gebastelt, bis jetzt funktioniert es noch nicht. Ich will es so haben, das der Aufruf des Objektes so aussieht:

Delphi-Quellcode:
  
Server:=TServer.create;
Server.onOnline:=TReadInBoxTimer;
So sieht der Quellcode der Unit aus (Ich weiss, der Destruktor fehlt noch):

Delphi-Quellcode:
unit UServer;

interface

uses classes, Dialogs, windows, extctrls, shellapi;
                                  
  type TFehlerEvent = procedure(Param1: String) of object;
  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;
  end;

implementation

  constructor TServer.create;
  begin
    if getBoServer
    then self.SetonOnline(FonFehler)
    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
    ShowMessage('hallo');
  end;

  procedure TServer.TWartenOnTimer(Sender : TObject);
  begin
    if getBoServer
    then begin
      TWarten.enabled:=false;
      TWarten.free;
      self.SetonOnline(FOnFehler);
    end;
  end;

end.
Besten Grüße
Ulrich

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]
Ulrich Strauer
  Mit Zitat antworten Zitat