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 2 von 5     12 34     Letzte »    
Zoot

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

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 10:34
Zitat von WIng2005:
Hallo,

funktioniert!! Nun fehlt mir jedoch noch das Verständnis dazu:
formerzeugen(TForm2,TForm(form2)); Kannst du evtl. mal 1-2 Sätze dazu verlieren?

Vielen Dank
Nun gut, VAR erwartet exakte Übereinstimmung der Parametertypen.
Für Application.CreateForm ist nur die Objektvariable wichtig, da der Klassentyp gesondert übergeben wird.
Also casten wir das Ganze zu TForm und es funktioniert.
  Mit Zitat antworten Zitat
PMM

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

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 10:35
Der "as" operator setzt einen Nachfolger von TObject voraus. nform ist jetzt aber eine untypisierte Refrenz, über die der Compiler keine weiteren Annahmen machen darf.
Du hast zwei Optionen:
TForm(nform).Show ... benutzen - damit übernimmst du die Verantwortung das der cast OK ist.
Oder den nform parameter typisieren:
  function formerzeugen(fclass:TFormClass;var nform : Tform1):boolean; verwenden. Dann klappt das ohne cast. Ich würde dann aber auch den ersten Parameter komplett entfernen, denn es wird ja nun immer eine TForm1 Instanz erstellt. Also:
function formerzeugen(var nform : Tform1):boolean; PMM
  Mit Zitat antworten Zitat
WIng2005

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

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 10:37
Vielen Dank für die Ausführungen. Das schafft mal wieder ein wenig mehr Klarheit!!
MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt
Online

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#14

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 12:08
Wie wäre es denn, wenn du ganz banal eine Funktion anstelle der Prozedur nehmen würdest:
Delphi-Quellcode:
function CreateForm(AOwner: TFormClass): TForm;
begin
  Application.CreateForm(AOwner, Result);
  try
    Result.Parent := mainform.panel_df;
    mainform.Notebook1.Visible := false;
    Result.Show;
  except
    Result := nil;
  end;
end;
HTH,
Uli.
Uli Gerhardt
  Mit Zitat antworten Zitat
Zoot

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

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 12:46
Zitat von uligerhardt:
Wie wäre es denn, wenn du ganz banal eine Funktion anstelle der Prozedur nehmen würdest:
Delphi-Quellcode:
function CreateForm(AOwner: TFormClass): TForm;
begin
  Application.CreateForm(AOwner, Result);
  try
    Result.Parent := mainform.panel_df;
    mainform.Notebook1.Visible := false;
    Result.Show;
  except
    Result := nil;
  end;
end;
HTH,
Uli.
Im Prinzip ja.

Aber wenn in Result.Show eine Exception auftritt, setzt du Result einfach auf NIL? Ich weiß ja nicht....
  Mit Zitat antworten Zitat
WIng2005

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

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 12:51
Da das Ergebnis der Funktion vom typ TForm ist sollte diese doch mit

form2:=createform(TForm2); aufgerufen werden,was jedoch in einer Fehlermeldung:
[Fehler] Unit1.pas(31): Inkompatible Typen: 'TForm2' und 'TForm'
endet. Oder habe ich hier nen Denkfehler?
MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt
Online

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#17

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 13:00
Zitat von Zoot:
Aber wenn in Result.Show eine Exception auftritt, setzt du Result einfach auf NIL? Ich weiß ja nicht....
Ähm ja, da hab ich zu sehr von der Vorlage abgekupfert. Ein FreeAndNil wäre besser. Oder man lässt das Exceptionhandling an dieser Stelle weg - ich weiß ja nicht, wofür es gut sin soll.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt
Online

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#18

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 13:02
Zitat von WIng2005:
Da das Ergebnis der Funktion vom typ TForm ist sollte diese doch mit

form2:=createform(TForm2); aufgerufen werden,was jedoch in einer Fehlermeldung:
[Fehler] Unit1.pas(31): Inkompatible Typen: 'TForm2' und 'TForm'
endet. Oder habe ich hier nen Denkfehler?
Hmm, um einen Cast kommst du hier auch nicht herum.
 Form2 := TForm2(createform(TForm2));
Uli Gerhardt
  Mit Zitat antworten Zitat
WIng2005

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

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 13:29
Irgendwie wird keine Form erzeugt, wenngleich die Funktion ordnungsgemäß durchläuft....
MFG
Steffen
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Konzeptfrage FormCreate

  Alt 12. Mai 2009, 13:37
Wie rufst du sie auf?
Delphi-Quellcode:
var
 f : TForm;
begin
  Application.CreateForm(TForm, f);
  f.Parent := Panel1;
  f.Visible := TRUE;
  f.Show;
end;
funktioniert bei mir ohne Probleme.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     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 08:33 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