![]() |
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: |
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? |
Re: Prozeduren in anderen Units ansprechen
Vielleicht sind die Froms nocht nicht da ?
Mit
Delphi-Quellcode:
bekommst du keine Zugriffsverletztung mehr.
if Assigned( FormN ) then FormN.funktion else Application.ShowMessage('FormN nicht da!!??','FEHLER');
|
Re: Prozeduren in anderen Units ansprechen
Zitat:
|
Re: Prozeduren in anderen Units ansprechen
Zitat:
Delphi-Quellcode:
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.
if not assigned(FormN) then
begin Application.CreateForm(TFormN, FormN); end; FormN.function; |
Re: Prozeduren in anderen Units ansprechen
nochmal, die Formulare sind vorhanden, das oben ist eine schematische Darstellung!
|
Re: Prozeduren in anderen Units ansprechen
Ist diese Variable
Delphi-Quellcode:
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
form1_2
Delphi-Quellcode:
und das ganze hat sich!
form3.funktion
|
Re: Prozeduren in anderen Units ansprechen
Hi,
die Aktualisierung des Treeview erst mit OnShow der Form2 vornehmen? mfg BrunoT |
Re: Prozeduren in anderen Units ansprechen
Zitat:
Zitat:
|
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:
aufrufst?
TSomeForm.Create().DoSomething();
Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz