Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prozeduren in anderen Units ansprechen (https://www.delphipraxis.net/47644-prozeduren-anderen-units-ansprechen.html)

ibp 14. Jun 2005 09:43


Prozeduren in anderen Units ansprechen
 
Hallo,

ich habe da ein Problem :wall:, mit dem Zugriff auf Prozeduren anderer Units.
Es sind drei Units U1,U2,U3, hier schematisch dargestellt.
U1 ist die Main-Form, in U2 ist eine Baumstruktur (TreeView), die die Tabellenstruktur einer Datenbank darstellt und in U3 werden die Felder der DB je nach selektiertem Node dargestellt.
Jetzt will ich aber auch in U3 navigieren können und muss den Baum nachführen, aber da kracht es jedesmal, wenn ich von U3 auf U2 zugreifen will.!
Ich hoffe da gibt es eine Lösung!
Danke schon mal :cheers: fürs Interesse.
Grüße aus F

Delphi-Quellcode:
unit u1; // Formular 1

interface

uses
  u2, // unit 2
  u3; // unit 3
type
  ..
  private
    form2_1:TForm // von u2
    form3_1:Tform // von u3
  ..
  end;

var
  form1:Tfo_U1

..
procedure ..
begin
  form2_1.mach_was_mit_proc_in_form2; // <- klappt

  form3_1.mach_was_mit_proc_in_form3; // <- zugriffsverletzung
end;



unit u2; // Formular 2

interface

uses
  u1; // unit 1
  u3; // unit 3
type
  ..
  private
    form1_2:TForm // von u1
    form3_2:Tform // von u3
  ..
  end;

var
  form2:Tfo_U2


..
procedure ..
begin
  form1_2.mach_was_mit_proc_in_form1; // <- klappt

  form3_2.mach_was_mit_proc_in_form3; // <- klappt
end;



unit u3; // Formular 3

interface

uses
  ..
type
  ..
  end;

var
  form3:Tfo_U3

implementation

uses
  u1, // unit 1
  u2; // unit 2


..
procedure ..
var
  zugriff_auf_form1:Tfo_u1;
  zugriff_auf_form2:Tfo_u2;

begin
  zugriff_auf_form1.mach_was_mit_proc_in_form1; // <- zugriffsverletzung

  zugriff_auf_form2.mach_was_mit_proc_in_form2; // <- zugriffsverletzung
end:

fwsp 14. Jun 2005 09:47

Re: Prozeduren in anderen Units ansprechen
 
wenn du ne zugriffsverletzung hast, hast du die anderen units initialisiert?
ne zirkuläre referenz ist nicht anwesend, oder?

sniper_w 14. Jun 2005 09:48

Re: Prozeduren in anderen Units ansprechen
 
Vielleicht sind die Froms nocht nicht da ?
Mit
Delphi-Quellcode:
if Assigned( FormN ) then FormN.funktion else Application.ShowMessage('FormN nicht da!!??','FEHLER');
bekommst du keine Zugriffsverletztung mehr.

ibp 14. Jun 2005 09:51

Re: Prozeduren in anderen Units ansprechen
 
Zitat:

Zitat von sniper_w
Vielleicht sind die Froms nocht nicht da ?
Mit
Delphi-Quellcode:
if Assigned( FormN ) then FormN.funktion else Application.ShowMessage('FormN nicht da!!??','FEHLER');
bekommst du keine Zugriffsverletztung mehr.

..die Formulare sind da!, es wird auch mit assigned geprüft!

ltiefland 14. Jun 2005 09:55

Re: Prozeduren in anderen Units ansprechen
 
Zitat:

Zitat von sniper_w
Vielleicht sind die Froms nocht nicht da ?
Mit
Delphi-Quellcode:
if Assigned( FormN ) then FormN.funktion else Application.ShowMessage('FormN nicht da!!??','FEHLER');
bekommst du keine Zugriffsverletztung mehr.

So
Delphi-Quellcode:
if not assigned(FormN) then
begin
  Application.CreateForm(TFormN, FormN);
end;
FormN.function;
ist es sogar noch besser. Damit wird das Form erzeugt, falls es nicht existiert. Außerdem: Es ist immer eine gute Idee mit begin und end zu arbeiten, auch wenn nur eine Anweisung in dem Block steht. Man weiß ja nie, ob nicht eines Tages doch noch eine zweite dazukommt. Vorsicht ist die Mutter der Porzellankiste. Außerdem: Es ist einfach übersichtlicher.

ibp 14. Jun 2005 10:04

Re: Prozeduren in anderen Units ansprechen
 
nochmal, die Formulare sind vorhanden, das oben ist eine schematische Darstellung!

ltiefland 14. Jun 2005 10:12

Re: Prozeduren in anderen Units ansprechen
 
Ist diese Variable
Delphi-Quellcode:
form1_2
auch initialisiert, sprich mit mit dem Formular verbunden? Ich würde an Deiner Stelle direkt die Variable aus den anderen Units verwenden und nicht eine "Link-Variable" einführen. Das macht nur Ärger. Wenn Du also mit dem Form aus U3 arbeiten möchtest, dann verwende einfach
Delphi-Quellcode:
form3.funktion
und das ganze hat sich!

BrunoT 14. Jun 2005 10:13

Re: Prozeduren in anderen Units ansprechen
 
Hi,

die Aktualisierung des Treeview erst mit OnShow der Form2 vornehmen?

mfg
BrunoT

ibp 14. Jun 2005 11:01

Re: Prozeduren in anderen Units ansprechen
 
Zitat:

Zitat von ltiefland
Ist diese Variable
Delphi-Quellcode:
form1_2
auch initialisiert, sprich mit mit dem Formular verbunden? Ich würde an Deiner Stelle direkt die Variable aus den anderen Units verwenden und nicht eine "Link-Variable" einführen. Das macht nur Ärger. Wenn Du also mit dem Form aus U3 arbeiten möchtest, dann verwende einfach
Delphi-Quellcode:
form3.funktion
und das ganze hat sich!

nee ist nicht, ergibt auch eine AV!

Zitat:

Zitat von BrunoT
die Aktualisierung des Treeview erst mit OnShow der Form2 vornehmen?

ich kann ja noch nicht mal darauf zugreifen ohne AV!

alcaeus 14. Jun 2005 11:04

Re: Prozeduren in anderen Units ansprechen
 
Hallo ibp,

hast du mal versucht, dich mit dem Debugger "durchzuhangeln" um rauszufinden wo genau die Zugriffsverletzung auftritt? Wenn ja, passiert es schon beim Aufruf oder erst irgendwo weiter drin? Ueberpruefe nochmal, ob du in den Units immer nur mit "Self" auf das Formular zugreifst, und nicht auf die globale Formvariable, welche im interface-Teil der Formunit deklariert ist (falls sie vorhanden ist). Das ist auch ein Fehler der einem oft passiert.

Weiters, was passiert wenn du
Delphi-Quellcode:
TSomeForm.Create().DoSomething();
aufrufst?

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr.
Seite 1 von 2  1 2      

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