Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zirkuläre Referenzen (https://www.delphipraxis.net/207180-zirkulaere-referenzen.html)

lxo 2. Mär 2021 10:27

AW: Zirkuläre Referenzen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1484252)
Hier noch eine Lösung auf Basis von System.Messaging.

:thumb: genau sowas hab ich gesucht, danke !

lxo 2. Mär 2021 13:16

AW: Zirkuläre Referenzen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1484252)
Hier noch eine Lösung auf Basis von System.Messaging.

Sehr coole Lösung.
Eine Frage hätte ich da aber noch.
Wie würdest du vorgehen, wenn man für das Open der Form noch Parameter mitgeben möchte und auch ein Result zurück bekommen möchte?

Also ich habe da was, bin mir aber nicht sicher ob das die eleganteste Lösung ist.

Delphi-Quellcode:
  TMainFormParameter = class
    ParameterIN,
    ParameterOUT: String;
  end;
  TMainFormMessage = class( TMessage< TMainFormParameter>);

  TChildFormParameter = class
    ParameterIN,
    ParameterOUT: String;
  end;
  TChildFormMessage = class( TMessage< TChildFormParameter>);

.....

  var lParameter := TChildFormParameter.Create;
  try
    lParameter.ParameterIN := 'Ich komme aus MainForm und gebe dies als Parameter mit';
    TMessageManager.DefaultManager.SendMessage( Sender, TChildFormMessage.Create( lParameter));
  finally
    ShowMessage( lParameter.ParameterIN + sLineBreak +
                 lParameter.ParameterOUT);
    lParameter.Free;
  end;
Aufgrund von "const M: TMessage", könnte ich Records nur als Konstante-Parameter mitgeben oder könnte man das auch irgendwie mit Records machen?

TiGü 2. Mär 2021 14:15

AW: Zirkuläre Referenzen
 
Delphi-Quellcode:
procedure TTMainForm.Button1Click(Sender: TObject);
var
  Msg: TOpenChildFormMessage;
begin
  Msg := TOpenChildFormMessage.Create;
  Msg.ParameterIN := 'Ich komme aus MainForm und gebe dies als Parameter mit';
  TMessageManager.DefaultManager.SendMessage(Self, Msg, False); // das False ist wichtig!
  ShowMessage(Msg.ParameterOut);
  Msg.Free;
end;
Delphi-Quellcode:
 
TOpenChildFormMessage = class(TMessage)
  public
    ParameterIN,
    ParameterOUT: String;
  end;
Delphi-Quellcode:
procedure MsgOpenChildForm(const Sender: TObject; const M: TMessage);
var
  Msg: TOpenChildFormMessage;
begin
  if M is TOpenChildFormMessage then
  begin
    Msg := TOpenChildFormMessage(M);
    ShowMessage(Msg.ParameterIN);
    TChildForm.OpenChildForm(Sender);
    Msg.ParameterOut := 'Hallo Welt!';
  end;
end;
Mit records ist auch möglich, dann musst du dir die Instanz auch merken und auf dein Record per TChildFormMessage.Value (Value ist dann der generische Typ) zugreifen.

lxo 2. Mär 2021 14:40

AW: Zirkuläre Referenzen
 
:thumb:
Vielen Dank, da hab ich bisschen zu kompliziert gedacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 Uhr.
Seite 2 von 2     12   

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