Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Zugriff auf GroupBox im MDI child von Datenmodul aus (https://www.delphipraxis.net/212539-zugriff-auf-groupbox-im-mdi-child-von-datenmodul-aus.html)

HCB 24. Feb 2023 14:49

Delphi-Version: 5

Zugriff auf GroupBox im MDI child von Datenmodul aus
 
Hallo, wieder hab ich ein Problem:
Ich möchte, wenn ein Datensatz gefunden wurde das zugehörige dbGrid1 das auf einem MDI Fenster liegt, sichtbar machen, ansonsten soll es unsichtbar bleiben.
Die Prozedur bringt eine Zugriffsverletzung wenn ein Datensatz gefunden wurde, ansonsten nicht.

procedure TDataMod.ds_BestelltDataChange(Sender: TObject; Field: TField); //im dataset onChange
begin
if isFormActive('Auftragsbearbeitung') then //prüft ob Fenster geöffnet ist
if datamod.qry_bestellt.RecordCount > 0 then //wenn Datensatz gefunden soll dbGrid1 sichtbar werden
frm_orders.dbGrid1.Visible:=true else frm_orders.dbGrid1.Visible:=false;
end;

Hat jemand schon einmal das gleiche Problem gehabt und kann mir helfen.
Das wäre super nett.

LG Harry

himitsu 24. Feb 2023 15:02

AW: Zugriff auf GroupBox im MDI child von Datenmodul aus
 
Man nehme den Debugger,
setze einen Haltepunkt in diese Methode
und schaue sich erstmal an was z.B. frm_orders oder frm_orders.dbGrid1 für Werte haben.

Und mindestens kann man im Debugger auch mal nachehen, in welcher Zeile es knallt.


Ansonsten seh ich hier erstmal keinen schlimmen Fehler,
jedenfalls Keinen, der nur bei >0 knallen sollte.



Was isFormActive macht, wurde nicht gesagt,
aber OK, angeblich soll dort kein Fehler drin sein.

Unnötig viele Quellcodes sind kontraproduktiv.
* Alles doppelt zu sagen, was man auch so im Code sieht, lenkt nutzlos ab
* und wenn man "einfachen" Code erklären muß, dann sollte man mal drüber nachdenken, warum der Code sich nicht selbst erklärt.

Zitat:

Delphi-Quellcode:
if irgendwas then etwas:=True else etwas:=False;

Ahhhhhh, ja. :stupid:
Delphi-Quellcode:
if isFormActive('Auftragsbearbeitung') then
  frm_orders.dbGrid1.Visible := datamod.qry_bestellt.RecordCount <> 0;
Den Knopf mit dem Delphi-Helm hast du im Editor gesehen?
[delphi] dein Code [/delphi]

Uwe Raabe 24. Feb 2023 15:07

AW: Zugriff auf GroupBox im MDI child von Datenmodul aus
 
Wenn frm_orders schon das Form "Auftragsbearbeitung" darstellt, warum dann die Funktion isFormActive('Auftragsbearbeitung') und nicht die direkte Abfrage in frm_orders? Oder stimmt meine Prämisse vielleicht gar nicht?

HCB 24. Feb 2023 15:21

AW: Zugriff auf GroupBox im MDI child von Datenmodul aus
 
Es wird im OnChange Ereignis im Dataset beim Wechseln des Datensatzes geprüft ob recCount > 0 ist. OnChange wird schon vorm Erstellen des Fensters "Auftragsbearbeitung" aufgerufen und bringt gleich die Zugriffsverletzung. Deshalb soll nur beim aktiven Fenster die Procedur ausgeführt werden.

Mit dem Debugger erkenne ich nur, dass beim Zugriff auf das dbGrid.visible die Zugriffsverletzung ausgerufen wird. Die Form ist aber schon erstellt und sichtbar.
Das ist das Problem was ich nicht verstehe (naja bin ja auch Anfänger).

LG Harry

himitsu 24. Feb 2023 15:49

AW: Zugriff auf GroupBox im MDI child von Datenmodul aus
 
Zitat:

Zitat von HCB (Beitrag 1519069)
Mit dem Debugger erkenne ich nur, dass beim Zugriff auf das dbGrid.visible die Zugriffsverletzung ausgerufen wird. Die Form ist aber schon erstellt und sichtbar.

Steht auch DIESE gewünschte Form in der Variable "frm_orders" drin?

Aber wenn "frm_orders" ungültig ist, dann sollte es auch beim Visible:=False knallen und nicht nur beim :=True. :gruebel:

HCB 24. Feb 2023 16:10

AW: Zugriff auf GroupBox im MDI child von Datenmodul aus
 
Ja, frm_orders steht drin. Ich habe das mit einer modalen Form probiert, da gibt es keine Schwierigkeiten, außer dass die Form jetzt außerhalb der Anwendung angezeigt wird. Es scheint also mit dem MDI child zusammenzuhängen, da funktioniert aus irgendwelchen Gründen nicht der Zugriff um das DBGrid unsichtbar zu machen.

Weiß jemand, wie ich die modale Form in die MDIForm unterbringe? Parent funktioniert insoweit, dass das Fenster links oben in der Anwedung platziert wird und sich nicht mehr verschieben lässt.

Es ist alles sehr, sehr mühselig wenn man nur eine geringe Ahnung von der Materia hat :oops:

peterbelow 25. Feb 2023 16:57

AW: Zugriff auf GroupBox im MDI child von Datenmodul aus
 
Zitat:

Zitat von HCB (Beitrag 1519065)
Hallo, wieder hab ich ein Problem:
Ich möchte, wenn ein Datensatz gefunden wurde das zugehörige dbGrid1 das auf einem MDI Fenster liegt, sichtbar machen, ansonsten soll es unsichtbar bleiben.
Die Prozedur bringt eine Zugriffsverletzung wenn ein Datensatz gefunden wurde, ansonsten nicht.

procedure TDataMod.ds_BestelltDataChange(Sender: TObject; Field: TField); //im dataset onChange
begin
if isFormActive('Auftragsbearbeitung') then //prüft ob Fenster geöffnet ist
if datamod.qry_bestellt.RecordCount > 0 then //wenn Datensatz gefunden soll dbGrid1 sichtbar werden
frm_orders.dbGrid1.Visible:=true else frm_orders.dbGrid1.Visible:=false;
end;

Hat jemand schon einmal das gleiche Problem gehabt und kann mir helfen.
Das wäre super nett.

LG Harry

Ist frm_orders ein MDI Childwindow (Formstyle fsMDIChild)? Du solltest da erstmal sicherstellen, dass das Form selbst sichtbar und nicht minimiert ist bevor Du den Sichtbarkeitsstatus des Grids änderst.

Übrigens:
Delphi-Quellcode:
frm_orders.dbGrid1.Visible:= datamod.qry_bestellt.RecordCount > 0;
tuts auch, kein If-Konstrukt nötig. :)

HCB 3. Mär 2023 10:06

AW: Zugriff auf GroupBox im MDI child von Datenmodul aus
 
Danke Peter für den Tipp:

Übrigens:
frm_orders.dbGrid1.Visible:= datamod.qry_bestellt.RecordCount > 0; tuts auch, kein If-Konstrukt nötig.

Wusste ich bisher gar nicht.

LG Harry

P.S. Hast du vielleicht noch mehr Beispiele wie man mit kürzerem Code die gleiche Wirkung erzielt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 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