| Autor |
Beitrag |
FloFri
      
Beiträge: 97
|
Verfasst: Mo 11.08.03 18:09
Hi!
Ich wollte mal fragen, ob es möglich ist, Daten zwischen zwei MDI-Child windows auszutauschen, ohne externe speichermedien, wie textdateien oder registry zu benutzen?
So nach dem Motto, das eine Child schreibt etwas in eine Variable, das andere liest sie wieder aus.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 11.08.03 18:34
Du musst die Variablen einfach in de Unit im public-Bereich deklarieren, dann kannst Du vom anderen Child über
Delphi-Quelltext
darauf zugreifen
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Mo 11.08.03 18:47
brrrr,
dat is aba nich die feine englische art.
Man(n) nehme keine als public deklarieren Variablen sondern wenn schon, properties. Beispiele gibts zuhauf in der Delphi-Hilfe.
Woher soll denn deine Form wissen, dass die Variable XYZ einfach mal so von "ausserhalb" geändert wurde?
Noch ein Tip: ich realisiere sowas via Messages. Message ans Parent und der verteilt die innerhalb seiner MDI-Childs.
grez
msch
|
|
FloFri 
      
Beiträge: 97
|
Verfasst: Mo 11.08.03 19:03
@MSCH hast du eventuel ein tut oder so über messages, da ich die version von UGrohne nicht benutzen kann, da die Cilds sich gegenseitig nicht direkt kennen, sondern ich nur über die parent-anwendung gehen kann.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 11.08.03 22:15
| MSCH hat folgendes geschrieben: | | dat is aba nich die feine englische art. |
Reicht aber IMHO für die meisten Anwendungen, vor allem bei Anfängern.
|
|
oPPi
      
Beiträge: 66
MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
|
Verfasst: Di 12.08.03 02:11
hy,
was willst du den genau an die entsprechenden childs weitergeben? wenn du z.b. text aus einem edit feld ins andere übertragen willst kannste das folgendermaßen machen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| unit Hauptform;
interface
uses ...
type ...
private public end;
var Frm_Haupt: TFrm_Haupt;
implementation
uses Frageform; {$R *.dfm}
...
procedure TFrm_Haupt.Btn_FrageClick(Sender: TObject); begin Frm_Frage := Tfrm_Frage.Create(self); Frm_Frage.WindowState := wsNormal; Frm_Frage.Show; end; |
Wenn das MDI-Child dann angezeigt wird kannst du über die ensprechende Schaltfläche Daten ans Hauptformular schicken:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| unit Frageform; interface
uses ...
type ...
private public end;
var Frm_Frage: TFrm_Frage;
implementation
uses Hauptform; {$R *.dfm}
...
procedure TFrm_Frage.btn_YesClick(Sender: TObject); begin Frm_Haupt.txt_Search.Text := 'Hallo'; end; |
Ich hoffe ich hab dir weiterhelfen können ...
Gruß
oPPi
|
|
FloFri 
      
Beiträge: 97
|
Verfasst: Di 12.08.03 06:13
Danke für deine Hilfe, jedoch kann ich
Delphi-Quelltext
nicht benutzen, da die Child-Windows als Packages eingebunden werden und daher das Hauptformular zur erstellzeit nicht kennen.
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Di 12.08.03 17:59
ich versuchs mal mit Messages:
also erstes eine uses, in der nur die Message-IDs deklariert werden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| unit defines;
interface const wm_SendeIrgentwas = wm_user + 1; wm_SendeNochwas = wm_user + 2; implementation end. |
Dein Hauptprogramm
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| uses defines,...;
type MyForm = Class(TForm) ... public procedure WMSendeIrgentwas(var Msg:TMessage);Message wm_SendeIrgentwas; .... end;
procedure MyForm.WMSendeIrgentwas(var Msg:TMessage); var I:Integer; begin for I:= 0 to MDIChildCount-1 do PostMessage(MDIChildren[I].Handle,Msg.Msg,Msg.wParam,Msg.lParam); end; |
dein Client:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| uses Defines,...; type MyClientForm = Class(TForm) ... public procedure WMSendeIrgentwas(var Msg:TMessage);Message wm_SendeIrgentwas;
procedure MyClientForm.WMSendeIrgentwas(var Msg:TMessage); begin end; |
Das ist das ganze Geheimniss.
Wenn der Parent nicht die Message an alle verteilen soll, so kannst du da immer noch IF() Schleifen uä. einbauen.
z.b.
if MDIChildren[i] is TAdressWindow then....
grez
msch
|
|
FloFri 
      
Beiträge: 97
|
Verfasst: Di 12.08.03 20:09
und wie kann ich ein child eine msg an das hauptprog schicken lassen, ohne die hauptunit in die childunit einzubauen?
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Mi 13.08.03 18:18
schau was ich geschrieben habe. Die Einzige Unit welche Beide verwenden ist "defines", dort wo die Messages definiert werden.
grez
msch
|
|
FloFri 
      
Beiträge: 97
|
Verfasst: Mo 29.09.03 09:34
Sorry, das ich dieses alte Thema nochmal hochhole, aber ich habe da ein Problem:
Konnte das mit den Messages jetzt mal testen, stehe aber vor folgendem Problem: Wie komme ich an den HWND vom Parent? Bei parent.handle bekomme ich einen Fehler.
Ich hoffe mir kann da jemand Helfen.
MfG
FloFri
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Mo 29.09.03 11:01
übergeb das Handle des Parent an die Childs via create und speicher es dort im private Bereich ab.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type TChildForm= TForm private ParentHandle:Hwnd; public constructor Create(AOwner:TComponent;AHandle:Hwnd);reintroduce; end;
constructor TChildForm.Create; begin inherited Create(Aowner); ParentHandle:= AHandle; end;
... PostMessage(ParentHAndle,....) ... |
grez
msch
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
FloFri 
      
Beiträge: 97
|
Verfasst: Mo 29.09.03 11:32
Das geht leider auch nicht, da die Childs ja erst zur laufzeit eingebunden werden und das Parent daher zur erstellzeit nicht weis, das der constructor abgeändert wurde.
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Mo 29.09.03 17:24
 hä?
natürlich weiss die Parent über seine MDI-Childs bescheid. Du bindest doch die Unit (TMDIChilds) ein. Wie rufst du denn sonst die MDI-Childs auf?
grez
msch
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|