AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi [ Eledigt ]Inkompatible Typen TformClass und Class reference

[ Eledigt ]Inkompatible Typen TformClass und Class reference

Ein Thema von Newbi · begonnen am 3. Apr 2008 · letzter Beitrag vom 4. Apr 2008
Antwort Antwort
Seite 2 von 2     12
busybyte

Registriert seit: 15. Sep 2006
165 Beiträge
 
#11

Re: Inkompatible Typen TformClass und Class reference

  Alt 3. Apr 2008, 21:43
@HawkEye219 genial,vielen Dank !!!
Jetzt ist mir das klar. Class of kann nur Typen aufnehmen und ist selbst kein Typ,
sondern nur ein zeiger auf einen Typ.Der Sinn dahinter ist mir allerdings schleierhaft.
ob ich
Delphi-Quellcode:
Type
TMyClassof :=Class of TIrgendwas;
end;
Var MeineVar:Tirgendwas;
//und dann
TMyClassof:=Tirgendwas;
MeineVar:=TMyClassof.create;

//oder gleich
MeineVar:=TIrgendwas.create;
verwende ???
I love DiscCat
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: Inkompatible Typen TformClass und Class reference

  Alt 3. Apr 2008, 21:49
Zitat von SirThornberry:
das es nicht genau eine instanz von TForm ist war mir klar aber eben ein Nachfahre.
Aber du schriebst was anderes:

SirThornberry
denn TFormClass.Create gibt dir ein TForm zurück und kein TFormClass. Dementsprechend kannst du den Rückgabewert von TFormClass.Create nur auf eine Variable vom Typ TForm zuweisen und nicht auf eine Variable vom Typ TFormClass.


Und das stimmt nicht bzw. hat er gemacht, da newForm vom Typ TForm ist. Mehr habe ich nicht anmerken wollen.

@Busybyte: Damit kannst du eine eine Methode nutzen um eine Klasse zu instanziieren ohne das ihr genauer Typ zur Designtime feststeht. Dieser kann erst zur Laufzeit ermittelt werden. Es ist sozusagen eine Variable die einen Klassentyp aufnehmen kann. Somit kannst du zur Laufzeit ohne den wirklichen Typ zu kennen eine Instanz bilden.

Bei deinem Ausgangsbeispiel wurde das in der Methode ShowForm genutzt um unabhängig von der später verwendeten Form das gewünschte Verhalten zu implementieren. Es hätte natürlich eine vorhandene Form Instanz gereicht, aber da er die Form auch erzeugt braucht er eine solche Klassenreferenz.

Aber hier dein Beispiel weniger "frei" und angepasst an dein spezielles Beispiel ohne TFormClass:
Delphi-Quellcode:
procedure TFrm_Main.ShowForm;
begin
  newForm := TFrm_Startseite.Create(self);
  newForm.BorderStyle := bsNone;
  newForm.Parent := Panel_Content; // "In diesem Panel" werden die Forms angezeigt.
  newForm.Align := alClient;
  newForm.Show;
end;
  Mit Zitat antworten Zitat
Newbi

Registriert seit: 2. Apr 2008
15 Beiträge
 
#13

Re: Inkompatible Typen TformClass und Class reference

  Alt 3. Apr 2008, 22:12


Also ich verstehe zur Zeit nur Bahnhof.

Das ich ein Frame einbinden will ist zutreffend, dieses hat aber bis auf sich selbts noch keinen Inhalt.

Ich verwende Delphi 6.

Ich bin noch net so erfahren, aber eben sehr lernwillig.
Was der Code in groben Zügen macht ist mir soweit auch geläufig, bei irgendeiner feinheit hapert es aber.

Diese Feinheit habt ihr anscheind gefunden und auch sicherlich sehr gut erklärt was ich machen soll.

Ich verstehe es nur leider nicht. Könnte bitte jemand die erklärung nochmal erklären ??




Nachtrag: Danke nur ist der Groschen gefallen.




Nachtrag 2: Oder auch nicht.

Delphi-Quellcode:
unit Unit_Main;

interface

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

type
  TFrm_Main = class(TForm)
    Panel_Menu: TPanel;
    Panel_Content: TPanel;
    Btn_Adress_Add: TButton;
    Btn_Adress_Edit: TButton;
    Btn_Close: TButton;
    Button4: TButton;
    Btn_Adress_Search: TButton;
    Btn_Adress_Delete: TButton;
    Btn_Adress_Clear: TButton;
    Button8: TButton;
    Button9: TButton;
    procedure FormCreate(Sender: TObject);
    procedure ShowForm;
  private
        newForm: TForm;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Start_first_time:integer; // Variable die den ersten Start des Programmes speichert.
  end;

var
  Frm_Main: TFrm_Main;

implementation

uses Unit_Startseite;

{$R *.dfm}

procedure TFrm_Main.FormCreate(Sender: TObject);
begin
// Wurde die LadenSeite schon ausgeführt ?
        If Start_first_time = 1
                then
                        begin
                         // Buttens Einblenden.
                                Btn_Adress_Add.Visible:=true;
                                Btn_Adress_Clear.Visible:=true;
                                Btn_Adress_Edit.Visible:=true;
                                Btn_Adress_Delete.Visible:=true;
                                Btn_Adress_Search.Visible:=true;
                                Btn_Close.Visible:=true;
                        end
                else
                        begin
                                ShowForm(TFrm_Startseite);
                        end;
end;

procedure TFrm_Main.ShowForm;
begin
      newForm:= TFrm_Startseite.Create(self);
      newForm.BorderStyle := bsNone;
      newForm.Parent := Panel_Content; // "In diesem Panel" werden die Forms angezeigt.
      newForm.Align := alClient;
      newForm.Show;
end;

end.
Nun kommen 2 Fehler:
1) Zu viele Parameter ( ShowForm(TFrm_Startseite); )
2) Inkompatible Typen [TForm und TFrm_Startseite] ( newForm:= TFrm_Startseite.Create(self); )
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#14

Re: Inkompatible Typen TformClass und Class reference

  Alt 3. Apr 2008, 23:28
Zitat von Newbi:
Das ich ein Frame einbinden will ist zutreffend, dieses hat aber bis auf sich selbts noch keinen Inhalt.
<ironie>Sehr schön, ist schliesslich grundlegend unwichtig.</ironie>

Eine Frame ist keine Form. Eine Frame kann im Gegensatz zu einer Form nicht alleine als Fenster angezeigt werden sondern nur auf einem Formular eingebettet werden. Der gesamte Code zielt aber darauf ab, ein Formular anzuzeigen.

Zitat von Newbi:
Nun kommen 2 Fehler:
1) Zu viele Parameter ( ShowForm(TFrm_Startseite); )
2) Inkompatible Typen [TForm und TFrm_Startseite] ( newForm:= TFrm_Startseite.Create(self); )
zu 1): Ja, ich habe doch den Parameter entfernt, weil wir doch nun die TFormClass eingespart haben. Somit ist der Parameter überflüssig.

zu 2): Ja, wie gesagt: eine TFrame ist was anderes als eine TForm. Es würde auch nichts bringen das ganze anzupassen, da eine Frame auf ein Formular eingebettet wird und somit musst du erstmal erklären wie und wo die angezeigt werden soll bzw. was du nun direkt erreichen willst.
  Mit Zitat antworten Zitat
Newbi

Registriert seit: 2. Apr 2008
15 Beiträge
 
#15

Re: Inkompatible Typen TformClass und Class reference

  Alt 4. Apr 2008, 07:52
Danke an alle. Es funktioniert.

Ich habe fix aus dem Frame ne Form gemacht und aus

1) Zu viele Parameter ( ShowForm(TFrm_Startseite); )

1) Zu viele Parameter ( ShowForm; )

gemacht.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:38 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