AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Überprüfen ob ein Objekt existiert aber wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Überprüfen ob ein Objekt existiert aber wie?

Ein Thema von Schuster · begonnen am 3. Jan 2005 · letzter Beitrag vom 27. Dez 2020
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Überprüfen ob ein Objekt existiert aber wie?

  Alt 10. Jun 2013, 08:28
Also speziell in diesem Fall mit dem MediaPlayer würde ich ein Facade Design Pattern wählen.

Mal vereinfacht angenommen, der MediaPlayer soll sich nachher bedienen lassen mit den Funktionen Play, Stop, Power (zum Ein-/Ausschalten), dann würde die Facade so aussehen:
Delphi-Quellcode:
IMediaPlayerFacade = interface
  {GUID}
  procedure Play;
  procedure Stop;
  procedure Power;
end;
Eine konkrete Facade wäre dann z.B.
Delphi-Quellcode:
TMediaPlayerFacade = class( TInterfacedObject, IMediaPlayerFacade )
private
  FPlayer : TMPlayer;
protected
  procedure Play;
  procedure Stop;
  procedure Power;
end;

procedure TMediaPlayerFacade.Play;
begin
  if Assigned( FPlayer )
  then
    begin
      { Hier der Code um den Player zu starten }
    end;
end;

procedure TMediaPlayerFacade.Stop;
begin
  if Assigned( FPlayer )
  then
    begin
      { Hier der Code um den Player zu stoppen }
    end;
end;

procedure TMediaPlayerFacade.Power;
begin
  if Assigned( FPlayer )
  then
    begin
      FreeAndNil( FPlayer );
    end
  else
    begin
      FPlayer := TMPlayer.Create;
    end;
end;
Da der MediaPlayer aber nur eine Komponente von der Haussteuerung ist (nehme ich mal an), brauchen wir ein globales Steuerung-Element, wo alle anderen Facades gesammelt werden
Delphi-Quellcode:
IHausSteuerung = interface
  {GUID}
  function GetMediaPlayer : IMediaPlayerFacade;
  property MediaPlayer : IMediaPlayerFacade read GetMediaPlayer;
end;
Konkret kann das jetzt wie folgt umgesetzt werden
Delphi-Quellcode:
unit HausSteuerungSingleton;

interface

uses
  HausSteuerungIntf;

function HausSteuerung : IHausSteuerung;

implementation

uses
  MediaPlayerFacadeIntf,
  MediaPlayerFacade;

var
  _HausSteuerung : IHausSteuerung;

type
  THausSteuerung = class( TInterfacedObject, IHausSteuerung )
  private
    FMediaPlayer : IMediaPlayerFacade;
  protected
    function GetMediaPlayer : IMediaPlayerFacade;
  public
    constructor Create;
  end;

constructor THausSteuerung.Create;
begin
  inherited;
  FMediaPlayer := TMediaPlayerFacade.Create;
end;

function THausSteuerung.GetMediaPlayer : IMediaPlayerFacade;
begin
  Result := FMediaPlayer;
end;

function HausSteuerung : IHausSteuerung;
begin
  if not Assigned( _HausSteuerung )
  then
    _HausSteuerung := THausSteuerung.Create;

  Result := _HausSteuerung;
end;
Der Lohn der Mühe ist dann die vereinfachte Benutzung der Module.

3 Button auf die Form geklatscht, die Unit HausSteuerungSingleton in die implementation Uses-Liste aufnehmen und die Button-OnClick Ereignisse jeweils mit
Delphi-Quellcode:
HausSteuerung.MediaPlayer.Power;
// bzw.
HausSteuerung.MediaPlayer.PLay;
// bzw.
HausSteuerung.MediaPlayer.Stop;
verdrahten
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#2

AW: Überprüfen ob ein Objekt existiert aber wie?

  Alt 11. Jun 2013, 21:49
Hallo zusammen,

vielen Dank für die Ansätze/Vorschläge. Die letzten beiden werde ich mir wohl mal als "Bettlektüre" drucken müssen....(um sie zu verstehen )
MFG
Steffen
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#3

AW: Überprüfen ob ein Objekt existiert aber wie?

  Alt 11. Jun 2013, 22:21
@Furtbichler

Kannst du mal bitte kurz erläutern, welchen Zweck dieser Bereich erfüllt, bzw. wann dieser aufgerufen wird?:

Delphi-Quellcode:
initialization
  _finalized := false;
  _mediaplayer := nil;
finalization
  _finalized := true;
  FreeAndNil(_mediaplayer);
end
Danke euch allen!!!
MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Überprüfen ob ein Objekt existiert aber wie?

  Alt 11. Jun 2013, 23:13
Doku http://docwiki.embarcadero.com/RADSt...amme_und_Units
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: Überprüfen ob ein Objekt existiert aber wie?

  Alt 12. Jun 2013, 07:33
@Furtbichler

Kannst du mal bitte kurz erläutern, welchen Zweck dieser Bereich erfüllt, bzw. wann dieser aufgerufen wird?:

Delphi-Quellcode:
initialization
  _finalized := false;
  _mediaplayer := nil;
finalization
  _finalized := true;
  FreeAndNil(_mediaplayer);
end
Danke euch allen!!!
Klar:
Beim Starten der Anwendung werden alle 'Initialization'-Bereiche aller eingebundenen (explizit und implizit) Units aufgerufen: der richtige Ort, um Variablen zu initialisieren. Global ist 'böse' bzw. sollte vermieden werden, aber wer statische Klassen albern findet, kann hier in the old fashioned way seine statischen Felder initialisieren.

Beim Beenden wird der 'Finalization'-Abschnitt aller Units aufgerufen. Hier kann man aufräumen.

Ich initialisiere die Variable '_mediaplayer' mit nil. Beim ersten Aufruf der Funktion 'Mediaplayer' wird sie initialisiert. Aber nur dann, wenn der Finalization-Abschnitt noch nicht durchlaufen wurde.
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#6

AW: Überprüfen ob ein Objekt existiert aber wie?

  Alt 14. Jun 2013, 09:05
Danke euch beiden!
Werde mir das heute abend mal anschauen bzw. ausprobieren.
MFG
Steffen
  Mit Zitat antworten Zitat
derMischka

Registriert seit: 21. Jun 2007
Ort: Dresden
32 Beiträge
 
Delphi 7 Professional
 
#7

AW: Überprüfen ob ein Objekt existiert aber wie?

  Alt 14. Jun 2013, 13:06
Hier noch ein weiter Ansatz:

Delphi-Quellcode:
function ObjectExists(aObj: TObject): boolean;
begin
  Result := False;
  if aObj = nil then exit;
  try
    Result := aObj.InheritsFrom(TObject);
  except
  end;
end;
derMischka
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: Überprüfen ob ein Objekt existiert aber wie?

  Alt 14. Jun 2013, 19:21
Hier noch ein weiter Ansatz:

Delphi-Quellcode:
function ObjectExists(aObj: TObject): boolean;
begin
  Result := False;
  if aObj = nil then exit;
  try
    Result := aObj.InheritsFrom(TObject);
  except
  end;
end;
derMischka
Leere Exception-Blöcke sind doch noch böser als globale Vars.
Philip
  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 09:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz