Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - simple Frage zu public Variable
schlumsch - Sa 21.11.09 12:01
Titel: simple Frage zu public Variable
Hallo,
seit langem beshäftige ich mich mal wieder mit Delphi und habe
eine simple Frage zum Thema Variablen & scope.
Ich hab bislang in meinem Programm eine globale
Variable pictureFile:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| ... procedure Button1Click(Sender: TObject); procedure FormShow(Sender: TObject);
private procedure Systray(var sMsg: TMessage); message IC_CLICK; public end; var Form1: TForm1; pictureFile: String; ... |
Damit funktioniert mein Prog wunderbar. Nun möchte ich aus einer anderen Unit auf eben diese variable zugreifen und deklariere sie public, ändere alle zugriffe aus der aktuellen unit auf Form1.pictureFile := ....
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| ... procedure Button1Click(Sender: TObject); procedure FormShow(Sender: TObject);
private
procedure Systray(var sMsg: TMessage); message IC_CLICK; public pictureFile: String; end;
var Form1: TForm1; ... |
Wieso funktioniert das nicht? Sprich die Variable ist mal einfach schlicht weg leer... wo ist da mein Fehler?
Mike19 - Sa 21.11.09 12:10
Hallo,
in Deinem ersten Quelltext war doch Deine Variable schon global, was willst Du da noch ändern. Wenn Du jetzt in einer anderen unit die erste unit in die uses-Klausel aufnimmst, steht Dir doch die Variable zur Verfügung.
schlumsch - Sa 21.11.09 12:28
nope tut sie nicht. Mal ganz davon abgesehn das sich mein Problem auch schon soeben geklärt hat (man sollte beim umbenennen von Variablen eben auch darauf achten das man das speichern und laden an den neuen Namen anpasst *g*) bekomme ich keinen Zugriff auf pictureFile wenn sie global ist. aus meiner 2ten unit heraus bringt mir ein Form1.
keinen Treffer, wenn ich die Variable public deklariere hingegen schon
Kha - Sa 21.11.09 12:50
Nach einem Form1. werden dir nunmal die Klassenmember der TForm1-Klasse angeboten und nichts Anderes ;) . Genauso wie auf die globale Variable Form1 greifst du direkt auf pictureFile (oder explizit: Unti1.pictureFile) zu.
Jetzt fehlt nur noch der Standard-Disclaimer, dass robustes OOP-Design globale Variablen überflüssig macht ;) .
Mike19 - Sa 21.11.09 12:58
ich verstehe es nicht.
warum soll das nicht funktionieren
Delphi-Quelltext
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: 35: 36:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1; test: String;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin machwas(Edit1.Text); end;
end. |
und:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| unit Unit2;
interface uses unit1; procedure machwas(test:String); implementation procedure machwas(test: String); begin test:='irgendetwas'; Form1.Label1.Caption:=Test; end; end. |
schlumsch - Sa 21.11.09 14:56
@Mike19: wie schon geschrieben lag das Problem an einer anderen Stelle in meinem Prog.
@KHA: Ja nee is klar... man sollte es mit "unit" probieren... Ich verfolge nur die Taktik mich Stück für Stück einer adequaten Implementierung zu nähern, sprich getter und setter für priv Vars sind eben erst an einem späteren Zeitpunkt geplant, zuvor hab ich noch genügend Ecken an denen ich baseln muss :)
danke jedenfalls
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!