Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Was hat MainFormOnTaskbar mit csFreeNotification zu tun? (https://www.delphipraxis.net/179990-hat-mainformontaskbar-mit-csfreenotification-zu-tun.html)

baumina 16. Apr 2014 06:58

Was hat MainFormOnTaskbar mit csFreeNotification zu tun?
 
Ich habe ein Projekt in Delphi XE. Auf einem Formular liegt eine Eigenkomponente. Die Eigenkomponente sieht so aus:

Delphi-Quellcode:
  TfmAutoSearch = class(TForm)
  ....
  private
   lGrid : TMarkedDBGrid;
   OldKeyPress : TKeyPressEvent;
   procedure SetGrid(aGrid : TMarkedDBGrid);
    ....
  public
   property OldKeyPressed : TKeyPressEvent read OldKeyPress;
  published
   property Grid : TDBGrid read lGrid write SetGrid;
   ...
  end;

...
procedure TfmAutoSearch.SetGrid(aGrid : TMarkedDBGrid);
begin
  if ((lGrid <> nil) and not (csDesigning in ComponentState)) then
  begin
    lGrid.OnKeyPress := OldKeyPress;
  end;
  lGrid := aGrid;
  if ((lGrid <> nil) and not (csDesigning in ComponentState) and not (csFreeNotification in ComponentState)) then
  begin
    OldKeyPress := lGrid.OnKeyPress;
    lGrid.OnKeyPress := grdKeyPress;
  end;
end;
....
Die Grid wird zur Entwurfszeit zugeordnet. Beim Ausführen des Projekts habe ich 2 verschiedene Verhaltensweisen:

1. Ist MainFormOnTaskbar = False, dann ist ComponentState im SetGrid [].
2. Ist MainFormOnTaskbar = True, dann ist ComponentState im SetGrid [csFreeNotification].

MainFormOnTaskbar wird dabei jeweils direkt im Projektquelltext nach dem Application.Initialize gesetzt.

Hat da jemand eine Erklärung warum das so ist?

Stevie 16. Apr 2014 08:24

AW: Was hat MainFormOnTaskbar mit csFreeNotification zu tun?
 
Weil in TCustomForm.CreateParams FreeNotification auf jeder Form aufgerufen wird, die nicht die Application.MainForm ist.

jaenicke 16. Apr 2014 08:56

AW: Was hat MainFormOnTaskbar mit csFreeNotification zu tun?
 
Davon abgesehen frage ich mich was die Abfrage dieses Flags für einen Sinn hat. Was macht es denn für einen Unterschied für OnKeyPress, ob jemand anderes die Komponente auf Freigabe überwacht oder nicht?

Das sieht für mich so aus als hättest du den Sinn von csFreeNotification missverstanden. Das ist kein Zeichen dafür, dass da gerade etwas freigegeben wird.

baumina 16. Apr 2014 09:56

AW: Was hat MainFormOnTaskbar mit csFreeNotification zu tun?
 
Die Komponente wurde von meinem Vorgänger für Delphi5 (oder evtl. sogar schon für Delphi2) entwickelt, ich weiß nicht was er mit der Abfrage auf FreeNotification bezwecken wollte, evtl. war das in vorherigen Delphi-Versionen erforderlich, oder es war schon immer falsch hatte aber keine Auswirkung, wer weiß. Auf jeden Fall hab ich es jetzt rausgenommen (immer diese Altlasten *jammer). Ich wollts nur verstehen, deswegen danke für die Erklärung.

DeddyH 16. Apr 2014 12:18

AW: Was hat MainFormOnTaskbar mit csFreeNotification zu tun?
 
Vielleicht war auch ursprünglich csDestroying gemeint.


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