Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich? (https://www.delphipraxis.net/196060-assigned-tform-instanzenvariable-funktionsuebergabe-moeglich.html)

günni0 19. Apr 2018 19:06

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?

hoika 19. Apr 2018 19:14

AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
 
Hallo,
die richtige Position der NIL-Auswertung ist in der Prozedur selbst.

günni0 19. Apr 2018 19:14

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.

bernau 19. Apr 2018 22:18

AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
 
Zeig doch mal deinen bestehenden Code.

Jasocul 20. Apr 2018 06:10

AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
 
Zitat:

Zitat von günni0 (Beitrag 1399886)
Dann bleibt ja nichts anderes übrig als ein if vor die Funktion zu setzen in diesem Falle. Denn der Parameter ist die Instanz selbst.

Nein.
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;

TigerLilly 20. Apr 2018 07:07

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.

günni0 20. Apr 2018 07:21

AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
 
Zitat:

Zitat von Jasocul (Beitrag 1399907)
Zitat:

Zitat von günni0 (Beitrag 1399886)
Dann bleibt ja nichts anderes übrig als ein if vor die Funktion zu setzen in diesem Falle. Denn der Parameter ist die Instanz selbst.

Nein.
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;

Spätestens beim Aufruf von MeineFunktion() kracht es dann.
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);

bernau 20. Apr 2018 07:49

AW: Assigned + TForm-Instanzenvariable in Funktionsübergabe möglich?
 
Zitat:

Zitat von günni0 (Beitrag 1399914)
Spätestens beim Aufruf von MeineFunktion() kracht es dann.

Das bezweifel ich mal. Mit dem assign wird ja kontrolliert, ob aForm NIL ist.

Es könnte aber sein, daß aForm nicht NIL ist sondern einen undefinierten Zustand hat. Das solltest du mit dem Debugger mal kontrollieren.

günni0 20. Apr 2018 07:51

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 Formular wird bei Programmstart nicht erzeugt.

Zitat:

Das solltest du mit dem Debugger mal kontrollieren.
Starter :thumb:

SProske 20. Apr 2018 08:08

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.
Seite 1 von 3  1 23      

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