Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Meldungen aus einer Unit an ein Formular senden (https://www.delphipraxis.net/178356-meldungen-aus-einer-unit-ein-formular-senden.html)

LarsSchwencke 3. Jan 2014 14:58

Meldungen aus einer Unit an ein Formular senden
 
Hallo,

weiß jemand wie ich Informatione aus einer Unit(ohne Formular) an eine andere Unit mit Formular übergeben kann.
Ich habe ein VCL-Formularanwendung geschieben in der es ein Memofeld gibt.
Diese Formularanwendung ruft eine Unit(hier Unit2 genannt) auf, die Meldungen in das Memofeld der Formularanwendung schreiben soll.
Die Unit2 möchte ich in unterschiedlichen Programmen immer wieder verwenden können.
Wie kann ich dies Realisieren ohne die Formularanwendung unter uses der Unit2 anzugeben.

Würde mich über jeden Lösungsvorschlag sehr freuen.
MfG
Lars

Dalai 3. Jan 2014 15:02

AW: Meldungen aus einer Unit an ein Formular senden
 
Du brauchst irgendeinen gemeinsamen Nenner. Ich würde das so machen: Unit2 beinhaltet Funktionen/Methoden, die StringListen (entweder TStrings oder TStringList) als Parameter bekommen. Die Formular-Unit übergibt dann die Eigenschaft TMemo.Lines (vom Typ TStrings) an die Funktionen/Methoden von Unit2.

MfG Dalai

DeddyH 3. Jan 2014 15:08

AW: Meldungen aus einer Unit an ein Formular senden
 
Oder Unit2 enthält eine schnuckelige kleine Klasse, der man die zu befüllenden TStrings als Property zuweist.

Perlsau 3. Jan 2014 15:22

AW: Meldungen aus einer Unit an ein Formular senden
 
@ LarsSchwencke:

Das Ereignis, das das Schreiben von Text in dein Memo auslösen soll, stammt ja vermutlich aus deiner Formular-Unit. Da wäre es irgendwie mit der Kirche ums Dorf und durch die Brust ins Auge geschossen, hier den Umweg über eine zweite Unit zu gehen. Wenn es einfach nur darum geht, eine bestimmte Methode, die Text in ein Memo schreibt, in anderen Anwendungen wiederverwenden zu können, würde ich das erstmal grundsätzlich nicht über eine zweite Unit machen, sondern mir die Methode einfach irgendwo abspeichern. Ich mache das mit meiner Codeverwaltung, die ich im Rahmen einer kompletten Projektverwaltung etnwickelt hatte. Du kannst z.B. Warnecke's Code-Orakel verwenden, falls er sein Programm noch als Freeware anbietet. Oder du schaffst dir ein Verzeichnis, wo du Methoden, die du ständig wieder benötigst oder zu benötigen glaubst, als Textdateien abspeicherst.

Natürlich gibt es auch Fälle, in denen es sinnvoll ist, eine Methode in einem Formular von einer anderen Unit/einem anderen Formular aus anzustoßen, z.B. wenn im Hauptformular ich auf das Verschieben des Datensatz-Zeigers einer Tabelle (AfterScroll) aus einem Datenmodul reagieren möchte oder wenn ich z.B. in einem eigenen Thread in einer anderen Unit meine Postfächer abrufe, dem zuständigen Formular mitzuteilen, wenn eine neue Email eingegangen ist usw. In diesen Fällen erzeugt man Ereignisse selbst und reagiert darauf in der entsprechenden Unit.

ngott2 3. Jan 2014 15:29

AW: Meldungen aus einer Unit an ein Formular senden
 
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.

p80286 3. Jan 2014 15:57

AW: Meldungen aus einer Unit an ein Formular senden
 
Zitat:

Zitat von ngott2 (Beitrag 1241954)
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

LarsSchwencke 8. Jan 2014 13:57

AW: Meldungen aus einer Unit an ein Formular senden
 
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

DeddyH 8. Jan 2014 14:05

AW: Meldungen aus einer Unit an ein Formular senden
 
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.

Der schöne Günther 8. Jan 2014 14:07

AW: Meldungen aus einer Unit an ein Formular senden
 
Zitat:

Zitat von p80286 (Beitrag 1241962)
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.

baumina 8. Jan 2014 14:09

AW: Meldungen aus einer Unit an ein Formular senden
 
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:
Delphi-Quellcode:
  SchreibeInMemo(memo1.Lines);


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 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