AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Übergeordnetes Objekt?

Ein Thema von Bloodfire · begonnen am 27. Okt 2005 · letzter Beitrag vom 27. Okt 2005
Antwort Antwort
Bloodfire

Registriert seit: 17. Jun 2004
38 Beiträge
 
#1

Zugriff auf Übergeordnetes Objekt?

  Alt 27. Okt 2005, 15:02
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!
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Zugriff auf Übergeordnetes Objekt?

  Alt 27. Okt 2005, 15:04
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..
Benjamin
  Mit Zitat antworten Zitat
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#3

Re: Zugriff auf Übergeordnetes Objekt?

  Alt 27. Okt 2005, 15:23
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Zugriff auf Übergeordnetes Objekt?

  Alt 27. Okt 2005, 15:25
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;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 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