| Autor |
Beitrag |
mick
      
Beiträge: 159
|
Verfasst: Mo 19.10.09 16:49
liebe forums-kollegen,
meine frage ist fuer einen "experten" sicherlich leicht zu klaeren, daher wollen wir mit der peinlichkeit beginnen. habe eine vereinfachte variante meines problems geschrieben, damit der programmcode drumherum hier nicht im weg steht.
zwei formulare in einem projekt. in unit1 wird nach button-klick eine zahl aus einem edit in die variable "zahl" ausgelesen. dann wird das formular von unit2 aufgerufen. soweit, so gut. danach soll in unit2 auf die variable "zahl" zugegriffen werden und ihr wert veraendert werden (s. u.). der zugriff klappt nicht. komme mit den uses- und public/private-angaben nicht zurecht (denke, hier liegt der hase begraben). wer vermag mir zu helfen?
erste unit:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| unit uUnit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, uUnit2;
type TForm1 = class(TForm) Edit1: TEdit; BtnZuweisenAufrufen: TButton; procedure BtnZuweisenAufrufenClick(Sender: TObject); private public Zahl: Integer; end;
var Form1: TForm1; implementation
{$R *.dfm}
procedure TForm1.BtnZuweisenAufrufenClick(Sender: TObject); begin Zahl := StrToInt(Edit1.Text); Form2.ShowModal; end;
end. |
zweite unit, im gleichen projhekt, versteht sich:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| unit uUnit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm2 = class(TForm) BtnNeueZuweisung: TButton; procedure BtnNeueZuweisungClick(Sender: TObject); private public end;
var Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.BtnNeueZuweisungClick(Sender: TObject); begin Zahl := 42; end;
end. |
danke fuer die hilfe im voraus,
ciao,
mick.
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mo 19.10.09 16:55
|
|
mick 
      
Beiträge: 159
|
Verfasst: Mo 19.10.09 18:15
danke fuer den hinweis.
doch dann bekomme ich folgende fehlermeldung:
[Fataler Fehler] uUnit1.pas(7): Überkreuzender Bezug zweier Units auf 'uUnit1'
ciao,
mick.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 19.10.09 18:56
Deswegen hat er ja geschrieben, unter Implementation.
Du hast es vermutlich bei den Interface Uses mit angehängt.
Edit: Unter Implementation gibts noch kein Uses, musst du selber erst noch einfügen.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
mick 
      
Beiträge: 159
|
Verfasst: Mo 19.10.09 19:04
ah, alles klar, wer lesen kann ist klar im vorteil.
danke!
ps: welchen unterschied macht es, wenn ich das im implementation-teil selbst hinschreibe? kann mir jmd. einen text, eine anleitung, ein kl. skript o.ae. dazu (hier im forum?) empfehlen, wo ich da naeheres zu nachlesen kann? kann das naemlich jetzt so wie beschrieben machen, aber verstehe es nciht - warum darf das oben in uses nicht mit rein?
ciao,
mick.
|
|
NetSpider
      
Beiträge: 123
Windows XP Pro
Delphi 7 Enterprise
|
Verfasst: Mo 19.10.09 19:11
Die Variable Zahl ist im public-Abschnitt einer Object-Definition deklariert. Somit wird jedes Objekt das vom Type TForm1 ist diese Variable als Attribute haben.
Also:
Delphi-Quelltext
Wenn du die Variable global in der Unit habe moechtest, dann solltest du sie nach da verschieben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| ... type TForm1 = class(TForm) Edit1: TEdit; BtnZuweisenAufrufen: TButton; procedure BtnZuweisenAufrufenClick(Sender: TObject); private public end;
var Form1: TForm1; Zahl: Integer; implementation
... |
Allerdings ist dabei vorsicht geboten, da diese Variable von ueberall ausserhalb veraendert werden kann. Ausserdem hast du nur einmal Speicher reserviert (unabhaengig wie viele Objekte du von TForm1 erstellt hast). Soll heissen, diese Variable ist nicht Objekt-gebunden.
Zugriff erfolgt in uUnit2 mit:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| implementation
uses uUnit1;
...
procedure TForm2.BtnNeueZuweisungClick(Sender: TObject); begin uUnit2.Zahl := 42; end; |
Ich hoffe das stimmt so ungefaehr.
_________________ Wer in die Fußstapfen anderer tritt hinterlässt keine eigenen Spuren!
|
|
|