AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form Create

Ein Thema von Tau · begonnen am 24. Apr 2004 · letzter Beitrag vom 24. Apr 2004
Antwort Antwort
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#1

Form Create

  Alt 24. Apr 2004, 19:16
Hallo Leute

Ich versuch mein Programm etwas abzuspecken und bin auf ein Problem gestoßen.
um das Ganze etwas abzukürzen habe ich ein kleines Demo gebastelt.
Das Problem zum umschreiben ist etwas kompliziert deshalb das Demo


Es sind 4 Button auf den Formular ( Demo 1, Demo 2, Test 1, Test 2 ).

und Demo 1, und Test 1 bekomme ich immer eine Speicherschutzverletzung.
Im Grunde ist kein unterschied zwischen Demo 1 und Demo 2 ( Test 1 und Test 2 )
Trotz dem der Fehler.

habe leider keine Ahnung warum.

für etwas Unterstützung währe ich sehr Dankbar

Gruss
Tau
Angehängte Dateien
Dateityp: zip 052_form_open.zip (5,1 KB, 10x aufgerufen)
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Form Create

  Alt 24. Apr 2004, 20:36
Moin!

Wieso nutzt du auch das Application.CreateForm() ?? Das sollte so oder so am besten nur vor dem Application.Run in der DPR aufgerufen werden. Wenn du zur Laufzeit Formulare erzeugen willst, dann nimm den normalen Constructor:

  Fm := TForm2.Create(Application); /EDIT:
Der Fehler liegt ganz wo anders:

Warum so:
 Fm1.Width := 250; Anstatt so:  Width := 250; ??

Und genau dein Problem zeit die Verwendung von globalen Variablen in der Unit zum Zugriff. Vielleicht hast du irgendwann mal 2 Instanzen von TFm1 und mit deinem Code greifen beide Instanzen immer auf den Wert von nur einer Instanz zurück anstatt auf ihren eigenen Wert.

Und das Problem liegt genau bei dem Zugriff - bekommt man ja leicht beim debuggen raus: Du übergibst deinem Support DataModul die Instanzenvariablen - das ist schön, aber sie sind nicht als VAR deklariert, somit werden die übergebenen Original Variablen Dm1 und Fm1 niemals mit dem richtigen Wert gefüllt, somit geht der Aufruf schief. Ruf einmal zuerst die unteren beiden Buttons auf und dann klappt es oben auch - weil die unteren ordentlich die Variablen füllen.

Und solche Zugriffe wie du sie machst mit Fm2.Width sind so oder so kreuz gefährlich. Wenn du dir die Form nicht auto-instanziieren lässt durch Delphi (AutoCreateForm), dann schmeiss die Variable in der Unit raus - das bricht irgendwann mal das Genick...

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:25 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