![]() |
auf variable einer anderen unit zugreifen klapt nicht
Hi,
ich habe zwei Units: Unit1, Farben. Auf Unit1 steht unter Implementation "uses farben;". Die Variable "vordergrundfarbe" ist in Farben unter Public deklariert. Unit1 sieht "vordergrundfarbe" als undefinierten bezeichner, wenn ich
Delphi-Quellcode:
schreibe. Warum?
Bild.canvas.Pen.Color := Farben.vordergrundfarbe;
|
Re: auf variable einer anderen unit zugreifen klapt nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Ok, hier ein winziges Beispiel, wie ich es gemacht habe. Auch hier klappt es nicht. Wäre super wenn sich das jemand anschauen könnte!
|
Re: auf variable einer anderen unit zugreifen klapt nicht
Hi!
1) Du darfst nicht Unit1.Mess schreiben, sondern Form1.Mess 2) Du versuchts auf etwas zuzugreifen, was es noch nicht gibt. Mess wird in Form1.Create zugewiesen. Wenn du dann nach dem Start auf den Button klickst wurde das Create ja noch nicht ausgeführt ==> Bumm (Dieser Fehler beruht auf de Tatsache, die Helmi weiter unten noch gepostet hat) Ciao Frederic |
Re: auf variable einer anderen unit zugreifen klapt nicht
Liste der Anhänge anzeigen (Anzahl: 1)
und die Unit1 ist nicht im Projekt dabei
Projekt - Dem Projekt hinzufügen Unit1.pas auswählen ich hab das mal im Projekt gemacht |
Re: auf variable einer anderen unit zugreifen klapt nicht
Ich bekomme es trotz des super Beispiels nicht hin :cry:.
Also ich muss als erstes die *.pas, die die Variable enthält in das Projekt einfügen, in dem ich auf Projekt->dem Prohekt hinzufügen gehe, dann schreib ich in den Public bereich der besagten *.pas die Variable rein, dann schreib ich noch in die pas, die die Variable bekommen möchte uses "die pas mit der variable". Dann ruf ich die Variable mit "NamederForminderdieVariableist.variable" auf, oder? Was kann man da falsch machen? Wie kann ich überprüfen, ob die *pas in der Projektdatei drin ist? Der findet die Variable immer noch nicht :cry:... edit: Wenn ich die *.exe ausführe, dann werden beide Formen geöffnet, von daher muss die ja auch im Projekt sein, oder? Spielt es eine Rolle, welche zu erst ausgeführt wird? (da sonst die andere Variable ja noch nicht deklariert wurde?) |
Re: auf variable einer anderen unit zugreifen klapt nicht
Hi!
Häng dein Projekt mal nochmal an. Die Reihenfolge ist nicht so wichtig, da sie ja beide created werden. Ciao Frederic |
Re: auf variable einer anderen unit zugreifen klapt nicht
Was willst du überhaupt damit machen?
|
Re: auf variable einer anderen unit zugreifen klapt nicht
Vielleicht hilft ja der SourceCode...
Erste Unit:
Delphi-Quellcode:
2.Unit:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ToolWin, ComCtrls, ExtCtrls, StdCtrls, Menus, Buttons; type TForm1 = class(TForm) procedure SpeedButton7Click(Sender: TObject); procedure SpeedButton8Click(Sender: TObject); procedure SpeedButton9Click(Sender: TObject); procedure ScrollBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure SpeedButton12Click(Sender: TObject); procedure SpeedButton13Click(Sender: TObject); procedure Button1Click(Sender: TObject); //... private werkzeug: string; zaehler, zaehler1, menge: integer; //... { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation uses Farben; {$R *.DFM} //.... Procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var xwert, ywert,i: Integer; begin StatusBar1.Panels[1].Text := Format('%d : %d', [X,Y]); if Zeichnen then begin if werkzeug='pinsel' then begin Bild.canvas.Brush.Style := bssolid; Bild.canvas.Pen.Color := farben.vordergrundfarbe; //....
Delphi-Quellcode:
Code:
unit Farben;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons; type TFarben = class(TForm) Panel2: TPanel; Image1: TImage; procedure Panel5Click(Sender: TObject); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1Click(Sender: TObject); procedure FormCreate(Sender: TObject); //... private farbe1, farbe2: BOOLEAN; farbe: TColor; { Private-Deklarationen } public hintergrundfarbe: TColor; vordergrundfarbe: TColor; { Public-Deklarationen } end; var Farben1: TFarben; implementation {$R *.DFM}
Delphi-Quellcode:
Kein Ahnung, ob das letzte gebraucht wird. Wäre super wenn sich da mal jemand durchschlagen könnte. ICh bin kurz davor mit dem Kopf vor die Wand zu rennen :wall: :pale: :wink:
program MRpaintdpr;
uses Forms, Unit1 in 'Unit1.pas' {Form1}, Farben in 'Farben.pas' {Farben}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TFarben, Farben1); Application.Run; end. P.S.: Coole Idee mit den Weihnatchtssmilies, sowas hab ich in keinem anderen Forum erlebt! //Edit: Ich habe eine Art Paint programmiert (ist ein wenig besser, als MS's Paint :-D ), jetzt will ich aber die Farbauswahl in einer neuen Form haben, da das dann wie in professionellen Programmen ist, aber leider klappt die Variable-Übergabe ja nicht... |
Re: auf variable einer anderen unit zugreifen klapt nicht
Hi!
Evtl. ist das Problem, dass bei dir Unit und Form gleich heißen. Probier mal den Zugriff über Farben.Farben.Vordergrundfarbe. BTW: Was kommt denn für ein Fehler? Ciao Frederic |
Re: auf variable einer anderen unit zugreifen klapt nicht
Hallo An00bis,
ich finde in Deinem geposteten Quelltext der Unit Farben keinen Verweis auf Unit1. Müsste der nicht im uses - Bereich der Unit Farben stehen (gleich unter interface)? Steffen |
Re: auf variable einer anderen unit zugreifen klapt nicht
Danke erstmal, dass ihr euch dadurch geschlagen habt :wink:
Der Fehler, der immer kommt lautet: "[Fehler] Unit1.pas(235): Undefinierter Bezeichner: 'vordergrundfarbe'" Wenn ich Farben.Farben.Vordergrundfarbe schreibe kommt "[Fehler] Unit1.pas(235): Record, Objekt oder Klassentyp erforderlich". @runningsoft: Muss (so weit ich weiß) nicht, da "Farben" ja nur die Variable bereitstellt. Aber hab es auch mal da reingestellt, macht keinen Unterschied. Ich werde nachher mal die Dateien posten, aber da es um einen Wettbewerg zwischen mir und einem Freund geht, will ich nicht den gesammten Code posten, da er mir sonst die Ideen klauen könnte :wink: (es geht darum, wer das bessere Paint programmiert). Deshalb werde ich das Programm mal auseinander nehmen und nur die dafür wichtigen Bereiche hier posten. |
Re: auf variable einer anderen unit zugreifen klapt nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Hier der Code, stört euch bitte nicht an den ganzen deklarierten Variablen, die nicht genutzt werden.
|
Re: auf variable einer anderen unit zugreifen klapt nicht
Hi!
Doch die Unit muss angegeben werden. Also dann nicht Farben.Farben, sondern nur Farben.Vordergrundfarbe, aber dann eben die Unit Farben oben angeben. Ciao Frederic |
Re: auf variable einer anderen unit zugreifen klapt nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Du hattest da ein paar arge Fehler mit den benennungen drin! Ich habe es mal so überarbeitet, dass es passt. Ciao Frederic |
Re: auf variable einer anderen unit zugreifen klapt nicht
Hab vielen Dank! :party:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:08 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