Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wie eine eigene Form als Parameter? (https://www.delphipraxis.net/43471-wie-eine-eigene-form-als-parameter.html)

Speedmaster 4. Apr 2005 18:42


Wie eine eigene Form als Parameter?
 
Wie kann man eine eigene Form(Also mit Komponenten und Co.) als Parameter an eine Funktion/Procedure übergeben, die diese Form als var-Parameter erwartet, aber auch andere Form's bearbeiten kann(Kann also nicht TForm1 als erwarteten Parameter angeben)!

Grund ist hier zu sehen:
Delphi-Quellcode:
procedure TswOptions.LoadFormStyle(var Form: TForm; var Image: TImage;
  ObjektFile: TMemIniFile; SPath: String);
begin
  // Style der Programmleiste(Oben)
  case ObjektFile.ReadInteger(SPath,'BorderStyle',3) of
    0: Form.BorderStyle := bsDialog;
    1: Form.BorderStyle := bsSingle;
    2: Form.BorderStyle := bsToolWindow;
    else Form1.BorderStyle := bsNone;
  end;
  // Läd Daten über die Systembuttons
  if ObjektFile.ReadBool(SPath,'BiSystemMenu',True) = True then
     Form.BorderIcons := Form.BorderIcons + [biSystemMenu];
  if ObjektFile.ReadBool(SPath,'BiMinimize',True) = True then
     Form.BorderIcons := Form.BorderIcons + [BiMinimize];
  // Hintergrund
  try
    Image.Picture.LoadFromFile(Path +
      '\Run\APRM\Skin\'+ObjektFile.ReadString('swMain','Background','Default_Background.jpg'));
  except
    v_Error.ShowError(PFnExist);
  end;
end;

sECuRE 4. Apr 2005 19:17

Re: Wie eine eigene Form als Parameter?
 
Hi,

die Antwort hast du dir ja fast schon selbst gegeben:
Delphi-Quellcode:

procedure TuEtwasMitderForm(var form:TForm);
begin
form.Caption:='Hier wurde etwas getan';
end;

// ...
procedure TForm1.Button1Click(Sender: TObject);
begin
TuEtwasMitderForm(self);
end;
cu

Speedmaster 4. Apr 2005 19:36

Re: Wie eine eigene Form als Parameter?
 
Zitat:

Zitat von sECuRE
Hi,

die Antwort hast du dir ja fast schon selbst gegeben:
Delphi-Quellcode:

procedure TuEtwasMitderForm(var form:TForm);
begin
form.Caption:='Hier wurde etwas getan';
end;

// ...
procedure TForm1.Button1Click(Sender: TObject);
begin
TuEtwasMitderForm(self);
end;
cu

Nein, den es besteht ein unterschied zwischen TForm1 und TForm, das Funktioniert nicht und Delphi gibt dir eine Fehlermeldung aus!

jfheins 4. Apr 2005 19:38

Re: Wie eine eigene Form als Parameter?
 
Du könntest die Varaiable casten ...
Delphi-Quellcode:
procedure TuEtwasMitderForm(var form:TForm);
begin
(form as TForm1).Caption:='Hier wurde etwas getan';
end;

Oxmyx 4. Apr 2005 20:03

Re: Wie eine eigene Form als Parameter?
 
Aber nicht so, sondern gerade andersrum:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  LoadFormStyle(Self as TForm, ..., ..., ...);
end;

Speedmaster 5. Apr 2005 18:45

Re: Wie eine eigene Form als Parameter?
 
Zitat:

Zitat von Oxmyx
Aber nicht so, sondern gerade andersrum:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  LoadFormStyle(Self as TForm, ..., ..., ...);
end;

Akueller Aufruf:
Delphi-Quellcode:
LoadFormStyle(Form2 as TForm,Form2.Image1,Filevar,'smMain');
Leider spuckt er mir immer noch die Fehlermeldung aus:
Zitat:

[Fehler] app_Skin.pas(158): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
Habe auch schon viel Rumprobiert, habe aber keine Ahnung wie ich das jetzt noch machen soll!

susa71 5. Apr 2005 20:48

Re: Wie eine eigene Form als Parameter?
 
...vielleicht nicht als var-Parameter übergeben?
Du willst ja nicht das Objekt selbst ändern können (hinter der Objektvariablen verbirgt sich nur der Zeiger auf das Objekt), sondern lediglich Eigenschaften des Objekts...

Beste Grüße
Susanne

Speedmaster 6. Apr 2005 12:57

Re: Wie eine eigene Form als Parameter?
 
Zitat:

Zitat von susa71
...vielleicht nicht als var-Parameter übergeben?
Du willst ja nicht das Objekt selbst ändern können (hinter der Objektvariablen verbirgt sich nur der Zeiger auf das Objekt), sondern lediglich Eigenschaften des Objekts...

Beste Grüße
Susanne

Wenn ich die Eigenschaften eines Objekts ändern will muss ich das Objekt ändern!!

Habe das nun nach langem hin und her mit Overloads gelößt, was aber keine Ideale Lößung ist!

Muetze1 6. Apr 2005 13:04

Re: Wie eine eigene Form als Parameter?
 
Moin!

Zitat:

Zitat von Speedmaster
Wenn ich die Eigenschaften eines Objekts ändern will muss ich das Objekt ändern!!

Ja, mach doch, aber dafür brauchst du das Objekt nicht als Var zu übergeben. Wie Susanne schon richtig erklärt hatte, übergibst du eh nur einen Instanzenzeiger somit änderst du Daten dort, wo der Zeiger hinzeigt. Den Zeiger selber änderst du aber nicht (das er woanders hinzeigt/auf eine andere Instanz zeigt), somit kein Var nötig. Du könntest sogar ein Const hinschreiben um sicherzugehen, das die Instanz wirklich nicht geändert wird - ihre Parameter und Eigenschaften können aber trotzdem geändert werden...

MfG
Muetze1

Hansa 6. Apr 2005 16:35

Re: Wie eine eigene Form als Parameter?
 
Ich würde das alles mit dem Repository (Objektablage) machen. D.h. : alle immer notwendigen Events implementieren. Diese Unit in der Objektablage speichern. Von dieser dann andere Forms ableiten (Datei -> neu -> weitere -> VERERBEN auswählen !) und notfalls diese Form ergänzen, z.B. noch irgendeinen Button draufpappen.

In einem Programm habe ich damit ca. 250 Forms im Griff. In der Ursprungsform werden nur grundlegende Tastatursachen abgehandelt. Z.B. Form schließen auch mit ESC (nicht gezwungenermaßen mit ALT-F4 oder Kreuz) usw.

Der erste Nachkomme erhält dann diese Sachen auch für seine Buttons (wo dann auch die Mouse-Events abgehandelt werden). Der Nächste oder was weiß ich, der 5. nächste erhält 2 Edits für von-bis Abfragen. Irgendwann kommt dann einer mit einem Stringgrid. Eventuell ist das aber auch einer, der keine von-bis Abfrage braucht. Dann verwende ich eben seinen Vorgänger.

Wenn ich nun sage : sorry, die 250 Forms sollen nicht mit ESC sondern mit F9 geschlossen werden können, dann gehe ich in die Ursprungsform, ändere das in einer Zeile und alles ist fertig.

Parameter für Forms habe ich deshalb noch nie gebraucht. Wer nicht weiß, was OOP ist, der hat eben Pech und müßte sich das wohl mal ansehen.


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