AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Formular in Grid-Event freigeben, wo dieses Grid drauf ist

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

Ein Thema von Getox · begonnen am 10. Mai 2021 · letzter Beitrag vom 11. Mai 2021
Antwort Antwort
Seite 1 von 2  1 2   
Getox

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

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

  Alt 10. Mai 2021, 15:45
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
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?

Geändert von Getox (10. Mai 2021 um 15:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.081 Beiträge
 
Delphi 10.3 Rio
 
#2

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

  Alt 10. Mai 2021, 15:55
Ganz extrem und dringend von abzuraten Halt(666); .
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.737 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 10. Mai 2021, 16:23
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
148 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 10. Mai 2021, 16:25
Vielleicht so in der Art? Siehe Anhang.
Angehängte Dateien
Dateityp: zip CloseForm.zip (2,2 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Getox

Registriert seit: 28. Dez 2012
136 Beiträge
 
Delphi XE3 Professional
 
#5

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

  Alt 10. Mai 2021, 16:33
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.
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?

Geändert von Getox (10. Mai 2021 um 16:36 Uhr)
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
148 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 10. Mai 2021, 16:38
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.820 Beiträge
 
Delphi 10.4 Sydney
 
#7

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

  Alt 10. Mai 2021, 16:58
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.081 Beiträge
 
Delphi 10.3 Rio
 
#8

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

  Alt 10. Mai 2021, 17:17
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...)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Getox

Registriert seit: 28. Dez 2012
136 Beiträge
 
Delphi XE3 Professional
 
#9

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

  Alt 11. Mai 2021, 08:59
Funktioniert hervorragend. Danke.
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
Getox

Registriert seit: 28. Dez 2012
136 Beiträge
 
Delphi XE3 Professional
 
#10

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

  Alt 11. Mai 2021, 10:13
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
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?

Geändert von Getox (11. Mai 2021 um 10:16 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:30 Uhr.
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