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/)
-   -   Delphi Zugriff auf Übergeordnetes Objekt? (https://www.delphipraxis.net/55831-zugriff-auf-uebergeordnetes-objekt.html)

Bloodfire 27. Okt 2005 15:02


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!

BenjaminH 27. Okt 2005 15:04

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..

etom291272 27. Okt 2005 15:23

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.

shmia 27. Okt 2005 15:25

Re: Zugriff auf Übergeordnetes Objekt?
 
Zitat:

Zitat von Bloodfire
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?)

Das TDlgForm gibt seine Ergebnisse über Properties nach aussen.
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 19:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz