Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekt im Create an Klasse weitergeben? (https://www.delphipraxis.net/13714-objekt-im-create-klasse-weitergeben.html)

Niels 24. Dez 2003 22:18


Objekt im Create an Klasse weitergeben?
 
Moin!

Ist es möglich, dass ich irgendwelche Komponenten oder sogar das ganze Formular an eine Klasse weitergebe?
So z.B.:
Delphi-Quellcode:
Bla := TBlub.Create(Form1);
In hab mir das folgendermaßen überlegt (Code-Ausschnitt der Klasse):

Delphi-Quellcode:
type
  TBlub = class
  private
    constructor Create(hilfForm: TForm);
    ...
  public
    ...
  end;

var
  Formular: TForm;

constructor Create(hilfForm: TForm);
begin
  Formular := hilfForm // geht das überhaupt?
end;
Mein Problem ist jetzt folgendes. Auf dem Formular ist z.B. ne ListBox und ich will dort was eintragen. Wenn ich jetzt Formular.ListBox1... eingeb, dann meckert der Compiler weil er ja (logischerweiße) die Klasse Form1 nicht kennt, sondern nur die Standardprozeduren und -eigenschaften des TForms.

Gibt es eine Möglichkeit trotzdem auf die ListBox oder auf andere Sachen des Formulars, wie z.B. Prozeduren zuzugreifen?

MfG Niels

Christian Seehase 24. Dez 2003 22:22

Re: Objekt im Create an Klasse weitergeben?
 
Moin Niels,

prinzipiell müsste es gehen, wenn Du die Formularklasse TForm1, also die mit den Komponten, der neuen Klasse sichtbar machst, indem Du die Unit des Formulares mit in die Unit der neuen Klasse einbindest.
Dann verwendest Du nicht die Basisklasse TForm, sondern TForm1.

Niels 24. Dez 2003 22:48

Re: Objekt im Create an Klasse weitergeben?
 
Hoi,

danke...hab gar net dran gedacht, dass ich ja auch Klassen weitergeben kann. Hab das ganze jetzt aber etwas anders geregelt, weil mir das so net gefallen hat.

Jetzt hab ich aber noch ein anderes Problem. Mein Konstruktor Create sieht folgendermaßen aus:

Delphi-Quellcode:
constructor Create(var Formular: TForm; var ListBox: TListBox; cIni: string);
begin
  ...
end;
Das Problem ist jetzt, dass ich das nicht mit

Delphi-Quellcode:
bla := blub.Create(Form1, Form1.ListBox1, 'bla.ini');
aufrufen kann, weil Form1 ja nicht vom Typ TForm sondern vom Typ TForm1 ist. Ich hab auch probiert (Form1 as TForm) aber der Compiler sagt mir immer 'Types of actual and formal var parameters must be identical'.

Kann mir jemand weiterhelfen? Wie kann ich die Übergabe realisieren?

MfG Niels

[edit] Hat sich erledigt, ich geb dir 3 Eigenschaften einzeln weiter..da brauch ich net das gesamte Form1 [/edit]

Niels 24. Dez 2003 23:12

Re: Objekt im Create an Klasse weitergeben?
 
Jetz bin ich auf ein weiteres Problem gestoßen.

Mein Constructor sieht jetzt so aus:

Delphi-Quellcode:
constructor Create(var Height, Width: integer; var ListBox: TListBox; cIni: string);
Wenn ich aber meine Klasse mit

Delphi-Quellcode:
MyVar := TMyClass.Create(Form1.Height, Form1.Width, Form1.ListBox1, 'iniDat.ini');
aufrufe, dann sagt er mir, dass Form1.Height und Form1.Widt konstante Werte sind und nicht als variabel weitergegeben werden können. Da hab ich mir gedacht, ich geb nen Zeiger auf deren Adresse weiter...

Delphi-Quellcode:
type
  IntegerZeiger = ^Integer;
...
constructor Create(var Height, Width: IntegerZeiger; var ListBox: TListBox; cIni: string);

... // andere unit

MyVar := TMyClass.Create(Pointer(@Form1.Height), Pointer(@Form1.Width), Form1.ListBox1, 'iniDat.ini'); // Fehler tritt hier auf
Da bekomm ich aber ne EAccessViolation vom Debugger.

Hat jemand ne Idee, wie ich das machen könnte?

MfG Niels

Christian Seehase 25. Dez 2003 11:55

Re: Objekt im Create an Klasse weitergeben?
 
Moin Niels,

warum deklarierst Du denn im constructor die Parameter als var?
Lass das doch mal weg, oder benutze const.

Im Ursprung dachte ich mir das übrigens so:

Delphi-Quellcode:
Unit Unit2; // die mit der neuen Klasse

interface

uses Unit1; // die mit dem Formular

type
  TBlub = class
  private
    constructor Create(hilfForm: TForm1); // Jetzt kann hier TForm1 genutzt werden
    ...
  public
    ...
  end;

implementation

Niels 25. Dez 2003 18:44

Re: Objekt im Create an Klasse weitergeben?
 
Moin!

Ich hatte deine Idee schon verstanden...Ich wollte aber eben nicht unit 1 in die uses-Liste packen um die Klasse unabhängig von anderen Forms / units zu machen.
Var hab ich davor geschrieben, da das ja Werte sind, die geändert werden sollen (was ja scheinbar net geht so geht).
Muss ich halt mal noch n bissel rumtesten...
Naja trotzdem Danke.

MfG Niels


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:26 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