AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Variablen über Formularen

Ein Thema von JP29 · begonnen am 1. Mär 2012 · letzter Beitrag vom 2. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2   
JP29

Registriert seit: 27. Aug 2011
45 Beiträge
 
Delphi 6 Personal
 
#1

Variablen über Formularen

  Alt 1. Mär 2012, 15:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.287 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Variablen über Formularen

  Alt 1. Mär 2012, 15:54
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Variablen über Formularen

  Alt 1. Mär 2012, 15:57
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:
var

implementation
beliebiger Formulare.
Globale Variablen sollte allerdings so sparsam wie möglich eingesetzt werden.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
JP29

Registriert seit: 27. Aug 2011
45 Beiträge
 
Delphi 6 Personal
 
#4

AW: Variablen über Formularen

  Alt 1. Mär 2012, 16:21
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

Geändert von JP29 ( 1. Mär 2012 um 16:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Variablen über Formularen

  Alt 1. Mär 2012, 16:56
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.
http://www.delphipraxis.net/31181-gl...onstanten.html
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 1. Mär 2012 um 16:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.287 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Variablen über Formularen

  Alt 1. Mär 2012, 16:59
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:
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??
Was meinst Du damit? Die Variablen initialisieren? Globalen Variablen kannst Du bereits bei der Deklaration einen Initialwert zuweisen.
Delphi-Quellcode:
var
  GlobalInt: integer = 42;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Variablen über Formularen

  Alt 1. Mär 2012, 17:24
Wo ist denn das Problem mit den globalen Variablen??
Du knabberst noch an den Grundlagen. An globalen Variablen ist kaum was auszusetzen wenn du ein kleines Programm schriebst, aber irgendwann wird es unübersichtlich. Aus diesem Grund programmiert man... sagen wir mal in kleinen "Häufchen". Da ne Prozedur, da ne Funktion, und wenn ein Auftrag zehn Prozeduren durchläuft, dann schickt man die Variable per Parameter mit. Und wenn du im 10 Monaten dein altes Programm anpackst und die Variable fTrs3 seihst, dann gibt es zwei Möglichkeiten. Ist es ein lokale Variable, dann siehst du an den paar Zeilen der Prozedur wozu die da ist. Ist es ein globale Variable, dann hast du keine Ahnung wo sie überall in dem 11564 Zeilen langen Programm vorkommt.

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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Variablen über Formularen

  Alt 1. Mär 2012, 17:31
[QUOTE=Popov;1153902]
und wenn ein Auftrag zehn Prozeduren durchläuft, dann schickt man die Variable per Parameter mit.
Nein, dann macht man eine Klasse daraus und der Parameter wird zu einem Attribut der Klasse.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: Variablen über Formularen

  Alt 1. Mär 2012, 17:49
Nein, dann macht man eine Klasse daraus und der Parameter wird zu einem Attribut der Klasse.
Ok, ich wollte ihn nicht gleich erschrecken, sonst läuft er gleich zu Visual Basic rüber.
  Mit Zitat antworten Zitat
JP29

Registriert seit: 27. Aug 2011
45 Beiträge
 
Delphi 6 Personal
 
#10

AW: Variablen über Formularen

  Alt 2. Mär 2012, 16:09
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:
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}
und unit2:

Delphi-Quellcode:
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.
...ist das jetzt so richtig ...

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf