AGB  ·  Datenschutz  ·  Impressum  







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

probleme beim prozeduraufrufen

Ein Thema von mastaofdesasta · begonnen am 16. Okt 2006 · letzter Beitrag vom 16. Okt 2006
Antwort Antwort
mastaofdesasta

Registriert seit: 13. Sep 2006
8 Beiträge
 
#1

probleme beim prozeduraufrufen

  Alt 16. Okt 2006, 11:41
Hi,

ist leider eine Anfängerfrage, aber ich hab nix dazu gefunden:
Ich hab drei Forms, die erste wird automatisch erzeugt, die Zweite wird beim Create der Ersten erzeugt und die Dritte bei einem Klick auf einen Button der Zweiten. Das funktioniert ja soweit Jetzt möchte ich aber wenn ich auf einen Button in der dritten Form klick, dass eine public-prozedur in der zweiten Form aufgerufen wird und sich irgendein Element der zweiten Form ändert (zB: die Caption des Buttons).
Die Prozedur kann ich aufrufen, aber sobald ich auf ein Element zugreifen möchte, bekomm ich eine EAccessViolation. Meine Frage ist wie kann ich das umgehen und vor allem: Wieso bekomm ich das nicht wenn ich nur zwei Forms erstelle (dh: die erste in obigen Beispiel weglasse)?

Danke schon mal.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#2

Re: probleme beim prozeduraufrufen

  Alt 16. Okt 2006, 11:53
Bei mir macht Dein Beispiel keine Zugriffsverletzungen. Wen hast Du denn als Owner in der create-Routine gesetzt?

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: probleme beim prozeduraufrufen

  Alt 16. Okt 2006, 11:55
Bist du dir sicher, dass das Formular und die komponenten, auf die du zugreifst, schon instantiiert sind?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mastaofdesasta

Registriert seit: 13. Sep 2006
8 Beiträge
 
#4

Re: probleme beim prozeduraufrufen

  Alt 16. Okt 2006, 12:24
Für den Owner hab ich nil und Self probiert: Dasselbe Problem. Ich poste mal den Code:

unit Unit1;

uses Unit2;

procedure TForm1.FormCreate(Sender: TObject);
var Form: TForm;
begin

Form:=TForm2.Create(nil);
Form.Show;

end;

unit Unit2;

uses Unit3;

procedure TForm2.Button1Click(Sender: TObject);
var Form: TForm;
begin
Form:=TForm3.Create(nil);
Form.Show;

end;

procedure TForm2.Test;
begin
Button1.Caption:='**';
end;

unit Unit3;

uses Unit2;

procedure TForm2.Button1Click(Sender: TObject);
begin
Unit2.Form1.Test;

end;

Wie gesagt die Methode Test ist public.

Instantiiert ist da alles richtig oder?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: probleme beim prozeduraufrufen

  Alt 16. Okt 2006, 12:29
Hallo,

schon, sonst würde es ja nicht laifen
aber...

Unit2.Form1 ist NIL !

Du hast ja in deinen Methoden eine var TForm-Variable.

Du musst schon schreiben

Unit2.Form1:= TForm.Create(NIL)

Dann kannst du auch gleich die Variablen mal besser bezeichnen,
also Unit2.Form_WatWeesIch


Wobei das alles schlechter Programmierstil ist,
falls das "Test" nicht irgendwas im Form2 macht.


Heiko
Heiko
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#6

Re: probleme beim prozeduraufrufen

  Alt 16. Okt 2006, 12:37
...zusätzlich ist Deine Variable Form lokal in einer Ereignisroutine deklariert. Damit kannst Du nach dem FormShow meiner Meinung nach nicht mehr darauf zugreifen.

Grüße, Messie
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#7

Re: probleme beim prozeduraufrufen

  Alt 16. Okt 2006, 13:03
Hi,

versuche es mal so

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var Form: TForm;
begin
   if Form = nil then Form := TForm.Create(Application);
   Form.Show;
end;
Uwe
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: probleme beim prozeduraufrufen

  Alt 16. Okt 2006, 13:07
Zitat von uwewo:
Hi,

versuche es mal so

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var Form: TForm;
begin
   if Form = nil then Form := TForm.Create(Application);
   Form.Show;
end;
Dies ist nicht nutzbar. Einfacher Grund: Die lokale Variable Form wird nicht initialisiert und enthält damit immer einen Zufallswert und kann damit mit einer sehr hohen Wahrscheinlichkeit ungleich Nil sein. Daher würde er ohne Erstellung der Form im Datennirvana eine Methode Show aufrufen -> es kracht im besten Falle. Auch wäre die Abfrage in diesem Falle hinfällig, da lokale Variablen bei verlassen der Methode/Procedure ihre Gültigkeit verlieren und damit ihren Inhalt. Wenn du die Methode/Procedure erneut aufrufst, steht nicht mehr das damalige drinne sondern ein zufälliger Inhalt.
  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 02:45 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