AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ein Objekt um ein selbst definiertes Ereignis erweitern
Thema durchsuchen
Ansicht
Themen-Optionen

Ein Objekt um ein selbst definiertes Ereignis erweitern

Ein Thema von ustra · begonnen am 1. Nov 2003 · letzter Beitrag vom 1. Nov 2003
Antwort Antwort
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
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, 14: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
ustra

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

Re: Ein Objekt um ein selbst definiertes Ereignis erweitern

  Alt 1. Nov 2003, 15:47
Hallo,

danke für Deine Hilfe. Jetzt funktioniert ist. Ich schaue mir das noch mal genau an um es zu verstehen. Sollte jetzt aber kein Problem mehr für mich darstellen.

Besten Dank
Ulrich
Ulrich Strauer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz