![]() |
Variablen über Formularen
Hallo Leute,
ich habe da mal eine Frage. Und zwar gibt es einen Bereich in Delphi, in dem ich Variablen erstellen kann, auf den man von jeder Form zugreifen kann und wo ich vorher schon Werte hineinschreiben kann. Freu mich über eure Antworten. |
AW: Variablen über Formularen
Variablen im interface-Abschnitt sind von jeder Unit erreichbar, die diese Unit einbindet. Und gerade das ist das "Böse" daran, so dass man so etwas eigentlich vermeiden sollte.
|
AW: Variablen über Formularen
Globale Variablen kannst Du z.B. in einer eigenen Unit ablegen, die Du überall einbindest wo diese gebraucht werden.
Eine weitere beliebte Stelle ist der Bereich zwischen
Delphi-Quellcode:
beliebiger Formulare.
var
implementation Globale Variablen sollte allerdings so sparsam wie möglich eingesetzt werden. |
AW: Variablen über Formularen
Ok danke für die Antworten
Wo ist denn das Problem mit den globalen Variablen?? und kann man Variablen auch Größen außerhalb einer Funktion oder procedure, also ohne das vorher etwas passiert ist schon zuorden und wenn ja wie mach ich das?? oder kann ich auch von mehreren formen auf eine unit zugreifen, wenn ja wie genau gestalte ich das, sorry für die vielen fragen bin noch ein anfänger |
AW: Variablen über Formularen
könnte so aussehen, um überall daruf zugreifen zu können, einfach in die uses mit aufnehmen...
Delphi-Quellcode:
unit ConstsAndGlobals;
interface uses Classes, Dialogs, SysUtils, Windows, RegistryUtils, RegistryKeys, Forms, Inifiles, graphics; Type EDocError = Class(Exception); TDokuType = (dtAnf, dtAngeb, dtAB, dtLief, dtRech, dtGS); Const Meldungen: Array [1 .. 4] of String = ('Daten wurden bereits gedruckt und an die Buchhaltung ausgegeben'#13'Änderung trotzdem zulassen ?', 'Daten wurden bereits an die Buchhaltung ausgegeben'#13'Änderung trotzdem zulassen ?', 'Daten wurden bereits an die Buchhaltung ausgegeben'#13'Löschen trotzdem zulassen ?', 'Bankdiskette für diesen Satz wurde bereits erstellt'#13'Löschen trotzdem zulassen ?'); C_TailingArrayNeeedNE: Array [boolean] of String = ('', 'en'); CRLF=#13#10; C_ROUNDING = 10; C_SETTINGS = 'Settings'; c_admin = 1 shl 0; c_KillKund = 1 shl 1; c_KillLiefer = 1 shl 2; ...... ...... c_MissingRight = 'Keine ausreichenden Rechte vorhanden'; C_HelpTables: Array [0 .. 16] of String = ('anrede', 'Kalkgrup', 'Artikelobergruppen', 'Branche', 'Briefanr', 'Einheit', 'Fill', 'Typ', 'Bank', 'Kasstext', 'Buchkto', 'Lagerort', 'Mwst', 'PersGemKosten', 'ORTFZ', 'SP_Konditionen', 'Wargrup'); C_Stst: Array [0 .. 3] of String = ('RG', 'ZE', 'KA', 'UW'); var G_APPLICATION_PATH: String; G_REPORTS_PATH: String; G_CommandTimeOut: Integer; G_InifileName: String; ...... ...... G_Parameters: TStringList; implementation Procedure GetIniValues; var ini: TInifile; begin try ini := TInifile.Create(G_InifileName); try ...... ...... G_CommandTimeOut := ini.ReadInteger(C_SETTINGS,'CommandTimeOut',10); finally ini.Free; end; except end; end; Procedure SetIniValues; var ini: TInifile; begin try ini := TInifile.Create(G_InifileName); try ...... ...... ini.WriteInteger(C_SETTINGS,'CommandTimeOut',G_CommandTimeOut); finally ini.Free; end; except end; end; initialization G_Parameters := TStringList.Create; G_APPLICATION_PATH := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))); G_REPORTS_PATH := G_APPLICATION_PATH + 'Reports'; G_InifileName := ChangeFileExt(Application.Exename, '.ini'); GetIniValues; G_Parameters.Delimiter := ' '; G_Parameters.DelimitedText := CmdLine; finalization G_Parameters.Free; SetIniValues; end. ![]() |
AW: Variablen über Formularen
Wie gesagt, das Blöde an solchen globalen Variablen ist, dass jeder sie ohne Überprüfung verändern kann. Das kann zu sehr "lustigen" Effekten führen. Und natürlich kannst Du aus anderen Units darauf zugreifen, Du musst nur die enthaltende Unit in deren uses-Klausel aufnehmen.
Zitat:
Delphi-Quellcode:
var
GlobalInt: integer = 42; |
AW: Variablen über Formularen
Zitat:
Am Anfang erscheint es unlogisch, aber lokale Variablen sind keine Bösartigkeit, sondern ein Prozess bei dem programmieren optimiert wurde. Übrigens, wenn du willst kannst du auch mit Goto arbeiten. Hat Delphi auch. Nur ob es ein Sinn macht, ist eine andere Frage. Und was Units angeht. Du kannst von jeder Unit auf eine andere Unit zugreifen, wenn du sie nur in uses anmeldest. |
AW: Variablen über Formularen
[QUOTE=Popov;1153902]
Zitat:
|
AW: Variablen über Formularen
Zitat:
|
AW: Variablen über Formularen
ok das hab ich jetzt so weit verstanden nur die umsetzung mit den units noch nicht ganz also praktisch gesehen
ich zeig euch mal ein bischen von meinem quelltext und könnt ihr mir dort zeigen wie dir beiden units aufeinander zugreifen können... unit 1:
Delphi-Quellcode:
und unit2:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Spin; type TForm1 = class(TForm) GroupBox1: TGroupBox; Panel1: TPanel; GroupBox2: TGroupBox; GroupBox3: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; ComboBox1: TComboBox; ComboBox2: TComboBox; ComboBox3: TComboBox; ComboBox4: TComboBox; Label7: TLabel; Label8: TLabel; GroupBox4: TGroupBox; SpinEdit1: TSpinEdit; Label9: TLabel; Button1: TButton; procedure ComboBox1Change(Sender: TObject); procedure ComboBox3Change(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure ComboBox4Change(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; abholung: string; ruckgabe: string; dauer: integer; implementation uses Unit2; {$R *.dfm}
Delphi-Quellcode:
...ist das jetzt so richtig ...
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm2 = class(TForm) Panel1: TPanel; ListBox1: TListBox; GroupBox1: TGroupBox; Image1: TImage; GroupBox2: TGroupBox; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; abholung1: string; ruckgabe1: string; dauer1: integer; implementation uses unit1; {$R *.dfm} end. und kann ich jetzt auch mit einer procedure in form1 variablen in form2 verändern ?? und wie ist das wenn ich in beiden units variablen mit gleichem namen erstelle ... erkennt delphi das?? dankle schon mal im voraus...bis jetzt großes dankeschön an alle :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 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