Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   einer Procedure Formulare als Parameter übergeben? (https://www.delphipraxis.net/192674-einer-procedure-formulare-als-parameter-uebergeben.html)

sko1 10. Mai 2017 07:06

Delphi-Version: 5

einer Procedure Formulare als Parameter übergeben?
 
Hallo,

ich stehe auf dem Schlauch:
Ich benötige eine procedure, die die Größe und die Position eines Formulars festlegt.
Innerhalb des Forms ist das natürlich kein Problem, ich möchte aber ausgehend vom Hauptformular, dass jedes daraus angezeigte Unterformular die gleiche Position und Größe wie das aufrufende Formular hat.

Das kann ich als Procedure in jedem Formular einzeln machen, aber bei > 20 Unterformularen wäre das ja Unsinn, ich möchte eine "allgemeingültige" procedure haben, der ich das zu ändernde Unterformular übergebe und die ich dann aus allen Unterformularen aufrufen kann...

procedure Groesse(var f : TForm) geht nicht weil der ja TFormUnter1, TFormUnter2 etc. übergeben wird.

Wo habe ich den Knoten im Hirn?

Ciao
Stefan

Nersgatt 10. Mai 2017 07:11

AW: einer Procedure Formulare als Parameter übergeben?
 
Deine Formulare sind ja von TForm abgeleitet. Daher kannst Du den Parameter als TForm deklarieren und die Deine Formulare übergeben. Das ist kein Problem

bcvs 10. Mai 2017 07:16

AW: einer Procedure Formulare als Parameter übergeben?
 
Du musst nur das var weglassen:
Delphi-Quellcode:
procedure Groesse(f : TForm);
f ist ja nur ein Zeiger auf das Formular. Den wilst du in der procedure ja nicht verändern, sondern die Inhalte / Properties.

sko1 10. Mai 2017 07:26

AW: einer Procedure Formulare als Parameter übergeben?
 
Danke, ich glaube ich habe es geschnallt!

Jetzt sieht das Ganze so aus:

Delphi-Quellcode:
procedure Groessenanpassung(var f: TCustomForm);
begin
    f.left := MainformPos.x;
    f.top := MainformPos.y;
    f.width := MainformPos.w;
    f.height := MainformPos.h;
  end;
end;

und beim Aufruf caste ich das aufrufende Formular

Delphi-Quellcode:
    Groessenanpassung(TCustomForm(self));


Habe ich noch was übersehen, zumindest funktioniert es nun wie gewünscht.

Ciao
Stefan

haentschman 10. Mai 2017 07:33

AW: einer Procedure Formulare als Parameter übergeben?
 
Moin...:P
Den Cast kannst du dir schenken. 8-)
Delphi-Quellcode:
Groessenanpassung(self);
.
Das VAR auch...
Delphi-Quellcode:
Groessenanpassung(f: TCustomForm);
.
PS: sind die Buchstaben auf der Tastatur ausgegangen? Warum hat der Parameter (f) keinen sprechenden Namen? :stupid:

AndyDF 10. Mai 2017 07:35

AW: einer Procedure Formulare als Parameter übergeben?
 
Und das "var" kann auch weg bleiben. Also nur:
Delphi-Quellcode:
procedure Groessenanpassung(f: TCustomForm);

Sonst veränderst du dir noch deinen originalen Form-Pointer.

[Edit]
@haentschman: haben wir wohl zur selben Zeit geschrieben.

haentschman 10. Mai 2017 07:39

AW: einer Procedure Formulare als Parameter übergeben?
 
8-) hier ist es besser doppelt als vergessen...

sko1 10. Mai 2017 07:53

AW: einer Procedure Formulare als Parameter übergeben?
 
Danke, habe Eure Vorschläge umgesetzt!

Zitat:

Sonst veränderst du dir noch deinen originalen Form-Pointer.
beim Ändern der Abmessungen / Position des übergebenen Formulars?

Ciao
Stefan

haentschman 10. Mai 2017 07:57

AW: einer Procedure Formulare als Parameter übergeben?
 
Zitat:

beim Ändern der Abmessungen / Position des übergebenen Formulars?
...es könnte der 35. Mitarbeiter (weil er es nicht besser weiß :wink:) das versuchen. Sicher ist sicher. :zwinker: Dann erhällt er wenigstens die Meldung: "Du Trottel".

Jumpy 10. Mai 2017 07:58

AW: einer Procedure Formulare als Parameter übergeben?
 
Zitat:

Zitat von haentschman (Beitrag 1370854)
PS: sind die Buchstaben auf der Tastatur ausgegangen? Warum hat der Parameter (f) keinen sprechenden Namen? :stupid:

Im Prinzip hast du ja recht, aber f für TForm in einer Procedure mit 4 LOC find ich vertretbar. Erst recht, wenn man die Procedure selber umbenennt in FormGrössenanpassung oder sowas.


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