Delphi-PRAXiS
Seite 1 von 2  1 2   

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/)
-   -   Formular in Grid-Event freigeben, wo dieses Grid drauf ist (https://www.delphipraxis.net/207864-formular-grid-event-freigeben-wo-dieses-grid-drauf-ist.html)

Getox 10. Mai 2021 15:45

Formular in Grid-Event freigeben, wo dieses Grid drauf ist
 
Hallo,

ich habe ein Problem, das mir richtig Kopfzerbrechen bereitet. Ich habe 2 Formulare. Das Hauptformular ruft das Unterformular auf. Auf dem Unterformular ist ein TDBAdvGrid. In diesem Grid mache ich eine bestimmte Abfrage im keydown-Event und wenn diese ein negatives Ergebnis liefert, Schließe ich zunächst das Unterformular und dann das Hauptformular in eben diesem Keydown-Event.

Beim Schließen des Hauptfensters (onClose-Event) wird das Unterfenster freigegeben (FreeAndNil). Obwohl das Schließen des Hauptfensters die letzte Aktion im Keydown-Event des Grids war, wird scheinbar intern danach noch was im Grid gemacht, was zu Fehlern führt, weil ja das Formular wo es drauf ist schon freigegeben wurde.

Ich muss irgendeine Möglichkeit finden, wie ich dieses Schließen der beiden Formulare (welches das Freigeben des Unterformulars enthält) durchführen kann, wenn eine Taste im Grid auf eben diesem Formular gedrückt wird, ohne das im entsprechenden Event selbst zu tun :/

Hat jemand eine Idee?

Danke

KodeZwerg 10. Mai 2021 15:55

AW: Formular in Grid-Event freigeben, wo dieses Grid drauf ist
 
Ganz extrem und dringend von abzuraten
Delphi-Quellcode:
Halt(666);
.

himitsu 10. Mai 2021 16:23

AW: Formular in Grid-Event freigeben, wo dieses Grid drauf ist
 
Wenn das zweite Fenster weg ist, wieso hat dann das erste Fenster noch eine Referenz darauf?

Oder wie sonnst soll die Form 1 auf die 2 zugreifen können?

lxo 10. Mai 2021 16:25

AW: Formular in Grid-Event freigeben, wo dieses Grid drauf ist
 
Liste der Anhänge anzeigen (Anzahl: 1)
Vielleicht so in der Art? Siehe Anhang.

Getox 10. Mai 2021 16:33

AW: Formular in Grid-Event freigeben, wo dieses Grid drauf ist
 
Ich versuche das nochmal anders zu beschreiben.

Wir haben einen Login-Screen. Nach dem Login landet man im Hauptformular. Von dort aus kann man ein Modul (nicht modal) aufrufen.

In diesem Modul ist ein Grid, in dem onKeyDown eine Prüfung auf Lizienznutzungen stattfindet. Wenn festgestellt wird, dass an der Lizenzbelegung von außerhalb manipuliert wurde, soll man zurück in den Login-Screen geworfen werden.

Ich befinde mich also im Key-Down Event des Grids von Modul-Formular. Ganz am Ende des Events schließe dieses Formular. Danach schließe ich im selben Event das Hauptformular, damit man zurück auf die Login-Maske geworfen wird.

Beim Schließen des Hauptformulars wird aber onClose das Modul-Formular mit Freeandnil freigegeben. Das KeyDown-Event des Grids scheint aber iintern noch nachgelagerte Aktionen durchzuführen, die aber fehlschlagen, weil das Fenster und das Grid dann schon nicht mehr existiert.

lxo 10. Mai 2021 16:38

AW: Formular in Grid-Event freigeben, wo dieses Grid drauf ist
 
Zitat:

Zitat von Getox (Beitrag 1489051)
Ich versuche das nochmal anders zu beschreiben.

Wir haben einen Login-Screen. Nach dem Login landet man im Hauptformular. Von dort aus kann man ein Modul (nicht modal) aufrufen.

In diesem Modul ist ein Grid, in dem onKeyDown eine Prüfung auf Lizienznutzungen stattfindet. Wenn festgestellt wird, dass an der Lizenzbelegung von außerhalb manipuliert wurde, soll man zurück in den Login-Screen geworfen werden.

Ich befinde mich also im Key-Down Event des Grids von Modul-Formular. Ganz am Ende des Events schließe dieses Formular. Danach schließe ich im selben Event das Hauptformular, damit man zurück auf die Login-Maske geworfen wird.

Beim Schließen des Hauptformulars wird aber onClose das Modul-Formular mit Freeandnil freigegeben. Das KeyDown-Event des Grids scheint aber iintern noch nachgelagerte Aktionen durchzuführen, die aber fehlschlagen, weil das Fenster und das Grid dann schon nicht mehr existiert.

Wenn du im CloseEvent des Formulars das Hauptformular schließt und nicht im Event des Grids sollte es funktionieren. Siehe Beispiel das ich vorhin angehängt habe.
Im KeyDownEvent des Grids könntest du dann ja auch noch einen Merker setzen und anhand dessen dann im CloseEvent des Formulars entscheiden ob das Hauptformular mit geschlossen werden soll oder nicht.

Uwe Raabe 10. Mai 2021 16:58

AW: Formular in Grid-Event freigeben, wo dieses Grid drauf ist
 
Dafür gibt es Release.

Zitat:

Release gibt das Formular erst frei, nachdem die Ausführung der Ereignisbehandlungsroutinen des Formulars und seiner untergeordneten Komponenten beendet ist. Die Methode stellt auch sicher, dass alle Botschaften in der Ereigniswarteschlange des Formulars vor dessen Freigabe bearbeitet werden. Jede Ereignisbehandlungsroutine für das Formular oder für dessen untergeordnete Objekte sollte Release anstelle von Free (Delphi) oder Delete (C++) benutzen. Ansonsten kann ein Speicherzugriffsfehler auftreten.

KodeZwerg 10. Mai 2021 17:17

AW: Formular in Grid-Event freigeben, wo dieses Grid drauf ist
 
Wie wäre es mit einem Handler in der Login-Form, der auf eine Nachricht wartet, wenn sie kommt, prüfen welche Forms offen sind und dichtmachen. Wäre das eine Variante? (das key event sendet dann nachricht anstelle was zu schließen...)

Getox 11. Mai 2021 08:59

AW: Formular in Grid-Event freigeben, wo dieses Grid drauf ist
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1489055)
Dafür gibt es Release.

Funktioniert hervorragend. Danke.

Getox 11. Mai 2021 10:13

AW: Formular in Grid-Event freigeben, wo dieses Grid drauf ist
 
Ich wollte noch einmal explizit meinen Respekt für Uwe Raabe ausdrücken. Er weiß scheinbar alles über Delphi und hat immer eine passende, saubere und einfache Lösung parat. Ein Mann von Ehre :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf