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 Formularbreite zur Laufzeit ändern (https://www.delphipraxis.net/129171-formularbreite-zur-laufzeit-aendern.html)

BackOrifice 13. Feb 2009 20:58


Formularbreite zur Laufzeit ändern
 
Nabend!

Ich habe ein Formular, welches auf der rechten Hälfte erweiterte Einstellungen anzeigt. Beim OnCreate Ereignis wird nur die linke Hälfte angezeigt (also ist die Breite nur noch die Hälfte der eigentlichen Breite).
Dann dachte ich zum Anzeigen der erweiterten Einstellungen an einen Button, der die rechte Seite anzeigen lassen soll, den ich beim OnClick einfach die Anweisung frm_NewEvent.Width := 850; ausführen lasse. Allerdings kriege ich genau zu der Anweisung eine Zugriffsverletzung.

Wie löse ich das Problem? Danke.

mkinzler 13. Feb 2009 21:01

Re: Formularbreite zur Laufzeit ändern
 
Das sollte eigentlich so gehen. Zeig mal den Code

jaenicke 13. Feb 2009 21:05

Re: Formularbreite zur Laufzeit ändern
 
Der Quelltext an sich ist schon richtig. Wenn exakt diese Zeile nicht geht und frm_NewEvent das richtige Formular ist, dann lässt das eigentlich nur den Schluss zu, dass du ein Speicherproblem hast. D.h. dass du Speicher überschreibst, der eigentlich andere Daten enthält. Eine mögliche Ursache wären dann dynamische Arrays.

Aber wenn es das Formular selbst ist, dann dürfte das frm_NewEvent in dem Befehl eigentlich nicht nötig sein. Wie wäre es, wenn du einfach nur Width := 850; schreibst, geht es dann?

BackOrifice 13. Feb 2009 21:08

Re: Formularbreite zur Laufzeit ändern
 
Zitat:

Zitat von jaenicke
Aber wenn es das Formular selbst ist, dann dürfte das frm_NewEvent in dem Befehl eigentlich nicht nötig sein. Wie wäre es, wenn du einfach nur Width := 850; schreibst, geht es dann?

Wahnsinn, das ist es. Warum auch immer; mit frm_NewEvent (ja, dass ist die Variable der Form-Klasse), dann funktioniert es nicht - ohne ja.

Danke euch :thumb:

jaenicke 13. Feb 2009 21:36

Re: Formularbreite zur Laufzeit ändern
 
Ich vermute, dass du eine Instanz des Formulars erstellst und anzeigst, die aber nicht in der Variablen landet. Oder dass eine weitere Instanz erstellt wird, so dass z.B. eine automatisch erstellte Instanz nicht mehr in der Variablen liegt, usw.

Da gibt es viele Erklärungen. Grundsätzlich ist jedenfalls die Angabe der Variablen bei einem Zugriff aus einer Methode des Formulars nicht nötig, deshalb sollte man es auch weglassen. Falls es absichtlich mal mehrere Instanzen gibt zum Beispiel.

Wenn, dann kannst du Self benutzen, falls du den Zugriff auf das eigene Formular deutlich machen willst (bei gleichen Namen, z.B. einem Parameter Width für die aktuelle Methode). Also z.B.
Delphi-Quellcode:
Self.Width := Width;
, aber besser ist es natürlich gleiche Bezeichner zu vermeiden.

BackOrifice 13. Feb 2009 21:53

Re: Formularbreite zur Laufzeit ändern
 
Zitat:

Zitat von jaenicke
Ich vermute, dass du eine Instanz des Formulars erstellst und anzeigst, die aber nicht in der Variablen landet. Oder dass eine weitere Instanz erstellt wird, so dass z.B. eine automatisch erstellte Instanz nicht mehr in der Variablen liegt, usw.

zOMG! Genau so ist es..... Automatisch werden ja von Delphi bei neuen Formularen die Variablen der Klasse angelegt - und ich habe das zwar die automatische Erzeugung ausgeschaltet aber nicht die Variable gelöscht ;)

// Danke dir :-D


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