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
Thema durchsuchen
Ansicht
Themen-Optionen

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
LarsSchwencke

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

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 10. Jan 2014, 13:18
Hallo DeddyH,

klasse, das war genau das was ich brauchte.
Da ich aber nur ein Formular und eine Unit ohne Formulat habe
mußte ich es nur etwas anpassen aber jetzt funktioniert es
super.

Danke.
  Mit Zitat antworten Zitat
Sigi55

Registriert seit: 3. Jan 2010
36 Beiträge
 
Delphi 5 Professional
 
#2

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 18. Apr 2015, 19:09
Hallo DeddyH,

Superteil, löppelt prima, nur im Gegensatz zum Lars bekomm ich's nicht gebacken
den Messagemanager in eine unit OHNE Formular einzubinden.

Hallo DeddyH,

klasse, das war genau das was ich brauchte.
Da ich aber nur ein Formular und eine Unit ohne Formulat habe
mußte ich es nur etwas anpassen aber jetzt funktioniert es
super.

Danke.

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;
Kannst Du (oder jemand anders ) mir das bitte anpassen ??
Ich raff das nicht ...

In einem Datamodul hab ichs zum Laufen bekommen
Delphi-Quellcode:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MsgManager, ExtCtrls;

type
  TDataModule4 = class(TDataModule)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    FManager: TMessageManager;
    { Private declarations }
  public
    { Public declarations }
    property Manager: TMessageManager read FManager write FManager;
  end;

  procedure test;

var
  DataModule4: TDataModule4;

implementation

{$R *.dfm}

procedure test;
begin
 if Assigned(DataModule4.FManager) then
    DataModule4.FManager.AddMessage('hallo test aus datamod');
end;

procedure TDataModule4.Timer1Timer(Sender: TObject);
begin
 if Assigned(FManager) then
  FManager.AddMessage('hallo timer aus datamod');
end;

end.

Vielen Dank schomal ...
Gruß

Sigi
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 18. Apr 2015, 22:42
Hilft Dir dieses Beispiel weiter? Die Klasse TMsgManager steht in einer eigenen Unit und ist unverändert, das Formular hat wieder ein Memo, erzeugt eine Instanz des Managers und weist ihr den EventHandler zu, innerhalb dessen ins Memo geschrieben wird, alles genau wie oben gezeigt. Neu ist die 2. Unit, die kein Formular besitzt, sondern nur eine Klasse deklariert.
Delphi-Quellcode:
unit MessageSend;

interface

uses SysUtils, MsgManager;

type
  TMessageGenerator = class
  private
    FManager: TMessageManager;
  public
    procedure CountTo1000;
    property Manager: TMessageManager read FManager write FManager;
  end;

implementation

{ TMessageGenerator }

procedure TMessageGenerator.CountTo1000;
var
  Number: integer;
begin
  for Number := 1 to 1000 do
    if Number mod 10 = 0 then
      if Assigned(Manager) then
        Manager.AddMessage(IntToStr(Number));
end;

end.
Der ButtonClick des Formulars sieht dann so aus:
Delphi-Quellcode:
procedure TfrmMitMemo.Button1Click(Sender: TObject);
var
  Generator: TMessageGenerator;
begin
  Generator := TMessageGenerator.Create;
  try
    Generator.Manager := FManager;
    Generator.CountTo1000;
  finally
    Generator.Free;
  end;
end;
Gedacht habe ich mir das Ganze letztes Jahr so: der "Konsument" der Nachrichten erzeugt den Manager und weist ihm einen OnNewMessage-Handler zu. Die benachrichtigende Klasse besitzt eine Property vom Typ des Managers, erstellt aber keine eigene Instanz, sondern bekommt diese vom Konsumenten zugewiesen. Sobald sie etwas mitzuteilen hat, ruft sie einfach die AddMessage-Methode ihres zugewiesenen Managers (so vorhanden) auf.
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
Sigi55

Registriert seit: 3. Jan 2010
36 Beiträge
 
Delphi 5 Professional
 
#4

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 19. Apr 2015, 07:00
Moin Detlef,

perfekt, super, löppelt wunderbar ... Vielen Dank

Gedacht habe ich mir das Ganze letztes Jahr so: der "Konsument" der Nachrichten erzeugt den Manager und weist ihm einen OnNewMessage-Handler zu ...
Genau mein Ansatz, bin gerade dabei möglichst alle hardcodierten Abhängigkeiten von unit zu unit auszumerzen ...

Zitat von DeddyH:
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.
Das hab ich nicht verstanden, was soll das bedeuten ?

Und, Da kommen auch gleich weitere Ideen auf:
Ich habe meistens mit Datenumschaufeln oder Prüfroutinen zu tun die über etliche Datensätze iterieren und da verwende ich gern eine Progressbar. Kann man das so umbauen oder erweitern das der Fortschritt in unit2 auf der Hauptform angezeigt wird ?

Ich denke, das Thema ist noch nicht durch und sollte auch als Beispiel in die Codelib.

Vielen Dank schonmal und Gruß

Sigi
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 19. Apr 2015, 09:22
Das mit dem Dangling Pointer bedeutet, dass wir bei dieser Vorgehensweise ja 2 Verweise auf dieselbe Instanz haben. Wird das Formular, das diese anlegt, zerstört, gibt es sie wieder frei, somit zeigt der Verweis in der sendensen Klasse dann ins Leere.
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
Sigi55

Registriert seit: 3. Jan 2010
36 Beiträge
 
Delphi 5 Professional
 
#6

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 19. Apr 2015, 09:43
Moin nochmal ...

Das mit dem Dangling Pointer bedeutet, dass wir bei dieser Vorgehensweise ja 2 Verweise auf dieselbe Instanz haben. Wird das Formular, das diese anlegt, zerstört, gibt es sie wieder frei, somit zeigt der Verweis in der sendensen Klasse dann ins Leere.
Ok, verstanden, aber ich wollt eh nix kaputt machen

Und mit der Progressbar ?
Ich hab mir überlegt, ich könnte das ja so machen wie bei z.B. einer Stringliste mit "name" and "value" ('Hans=12'), also quasi als Parameter übergeben und dann in der Hauptform ausgeben oder auch ignorieren, oder ist das blö.. ?

Gruß

Sigi
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 19. Apr 2015, 10:09
Eigentlich bringt doch diese MessageManager-Klasse keinen Vorteil gegenüber dem einfachen Zuweisen eines Callbacks/einer Event-Methode. Gut es fügt noch ein wenig mehr Code hinzu - macht es also aufwendiger/komplizierter ohne einen wirklichen Mehrwert zu schaffen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:55 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