AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Prüfen ob ein Objekt freigegeben wurde (Assigned geht nicht)
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen ob ein Objekt freigegeben wurde (Assigned geht nicht)

Ein Thema von Getox · begonnen am 27. Jun 2017 · letzter Beitrag vom 27. Jun 2017
Antwort Antwort
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#1

AW: Prüfen ob ein Objekt freigegeben wurde (Assigned geht nicht)

  Alt 27. Jun 2017, 13:44
Ich muss das Übergebene Form als Owner setzen, damit die Nachrichten ja daran ausgerichtet werden. Wenn ich als Owner nil übergebe und das selber verwalten möchte, erscheinen die Nachrichten irgendwo ScreenCentered und dass sollen sie ja eben nicht.

Leider kann ich auch nicht einfach zur Laufzeit den Owner wechseln...

Unsere Forms benutzen leider so gut wie alle das "onDestroy" event, so dass ich es nicht einfach neu zuweisen kann.

Bei jedem Form ein Interface hinzufügen würde klappen wäre aber auch wieder komisch umständlich Ich wollte ja im Grunde eine Unit bauen, wo man mit minimalem aufwand (meist 1 Funktion mit 2 Parametern) überall im Programm diese Nachrichten erzeugen kann.
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.420 Beiträge
 
Delphi 12 Athens
 
#2

AW: Prüfen ob ein Objekt freigegeben wurde (Assigned geht nicht)

  Alt 27. Jun 2017, 14:09
Unsere Forms benutzen leider so gut wie alle das "onDestroy" event, so dass ich es nicht einfach neu zuweisen kann.
Du kannst auch den destructor Destroy; override; nutzen

......
Lizbeth W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#3

AW: Prüfen ob ein Objekt freigegeben wurde (Assigned geht nicht)

  Alt 27. Jun 2017, 14:21
Da es sich sowohl bei messageBoxToast und aCenterForm um Nachfahren von TComponent handelt, kannst du dich über die Freigabe dieser Instanzen mittels FreeNotification benachrichtigen lassen.

Delphi-Quellcode:
procedure TFormToast.Notification(AComponent: TComponent; Operation: TOperation);
begin
  if Operation = opRemove then
  begin
    if AComponent = messageBoxToast then
    begin
      messageBoxToast := nil;
    end;
    if AComponent = aCenterForm then
    begin
      aCenterForm := nil;
    end;
  end;
end;

procedure TFormToast.showMessage(sMitteilung: String; aForm: TForm);
begin
  if Assigned(messageBoxToast) and (aCenterForm <> aForm) then
  begin
    messageBoxToast.HideAll;
    aCenterForm.RemoveFreeNotification(Self);
    messageBoxToast.RemoveFreeNotification(Self);
    FreeAndNil(messageBoxToast);
  end;

  if not Assigned(messageBoxToast) then
  begin
    messageBoxToast := TAdvSmartMessageBox.Create(aForm);
    aCenterForm := aForm; //aCenterForm ist Klassenvariable
    messageBoxToast.DisplayLocation := dlbottomCenter;
    messageBoxToast.DisplayRelative := drForm;
    aCenterForm.FreeNotification(Self);
    messageBoxToast.FreeNotification(Self);
  end;
...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#4

AW: Prüfen ob ein Objekt freigegeben wurde (Assigned geht nicht)

  Alt 27. Jun 2017, 15:07
Da es sich sowohl bei messageBoxToast und aCenterForm um Nachfahren von TComponent handelt, kannst du dich über die Freigabe dieser Instanzen mittels FreeNotification benachrichtigen lassen.
Vielen vielen Dank! Das war des Rätsels Lösung!

Ich musste nur noch ein inherited; unten in die Notification -Prozedur hinzufügen, weil sonst alles gehangen hat, aber nun läuft es.
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
548 Beiträge
 
Delphi 12 Athens
 
#5

AW: Prüfen ob ein Objekt freigegeben wurde (Assigned geht nicht)

  Alt 27. Jun 2017, 14:15
Ich würde es vielleicht so machen:

Alternative 1
In jedem form.create auch gleich die box mit erzeugen, die Box unsichtbar setzten.
Wenn die Box angezeigt werden soll, Text zuweisen und showmodal;
Wir das Formular geschlossen dann auch freeandnil für die Box.

Alternative 2
Man könnte auch eine Box für alle Meldungen erzeugen und die wird dann immer nur mit Text versorgt und angezeigt.
Anstatt Owner könnte die Box dann eine Variable FromForm haben, eben die Form die die Box aufgerufen hat, müsste dann bei Aufruf gesetzt werden.
Positionieren sollte nicht das Problem sein, geht auch über FromForm. Natürlich geht dann nur eine Meldung zur Zeit.

Würde wohl Alternative 2 einsetzten.
Ralf
Gruß vom Niederrhein
  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 19:25 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