![]() |
Zugriff auf Übergeordnetes Objekt?
Hi!
Wie kann man (am besten) auf ein Objekt zugreifen, von dem das, welches zugreifen soll, erstellt worden ist?? MainForm (TForm) erstellt während der Laufzeit DlgForm (TForm), DlgForm soll nun Werte an MainForm zurückgeben, wie kann man das (am besten) umsetzen? (in der implementation die unit des MainForm-Objektes nochmal unter uses zu stellen, ist ja nicht sehr schön, bzw kann zu fehlern führen, nehm ich an?) so, zb:
Delphi-Quellcode:
unit u_main;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IniFiles, JPeg, u_dlg; type TMainForm = class(TForm) Dlg: TDlgForm; (...) end; var MainForm: TMainForm; implementation {$R *.dfm} procedure TMainForm.BtnDlgClick(Sender: TObject); begin Dlg:=TDlgForm.Create(nil); Dlg.ShowModal; end;
Delphi-Quellcode:
unit u_dlg;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IniFiles, JPeg; type TDlgForm = class(TForm) (...) end; var DlgForm: TDlgForm; implementation uses u_main; Danke im Vorraus! |
Re: Zugriff auf Übergeordnetes Objekt?
Versuchs mal mit der Eigenschaft Parent.
Ich bin mir nicht sicher, ob die dann beim Create gleich gesetzt wird, oder ob man das "von Hand" machen muss.. |
Re: Zugriff auf Übergeordnetes Objekt?
man sollte so etwas in eine Funktion des unterformulars kapseln wenn du zum beispiel wissen willst welcher wert eines editfeldes im unterformular eingegeben wurde könnte das so aussehen
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var aForm2:TForm2; begin aForm2:=TForm2.Create(Application); try Edit1.Text:=aForm2.Form2AnzWertZur; finally aForm2.Free; end; end; end.
Delphi-Quellcode:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } function Form2AnzWertZur:String; end; (*var Form2: TForm2;*) implementation {$R *.dfm} { TForm2 } function TForm2.Form2AnzWertZur: String; begin ShowModal; Result:=Edit1.Text; end; procedure TForm2.Button1Click(Sender: TObject); begin ModalResult:=mrOk; end; end. |
Re: Zugriff auf Übergeordnetes Objekt?
Zitat:
Das Dialog-Formular wird so konstruiert, dass es ohne Änderung in eine andere Anwendung kopiert werden kann. Das MainForm bindet die unit für DlgForm ein, nicht anderstrum. Hier ein Beispiel für ein Dialog-Formular, dass einen Dateinamen abfrägt:
Delphi-Quellcode:
unit UInputQueryFile;
interface uses Windows, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, Buttons, Mask, ToolEdit; type TFrmInputQueryFile = class(TForm) FilenameEdit1: TFilenameEdit; BtnOk: TBitBtn; BtnCancel: TBitBtn; LblPromt: TLabel; private { Private-Deklarationen } function GetFilename: string; procedure SetFilename(const Value: string); public { Public-Deklarationen } property Filename:string read GetFilename write SetFilename; end; function InputQueryFile(const ACaption, APrompt: string; var Value: string): Boolean; implementation {$R *.DFM} function InputQueryFile(const ACaption, APrompt: string; var Value: string): Boolean; var FrmInputQueryFile: TFrmInputQueryFile; begin Result := False; FrmInputQueryFile := TFrmInputQueryFile.Create(nil); try FrmInputQueryFile.Caption := ACaption; FrmInputQueryFile.LblPromt.Caption := APrompt; FrmInputQueryFile.Filename := Value; if FrmInputQueryFile.ShowModal = mrOk then begin Value := FrmInputQueryFile.Filename; Result := True; end; finally FrmInputQueryFile.Free; end; end; { TFrmInputQueryFile } function TFrmInputQueryFile.GetFilename: string; begin Result := FilenameEdit1.FileName; end; procedure TFrmInputQueryFile.SetFilename(const Value: string); begin FilenameEdit1.FileName := Value; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 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