AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Meldungen aus einer Unit an ein Formular senden

Meldungen aus einer Unit an ein Formular senden

Ein Thema von LarsSchwencke · begonnen am 3. Jan 2014 · letzter Beitrag vom 19. Apr 2015
Antwort Antwort
Seite 1 von 2  1 2   
ngott2

Registriert seit: 26. Aug 2013
81 Beiträge
 
Delphi 10 Seattle Professional
 
#1

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 3. Jan 2014, 15:29
Wenn ich das richtig verstehe!
Dann kannst einfach eine Funktion in der Unit2 schreiben die eine String liste zurück gibt.

Beispiel
Code:
MeinMemo.text := ObjectFromUnit2.DoSomethingfunction;

Wenn ich dein Problem falsch verstanden habe, dann sorry.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 3. Jan 2014, 15:57
Wenn ich das richtig verstehe!
Dann kannst einfach eine Funktion in der Unit2 schreiben die eine String liste zurück gibt.

Beispiel
Code:
MeinMemo.text := ObjectFromUnit2.DoSomethingfunction;

Wenn ich dein Problem falsch verstanden habe, dann sorry.
Das ist nicht so optimal. Wenn Du (String)Listen befüllen willst, dann solltest Du diese an eine prozedure übergeben (siehe #2) und nicht durch eine Funktion erstellen lassen. Du könntest Dir ein Speicherleck einhandeln.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
LarsSchwencke

Registriert seit: 28. Sep 2012
19 Beiträge
 
#3

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 8. Jan 2014, 13:57
Hallo,

vielen Dank für die schnellen Antworten.
Wenn ich es mit einer StringList mache, dann muß ich in der Unit1
über eine Pollingfunktion immer nachschauen ob neue Meldungen in der StringList stehen,
da ich ja nicht weiß wann die Unit2 neue Mitteilungen in die StringList schreibt, oder?

Gibt es eine Möglichkeit das Pollen zu vermeiden.

MfG
Lars
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.669 Beiträge
 
Delphi 12 Athens
 
#4

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 8. Jan 2014, 14:05
Wie gesagt: ich würde mir eine kleine Klasse schreiben, die die Mitteilungen intern in einer Stringliste verwaltet und über ein Event samt zugehöriger Property verfügt, das bei Hinzufügen einer Mitteilung gefeuert wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#5

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 8. Jan 2014, 14:18
Wie gesagt: ich würde mir eine kleine Klasse schreiben, die die Mitteilungen intern in einer Stringliste verwaltet und über ein Event samt zugehöriger Property verfügt, das bei Hinzufügen einer Mitteilung gefeuert wird.
Hallo DeddyH,
könntest du vielleicht kurz ein Code-Beispiel dazu schreiben. Ich sitze vor einem ähnlichen Problem und mich würde interessieren wie man dies universal handhaben könnte.

Danke und Lg
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.669 Beiträge
 
Delphi 12 Athens
 
#6

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 8. Jan 2014, 14:38
Ganz minimale Klasse ohne eigene Stringliste:
Delphi-Quellcode:
unit MsgManager;

interface

uses Classes;

type
  TNewMessageEvent = procedure(Sender: TObject; const NewMsg: string) of object;

  TMessageManager = class
  private
    FOnNewMessage: TNewMessageEvent;
  public
    procedure AddMessage(const NewMessage: string);
    property OnNewMessage: TNewMessageEvent read FOnNewMessage write FOnNewMessage;
  end;

implementation

{ TMessageManager }

procedure TMessageManager.AddMessage(const NewMessage: string);
begin
  if Assigned(FOnNewMessage) then
    FOnNewMessage(self, NewMessage);
end;

end.
Diese Unit wird nun in beiden Formularunits eingebunden. Form1 erstellt die Instanz im FormCreate und weist einen Eventhandler zu:
Delphi-Quellcode:
type
  TfrmMitMemo = class(TForm)
    mmoMessages: TMemo;
    btnShowInput: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnShowInputClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    FManager: TMessageManager;
    procedure AddMessage(Sender: TObject; const NewMsg: string);
  public
    { Public-Deklarationen }
  end;

...

procedure TfrmMitMemo.AddMessage(Sender: TObject; const NewMsg: string);
begin
  mmoMessages.Lines.Add(NewMsg);
end;

procedure TfrmMitMemo.FormCreate(Sender: TObject);
begin
  FManager := TMessageManager.Create;
  FManager.OnNewMessage := AddMessage;
end;
Die andere Formularunit verfügt über eine Property vom Typ TMessageManager, der man dann einfach diese Instanz zuweist:
Delphi-Quellcode:
type
  TfrmInput = class(TForm)
    edtMessage: TEdit;
    btnAdd: TButton;
    procedure btnAddClick(Sender: TObject);
  private
    { Private-Deklarationen }
    FManager: TMessageManager;
  public
    { Public-Deklarationen }
    property Manager: TMessageManager read FManager write FManager;
  end;
Delphi-Quellcode:
procedure TfrmMitMemo.btnShowInputClick(Sender: TObject);
begin
  frmInput.Manager := FManager;
  frmInput.Show;
end;
Der Code innerhalb des Innput-Formulars ist dann recht überschaubar:
Delphi-Quellcode:
procedure TfrmInput.btnAddClick(Sender: TObject);
begin
  if Assigned(FManager) then
    FManager.AddMessage(edtMessage.Text);
end;
Nun noch bei Freigabe des Memo-Formulars ordentlich aufräumen:
Delphi-Quellcode:
procedure TfrmMitMemo.FormDestroy(Sender: TObject);
begin
  FManager.Free;
end;
und fertig ist die Laube. Man muss lediglich sicherstellen, dass man anschließend nicht mehr aus dem Input-Formular auf diesen Manager zugreift, da wir zugegebenermaen dort nun einen dangling pointer lauern haben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#7

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 8. Jan 2014, 15:41
Oi, des ging ja schnell. Vielen Dank, werde mir das mal zu Gemüte führen.

LG
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 8. Jan 2014, 14:09
Wie wärs denn so?

In der Unit ohne Formular:
Delphi-Quellcode:
procedure SchreibeInMemo(MyStrings : TStrings);
begin
  MyStrings.Add('noch ne Zeile');
end;
Und der Aufruf in der Unit mit Formular wäre dann so:
  SchreibeInMemo(memo1.Lines);
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.222 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 8. Jan 2014, 14:07
Wenn Du (String)Listen befüllen willst, dann solltest Du diese an eine prozedure übergeben (siehe #2) und nicht durch eine Funktion erstellen lassen. Du könntest Dir ein Speicherleck einhandeln.
Verstehe ich nicht. Wie das denn? Ich möchte bitte eine StringList haben. Entweder die Funktion gibt mir eine, oder sie gibt mir keine. Wenn ich eine haben wollte, ist es auch meine Verantwortung, die Liste später ordentlich in den Müll zu tun.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.669 Beiträge
 
Delphi 12 Athens
 
#10

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 8. Jan 2014, 14:15
Wenn Du (String)Listen befüllen willst, dann solltest Du diese an eine prozedure übergeben (siehe #2) und nicht durch eine Funktion erstellen lassen. Du könntest Dir ein Speicherleck einhandeln.
Verstehe ich nicht. Wie das denn? Ich möchte bitte eine StringList haben. Entweder die Funktion gibt mir eine, oder sie gibt mir keine. Wenn ich eine haben wollte, ist es auch meine Verantwortung, die Liste später ordentlich in den Müll zu tun.
Wahrscheinlich meint er so etwas: http://www.detlef-heibing.de/program...rueckgabe.html
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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:50 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