AGB  ·  Datenschutz  ·  Impressum  







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

Konzeptfrage FormCreate

Ein Thema von WIng2005 · begonnen am 12. Mai 2009 · letzter Beitrag vom 8. Jul 2009
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#1

Konzeptfrage FormCreate

  Alt 12. Mai 2009, 07:45
Hallo Gemeinde,

ich möchte aufgrund der mehrfachen Nutzung das Erzeugen meiner Formulare in eine Funktion auslagern.
Meine Ansätze hierzu funktionieren soweit auch, jedoch verhält sich das ganze in manchen Fällen ein wenig mehrwürdig:

Delphi-Quellcode:
function createform(AOwner:TFormClass;nform:TForm):boolean;
Begin
try
  application.CreateForm(aowner,nform);
  nform.Parent:=mainform.panel_df;
  mainform.Notebook1.Visible:=false;
  nform.Show;
  result:=true;
except
  result:=false;
end;
end;

//Aufruf:
createform(TForm1,Form1); //Funktioniert
aber: nachdem die Form erzeugt wurde prüfe ich mit:
if assigned(form1) then machwas Hier wird seltsamerweise immer false zurückgegeben. Setze ich anstelle des Aufrufes der Funktion, die Funktion selbst mit den entsprechenden Werten ein, wird auf die Prüfung der zugehörige Code ausgeführt. Meine Vermutung ist nun, dass ich mit den Typen der Parameter etwas vermasselt habe. Leider ist die Delphi 7 Hilfe hier jedoch nicht sehr auskunftsfreudig....also hoffe ich, dass ihr mir helfen könnt.
Vielen Dank!

//EDIT: ist die Funktionsbezeichnung kritisch?
MFG
Steffen
  Mit Zitat antworten Zitat
PMM

Registriert seit: 17. Feb 2005
101 Beiträge
 
#2

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 08:30
Probier mal
function createform(AOwner:TFormClass; VAR nform:TForm):boolean; Ohne VAR wird innerhalb der function eine Kopie von "nform" benutzt (call by value), du möchtest aber das Ergebnis (die Adr. der TForm Instanz) ausserhalb der function verwenden (call by reference)
PMM
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#3

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 08:37
Hallo,
danke für die Rückmeldung.
Mit der Version bekomme ich Probleme beim Aufruf:

Delphi-Quellcode:
createform(TForm1,Form1)
"[Fehler] Customize.pas(378): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen"
MFG
Steffen
  Mit Zitat antworten Zitat
PMM

Registriert seit: 17. Feb 2005
101 Beiträge
 
#4

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 08:44
Wie hast du den Form1 deklariert?
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#5

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 08:50
Naja, wie eine Form halt deklariert wird:

Delphi-Quellcode:
TForm1 = class(TForm)
    
   private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
MFG
Steffen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 08:54
Hallo,

Form1 ist ja auch vom Type TForm1 und nicht vom Type TForm, Du benötigst hier also noch einen entsprechenden Typecast. Ob das so in der von Dir gewünschten Form geht, weiß ich nicht.

Eventuell könnte ja sowas in dieser Art funktionieren (nicht getestet)
Delphi-Quellcode:
function createform(AOwner: TFormClass ; var nform {typloser Parameter} ):boolean;
Begin
  result := false;
  try
    if nForm is TForm then begin
      application.CreateForm(AOwner,nform);
      nform.Parent := mainform.panel_df;
      mainform.Notebook1.Visible := false;
      nform.Show;
      result := true;
    end;
  except
  end;
end;
  Mit Zitat antworten Zitat
PMM

Registriert seit: 17. Feb 2005
101 Beiträge
 
#7

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 09:04
Noch was:
application.CreateForm(AOwner,nform); Der erste Parameter ist die FormClass und nicht der Owner. Du solltest diesen dann auch nicht aOwner nennen.
PMM
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#8

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 09:19
Ich habe das ganze mal aus meinem Projekt herausgelöst und neu aufgesetzt:

Delphi-Quellcode:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);
    function formerzeugen(fclass:TFormClass;var nform):boolean;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
uses unit2;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  formerzeugen(TForm2,form2);
end;

function TForm1.formerzeugen(fclass:TFormClass;var nform):boolean;
Begin
    application.CreateForm(fclass,nform);
    (nform as TForm).show //geht nicht :[Fehler] Unit1.pas(39): Operator ist auf diesen Operandentyp nicht anwendbar
end;

end.


//////////////////////////////////////////////
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Label1: TLabel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.
Casten ließ sich der Typ nicht.
MFG
Steffen
  Mit Zitat antworten Zitat
Zoot

Registriert seit: 30. Jan 2006
Ort: Hessen
110 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 09:25
So sollte es gehen:

Zitat von WIng2005:
Delphi-Quellcode:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);
    function formerzeugen(fclass:TFormClass;var nform : Tform):boolean;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
uses unit2;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  formerzeugen(TForm2,TForm(form2));
end;

function TForm1.formerzeugen(fclass:TFormClass;var nform:Tform):boolean;
Begin
    application.CreateForm(fclass,nform);
    nform.show
end;

end.


//////////////////////////////////////////////
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Label1: TLabel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#10

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 09:31
Hallo,

funktioniert!! Nun fehlt mir jedoch noch das Verständnis dazu:
Delphi-Quellcode:
formerzeugen(TForm2,TForm(form2));

//bzw
function TForm1.formerzeugen(fclass:TFormClass;var nform:Tform):boolean;
Kannst du evtl. mal 1-2 Sätze dazu verlieren?

Vielen Dank
MFG
Steffen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


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 03:48 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