AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zirkuläre Referenzen

Ein Thema von lxo · begonnen am 2. Mär 2021 · letzter Beitrag vom 2. Mär 2021
Antwort Antwort
Seite 2 von 2     12
lxo

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

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 11:27
Hier noch eine Lösung auf Basis von System.Messaging.
genau sowas hab ich gesucht, danke !
  Mit Zitat antworten Zitat
lxo

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

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 14:16
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?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
2.835 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#13

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 15:15
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.
  Mit Zitat antworten Zitat
lxo

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

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 15:40

Vielen Dank, da hab ich bisschen zu kompliziert gedacht.
  Mit Zitat antworten Zitat
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 11:36 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