![]() |
Delphi-Version: 10.2 Tokyo
Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Ich habe eine Funktion, welcher ich eine TForm-Variable übergebe. Es existiert nicht zwangsweise bereits eine Instanz dieses Formulars.
Damit mein Code schön sauber bleibt, packe ich alles in Prozeduren. Eine davon speichert die Fenstergröße und -position. Einziger Parameter ist die Form-Instanzenvariable, die aber wie gesagt auch nil sein kann. Bin ich jetzt gezwungen ein if Assigned(formxyz) then da drum zu packen oder geht das auch direkt im Funktionsaufruf irgendwie? |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Hallo,
die richtige Position der NIL-Auswertung ist in der Prozedur selbst. |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Dann bleibt ja nichts anderes übrig als ein if vor die Funktion zu setzen in diesem Falle. Denn der Parameter ist die Instanz selbst.
|
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Zeig doch mal deinen bestehenden Code.
|
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Zitat:
Du kannst auch in der Funktion selbst prüfen, ob der übergebene Wert assigned ist. Kurzes Beispiel:
Delphi-Quellcode:
function MeineFunktion(aForm : TForm) : Boolean;
begin Result := Assigned(aForm); if Result then begin // Position der Form setzen end; end; |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
So ist das zwar defensiv programmiert, aber schlechter Stil. Für einen Form, den es gar nicht gibt, die Position speichern zu wollen, ist nicht sauber. Ich würde das Problem an der Stelle lösen, wo es auftritt: beim Aufruf bzw noch vorher in der Logik, die auswählt, für welchen Form die Position gespeichert werden soll.
|
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Zitat:
Delphi-Quellcode:
procedure MeineFunktion(const aForm : TForm);
begin Mach etwas mit aForm end; // Kein Problem if Assigned(aForm ) then MeineFunktion(aForm); // Problem (egal ob man Assigned in MeineFunktion hat oder nicht) MeineFunktion(aForm); |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Zitat:
Es könnte aber sein, daß aForm nicht NIL ist sondern einen undefinierten Zustand hat. Das solltest du mit dem Debugger mal kontrollieren. |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Zitat:
Zitat:
|
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Auch in der Starter gibt es den Debugger, nur die Hover-Anzeige funktioniert halt nicht - aber über die überwachten Ausdrücke kommst du ja trotzdem dran.
|
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Ich habe es anders überprüft. Angezeigt wird mir nur die zweite Showmessage.
Delphi-Quellcode:
if Assigned(frmInfo) then
ShowMessage('Assigned'); if frmInfo= nil then ShowMessage('Nil'); |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Assigned fragt ja auch ab ob etwas UNGLEICH nil ist.
Natürlich wird dann nur einer deiner 2 MessageBoxen angezeigt ;)
Delphi-Quellcode:
if Assigned(frmInfo) then // = if frmInfo <> nil then
ShowMessage('Assigned'); if frmInfo= nil then ShowMessage('Nil'); |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Also bin ich kein bisschen weiter, weil mir der Debugger nichts anzeigt :P
Ich belasse es einfach bei der if Assigned() then-Abfrage die ich vor jede der vier, fünf Prozeduren schreibe. |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Zitat:
Du MUSST lernen wie man mit dem Debugger arbeitet. Ansonsten bist du früher oder später komplett aufgeschmissen. |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Ich habe den Fehler gefunden. Sag ich euch aber nicht, weil es ein zu extremer "Wie kann man so dumm und blind sein"-Fehler ist :stupid:
Man sollte nicht auf Variablen eines Formulars zugreifen, wenn das Formular noch nicht erstellt wurde :roll: |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Man sollte die automatisch erstellten globalen Variablen eines Formulars gar nie verwenden:!:
|
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Zitat:
Wäre schön, wenn es eine Konfigurationsmöglichkeit geben würde, dass neue erstellt Formulare nicht automatisch erzeugt werden und diese globale Formularvariable erst gar nicht angelegt wird. |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
|
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Zitat:
(Aber diese blöde Formularvariable wird dennoch erstellt) |
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 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