![]() |
UnterForm mit Daten aus Hauptform versorgen
Hallo,
ich habe eine HauptForm und eine UnterForm. Die HauptForm kennt die UnterForm (unter Uses aufgeführt). Die UnterForm kennt die HauptForm nicht. Wenn ich nun in der UnterForm Daten benötige die nur die HauptForm kennt, dann mache ich es so: In der UnterForm wird ein Event ausgelöst welches in der HauptForm eine Procedure aufruft. In der Procedure werden die benötigten Daten dann in eine Property der UnterForm geschrieben. Die UnterForm holt sich dann die Daten dort ab und verarbeitet sie weiter. Das funktioniert so, ist aber nicht gerade elegant. Gibt es evt. eine „schöne“ Lösung ? Viele Grüße Hannes |
AW: UnterForm mit Daten aus Hauptform versorgen
Meinst du so was:
![]() |
AW: UnterForm mit Daten aus Hauptform versorgen
Moin Hannes,
wie wäre es mit einem Datenmodul auf das Beide Formulare zugreifen? Gruß HEiko |
AW: UnterForm mit Daten aus Hauptform versorgen
Zitat:
Wenn ich z.B. mit Frames arbeite (statt z.B. mit TPageControl und Tabsheets), werden die Frames alle von der Mainform gesteuert. Das hat den Vorteil, daß ich z.B. Datenbank-Operationen quasi nur einmal programmieren muß und sie auf alle Frames, die Tabellen darstellen und bearbeiten lassen, anwenden kann. Die Frames stellen dabei eigentlich nur die Schnittstelle für den Anwender dar: Bedienung (Editfelder, DBGrids etc.) und Darstellung. Die eigentliche Funktionalität (Append, Delete, Edit, Post, Cancel etc.) erledigt eine eigene Klasse, die je nach dem, welches Frame gerade angezeigt wird, das entsprechende Dataset bzw. Query aus dem Datenmodul verwendet. Aber das würde jetzt zu weit führen. Benötigen die Frames in seltenen Fällen doch einmal Reaktionen von der MainForm, mache ich das ganz genau so, wie du es oben dargestellt hast: Ich löse ein Ereignis aus. Die allermeisten Ereignisse werden bei mir aber vom Datenmodul ausgelöst und von der MainForm verarbeitet. Also ich finde diesen Aufbau gelungen und in gewisser Weise auch "schön", weil für mich übersichtlich und leicht zu erweitern/ändern. Zitat:
|
AW: UnterForm mit Daten aus Hauptform versorgen
Hallo,
elegant wäre in meinen Augen ein "Funktionszeiger" für ein Ereignis. Das Ereignis in der UnterForm ruft eine Funktion in der HauptForm auf und kriegt die gewünschten Daten gleich als Rückgabewert der Funktion geliefert. Gruß Hannes |
AW: UnterForm mit Daten aus Hauptform versorgen
Zitat:
|
AW: UnterForm mit Daten aus Hauptform versorgen
Also ich weiß nicht ob du das meinst, aber ich hab verstanden, dass du das Haupt-Formular (z. B. Unit1) hast und ein zweites Formular (z. B. Unit2). Wenn das so ist, kannst du natürlich auch über Kreuz aufeinender zugreifen:
Delphi-Quellcode:
und
unit Unit1;
interface ... implementation uses Unit2; //hier {$R *.dfm}
Delphi-Quellcode:
Das klappt.
unit Unit2;
interface uses Windows, ..., Unit1; ... implementation {$R *.dfm} Eine andere Möglichkeit wären Messages. Du schickst eine Message an das Hauptform und bekommst etwas zurück:
Delphi-Quellcode:
und
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const MSG_TEST = WM_USER + 1; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } procedure MsgTest(var Msg: TMessage); message MSG_TEST; public { Public-Deklarationen } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.MsgTest(var Msg: TMessage); var s: String; begin s := 'Hallö Welt'; Msg.Result := Integer(PChar(s)); end;
Delphi-Quellcode:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const MSG_TEST = WM_USER + 1; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); var iResult: Integer; s: String; begin iResult := SendMessage(Application.MainForm.Handle, MSG_TEST, 0, 0); s := PChar(iResult); ShowMessage(s); end; |
AW: UnterForm mit Daten aus Hauptform versorgen
Suchst Du vielleicht so etwas?
Delphi-Quellcode:
Das Formular, das diese Klasse benutzt:
type
(* Methodensignatur für eigenen Eventhandler *) TOnSomethingHappenedEvent = procedure(Sender: TObject; var Value: integer) of object; TBlubb = class private (* Feld des oben definierten Eventhandlers *) FOnSomethingHappened: TOnSomethingHappenedEvent; (* Das Feld, das ggf. von außen geändert werden soll *) FValue: integer; public (* Auslösende Methode *) procedure DoSomething; property OnSomethingHappened: TOnSomethingHappenedEvent read FOnSomethingHappened write FOnSomethingHappened; end; ... { TBlubb } procedure TBlubb.DoSomething; begin (* Falls Handler zugewiesen, ausführen *) if Assigned(FOnSomethingHappened) then FOnSomethingHappened(self, FValue); ShowMessage(IntToStr(FValue)); end;
Delphi-Quellcode:
type
TForm1 = class(TForm) btnGo: TButton; procedure btnGoClick(Sender: TObject); private { Private-Deklarationen } procedure DoOnSomethingHappened(Sender: TObject; var Value: integer); public { Public-Deklarationen } end; ... { TForm1 } procedure TForm1.DoOnSomethingHappened(Sender: TObject; var Value: integer); begin Value := 42; end; procedure TForm1.btnGoClick(Sender: TObject); var Blubb: TBlubb; begin Blubb := TBlubb.Create; try (* Eventhandler zuweisen *) Blubb.OnSomethingHappened := DoOnSomethingHappened; (* Auslösende Methode aufrufen *) Blubb.DoSomething; finally Blubb.Free; end; end; |
AW: UnterForm mit Daten aus Hauptform versorgen
Hallo DeddyH,
das gefällt mir schon mal sehr gut. Vielen Dank Hannes |
AW: UnterForm mit Daten aus Hauptform versorgen
Das ist aber doch genau das, was du bereits hattest, wie du in deinem Eingangsposting ausgeführt hast:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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 by Thomas Breitkreuz