Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Form und Frame kommunikation (https://www.delphipraxis.net/171794-form-und-frame-kommunikation.html)

youuu 25. Nov 2012 22:15

Form und Frame kommunikation
 
Hi ich habe mal eine Frage bezüglich Frames und Forms.

Also ich habe eine Main Form.
Mit dieser erstelle ich eine 2. Form(Second) auf der ein Frame liegt. Das kommunizieren von Form Second und dem Frame ist kein Problem.

Wenn ich nun aber Form Second noch ein 2. mal dazu erstelle, kommuniziert der Frame von Form Second 1 auch mit Form Second 2.
Wie muss ich vorgehen um dies zuverhindern und jeder Frame sein Owner Form kennt?

Sir Rufo 25. Nov 2012 22:33

AW: Form und Frame kommunikation
 
Eigentlich ist das kein Problem.

Zeig mal den Code wo die beiden kommunizieren sollen/wollen

stahli 25. Nov 2012 22:37

AW: Form und Frame kommunikation
 
Hast Du jede Formularinstanz in einer eigenen Variable gespeichert?
Dann müsstest Du beide getrennt ansprechen können.

Falls Du jedoch nach Komponentennamen suchen solltest, könnte es evtl. zu Unklarheiten kommen.

Wie Sir Rufe meinte: Sage mal etwas mehr, was Du genau machst.

Medium 25. Nov 2012 22:39

AW: Form und Frame kommunikation
 
Über den Parent des Frames sollte doch schon eine entsprechend geeignete Referenz zur Verfügung stehen, vorausgesetzt die Frames liegen direkt auf den Formularen, und nicht z.B. in Panels (oder gar Kaskaden von Panels).

youuu 25. Nov 2012 22:41

AW: Form und Frame kommunikation
 
Ja es sind die gleichen Namen :/

Form Second 1 (gleiche Name)+ Frame --> nun soll dieser Frame eine Edit von Form Second 1 auslesen, alleridngs ließt es nun von Form 2 Second das Edit aus.
Form Second 2 (gleiche Name)+ Frame

stahli 25. Nov 2012 22:50

AW: Form und Frame kommunikation
 
Ich vermute, dass Du die Formularinstanzen nicht korrekt verwaltest.
Müsste in etwa so sein:

Delphi-Quellcode:
F1 := TMyForm.Create(Self);
F1.Color := clGreen;
F2 := TMyForm.Create(Self);
F2.Color := clRed;
Über F1.MyFrame... und F2.MyFrame... solltest Du dann beide ansprechen können.
Über die Farben kann man mal schnell kontrollieren, worauf man eigentlich gerade zugreift.

Sir Rufo 25. Nov 2012 23:02

AW: Form und Frame kommunikation
 
Eleganter ist das natürlich zu lösen, wenn die Frames nicht auf die Form zugreifen, sondern wenn die Form dem Frame (über eine Frame-Property) mitteilt worauf zugegriffen werden soll.

Dann ist es dem Frame egal, worin man den einbettet.

himitsu 25. Nov 2012 23:46

AW: Form und Frame kommunikation
 
Zitat:

Zitat von Sir Rufo (Beitrag 1192908)
Eleganter ist das natürlich zu lösen, wenn die Frames nicht auf die Form zugreifen, sondern wenn die Form dem Frame (über eine Frame-Property) mitteilt worauf zugegriffen werden soll.

Dann ist es dem Frame egal, worin man den einbettet.

Genau.

Betrachte das Frame einfach wie ein Edit.

- die Form kann mit dem Frame machen was sie will
- und wenn das Frame etwas mitteilen will, dann bietet es der Form ein passendes Event (ala OnChange), wo sich die Form dann reinhängen kann

youuu 26. Nov 2012 10:29

AW: Form und Frame kommunikation
 
Naja, also.

Ich habe ein Programm, welches Kundendaten verwaltet.
Wenn ich einen Datensatz aufrufe wird das "Second Form" erstellt. Wenn ich einen 2. Datensatz öffne wird wieder ein "Second Form" erstellt.

Ich kann also denen keine 2 unterschiedlichen Namen verpassen, da es ein und die selbe procedure ist.
Das Frame ist in einer Pagecontrol eingebettet mit wiederum einem Virtualstringview, in dem Daten ausgegeben werden, die auf der "Second Form" stehen (Kundennummer wird sich vom Second Form geholt um Daten in VST einzubetten.)

Ich wüsste jetzt also nicht wie ich das Frame als Edit verwenden soll.
Gibts da Tipps für?

Bei einer Form zu Form, übergebe ich immer einefach eine Variable an die 2. Form, die im Privat Bereich deklariert habe.
Aber das geht in einem Frame nicht oder, da ich das Frame ja nicht erst seperat erstelle.

Medium 26. Nov 2012 11:00

AW: Form und Frame kommunikation
 
Delphi-Quellcode:
procedure fraMyFrame.Button1Click(Sender: TObject);
begin
  (Parent as TSecondForm).edSomeEdit.Text := 'foo';
end;
Greift bei mir wunderbar immer nur auf das "TSecondForm" zu, auf dem das Frame auch wirklich liegt.

youuu 26. Nov 2012 11:05

AW: Form und Frame kommunikation
 
Oh super Danke, werde ich nachher gleich ausprobieren

Sir Rufo 26. Nov 2012 11:10

AW: Form und Frame kommunikation
 
Zitat:

Zitat von Medium (Beitrag 1192947)
Delphi-Quellcode:
procedure fraMyFrame.Button1Click(Sender: TObject);
begin
  (Parent as TSecondForm).edSomeEdit.Text := 'foo';
end;
Greift bei mir wunderbar immer nur auf das "TSecondForm" zu, auf dem das Frame auch wirklich liegt.

Damit darf der Frame aber ausschließlich auf einem TSecondForm Formular liegen, sonst knallt es.

Eleganter ist es, dem Frame entweder passende Events oder eben von der Form aus den Zugriff auf die benötigten Teile zuzuweisen.

Delphi-Quellcode:
fraMyFrame = class( TFrame )
  property FormEdit : TEdit;
end;

procedure fraMyFrame.Button1Click(Sender: TObject);
begin
  if Assigned( FormEdit ) then
    FormEdit.Text := 'foo';
end;

himitsu 26. Nov 2012 11:18

AW: Form und Frame kommunikation
 
Zitat:

Zitat von Sir Rufo (Beitrag 1192952)
Damit darf der Frame aber ausschließlich auf einem TSecondForm Formular liegen, sonst knallt es.

Auch nicht in einem Panel, Tabsheet oder Dregleichen, innerhalb soeiner Form.

Man könnte zwar den Owner verwenden, aber der kann ja auch sonstwo liegen.

Medium 26. Nov 2012 11:18

AW: Form und Frame kommunikation
 
@TE und Sir Rufo und himi: Siehe #4 :roll:

youuu 26. Nov 2012 18:41

AW: Form und Frame kommunikation
 
So, es hat geklappt danke sehr.

Delphi-Quellcode:
(Owner as TSecondForm).edSomeEdit.Text := 'foo';
Parent ging leider nicht, das es auf einem Panel liegt.

himitsu 26. Nov 2012 18:59

AW: Form und Frame kommunikation
 
Dennoch würde ich nochmals auf #7, #8 und Dergleichen verweisen.


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