AGB  ·  Datenschutz  ·  Impressum  







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

Prozeduren in anderen Units ansprechen

Ein Thema von ibp · begonnen am 14. Jun 2005 · letzter Beitrag vom 14. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#1

Prozeduren in anderen Units ansprechen

  Alt 14. Jun 2005, 09:43
Hallo,

ich habe da ein Problem , 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 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:
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#2

Re: Prozeduren in anderen Units ansprechen

  Alt 14. Jun 2005, 09:47
wenn du ne zugriffsverletzung hast, hast du die anderen units initialisiert?
ne zirkuläre referenz ist nicht anwesend, oder?
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Prozeduren in anderen Units ansprechen

  Alt 14. Jun 2005, 09:48
Vielleicht sind die Froms nocht nicht da ?
Mit
if Assigned( FormN ) then FormN.funktion else Application.ShowMessage('FormN nicht da!!??','FEHLER'); bekommst du keine Zugriffsverletztung mehr.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#4

Re: Prozeduren in anderen Units ansprechen

  Alt 14. Jun 2005, 09:51
Zitat von sniper_w:
Vielleicht sind die Froms nocht nicht da ?
Mit
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!
  Mit Zitat antworten Zitat
Benutzerbild von ltiefland
ltiefland

Registriert seit: 2. Mai 2005
Ort: Marl
63 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Prozeduren in anderen Units ansprechen

  Alt 14. Jun 2005, 09:55
Zitat von sniper_w:
Vielleicht sind die Froms nocht nicht da ?
Mit
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.
Lars Tiefland
Live Long And Prosper,
Lars Tiefland
admin at GBS, a Mod for STEF2, New mod versions and support!
Download Opera 8
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#6

Re: Prozeduren in anderen Units ansprechen

  Alt 14. Jun 2005, 10:04
nochmal, die Formulare sind vorhanden, das oben ist eine schematische Darstellung!
  Mit Zitat antworten Zitat
Benutzerbild von ltiefland
ltiefland

Registriert seit: 2. Mai 2005
Ort: Marl
63 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Prozeduren in anderen Units ansprechen

  Alt 14. Jun 2005, 10:12
Ist diese Variable 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 form3.funktion und das ganze hat sich!
Lars Tiefland
Live Long And Prosper,
Lars Tiefland
admin at GBS, a Mod for STEF2, New mod versions and support!
Download Opera 8
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#8

Re: Prozeduren in anderen Units ansprechen

  Alt 14. Jun 2005, 10:13
Hi,

die Aktualisierung des Treeview erst mit OnShow der Form2 vornehmen?

mfg
BrunoT
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#9

Re: Prozeduren in anderen Units ansprechen

  Alt 14. Jun 2005, 11:01
Zitat von ltiefland:
Ist diese Variable 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 form3.funktion und das ganze hat sich!
nee ist nicht, ergibt auch eine AV!

Zitat von BrunoT:
die Aktualisierung des Treeview erst mit OnShow der Form2 vornehmen?
ich kann ja noch nicht mal darauf zugreifen ohne AV!
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: Prozeduren in anderen Units ansprechen

  Alt 14. Jun 2005, 11:04
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 TSomeForm.Create().DoSomething(); aufrufst?

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:08 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