Autor Beitrag
Chakvour
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 13.11.09 01:57 
Hallo,

ich habe zum testen erstmal ine Edit box erstellt die den namen "Edit1: TEdit;" hat.
So in der EditBox wird das angezeigt was in der INI steht. Das funktioniert alles wunderbar.

Doch nun wollte ich das was dort in der EditBox steht weil es ja aus der INI kommt in der Form1 in einem Label auslesen.
Sprich bei

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCreate(Sender: TObject);
begin
label1.caption := form2.edit1.text;
end;


problem ist nur das nun in dem label "Edit1" steht und nicht das was da stehen soll.
Oder muss ich in der Form1 auch wieder aus der ini was herrauslesen? Das muss doch auch anders gehen.
Denn mit dme INI Auslesen auch in der Form1 funktioniert doch ich möchte das kürzer machen.
Niko S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Fr 13.11.09 07:31 
hast du hinter implementation auch uses Unit2; geschrieben, damit das Programm weiß, dass du Unit2 verwendest? ^^
Und wenn das nicht so klappt wie du willst, packe doch alle wichtigen Variablen in der Hauptform als "public" ein
und setzte sie dann von anderen forms aus wenn nötig.
Also
ausblenden Delphi-Quelltext
1:
Form1.Var1 := 'DiesDas';					

Dann haste auch immer zugriff drauf, musst nur immer die Unit1 in die uses Klausel eintragen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 13.11.09 07:35 
Und die beste Lösung: Einfach das Auslesen der INI komplett von der Oberfläche trennen und von beiden Formularen drauf zugreifen.
Chakvour Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 13.11.09 16:52 
Ok bevor ich Fragen poste habe ich es jetzt erstmal getestet eine Variable in Form2 erstellt und konnte sie in Form1 auslesen.
Habs simple gemacht.

Form2
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
test1: string;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
test1 := 'Test';
end;


Diese Variable habe ich dann in Form1 auslesen können.
Am besten ist doch die Idee mit der getrennten INI sodass sie überall auslesbar ist. Wie erstelle ich denn sowas?
Ich habe bisher nur 2 Sachen. Das schreiben mit einem Button. Das sehe so aus. Und ist in Form2 enthalten.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm2.Button1Click(Sender: TObject);
begin
  with TIniFile.Create(ExtractFilePath(ParamStr(0)) +  'settings.ini'do
   try
    WriteString('settings''beschreibung', Edit1.Text);
   finally
    Free;
    form2.close;
  end;
end;


Das Auslesen habe ich so geregelt.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm2.FormShow(Sender: TObject);
begin
   with TIniFile.Create(ExtractFilePath(ParamStr(0)) +  'settings.ini'do
  try
    Edit1.Text := ReadString('settings''beschreibung''');
  finally
    free;
  end;
end;


Nur irgendwie möchte er es nicht in Form1 auslesen. Ich könnte auch halt das in Formshow reinmachen. Aber das ist so lala.
Niko S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Fr 13.11.09 18:48 
Hm ich hätte jetzt eine neue Klasse erstellt ...
Diese Klasse hätte ich in eine extra Unit eingebunden und dort auch gleich die Klasse als Variable Definiert.
Dann hätte ich einfach am Anfang des Projektes diese Variable gefüllt mit der Klasse und überall wo ich sie brauche eingebunden, so würde ich von überall drauf zugreifen können.
Beispiel:
ausblenden volle Höhe 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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
unit ConfigClass;

interface

uses IniFiles;

type
  TConfig = class
    private
      FBeschreibung: String;
      Ini: TIniFile;
    public
      procedure Setbeschreibung(Text: String);
      property Beschreibung: String read FBeschreibung write SetBeschreibung;
    published
      constructor Create(ConfigFile: String);
      destructor Destroy; override;
  end;

var
  Config: TConfig;

implementation

constructor TConfig.Create(ConfigFile: String);
begin
  inherited Create;

  Ini := TIniFile.Create(ConfigFile);
  Beschreibung := Ini.ReadString('Settings','Beschreibung','');
end;

destructor TConfig.Destroy;
begin
  Ini.Free;

  inherited;
end;

procedure TConfig.SetBeschreibung(Text: String);
begin
  FBeschreibung := Text;
  Ini.WriteString('Settings','Beschreibung',Text);
end;

end.

Das hier wäre die ConfigClass.pas

Und um das ganze einzubinden kannst du das entweder im Projektkopf machen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  ConfigClass in '..\ConfigClass.pas';

{$R *.res}

begin
  Config := TConfig.Create('.\config.ini');
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Oder in der MainForm der Anwendung
ausblenden volle Höhe 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, ConfigClass;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Config := TConfig.Create('.\config.ini');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Config.Destroy;
end;


end.


ACHTUNG:
Ich habe hier im Beispiel einen relativen Pfad benutzt.
Das ist nicht Ratsam!
Besser wäre:
ausblenden Delphi-Quelltext
1:
ExtractFilePath(Application.ExeName)+'config.ini'					
Chakvour Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 15.11.09 19:18 
Hm irgendwas funktioniert nicht so ganz.
ConfigClass.pas habe ich erstellt und ist auch im Project drinnen und auch klausel gesetzt.

Also die INI wird erstellt und auch mit einem hinhalt gefüllt.

Wollte nur mit einem Button klick das in ein label schreiben aber das programm stürzt dann ab wenn ich den button drücke.
anscheind weil die datei nicht gefunden werden kann.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button5Click(Sender: TObject);
begin
 label1.caption := ini.ReadString('Settings''Beschreibung''');

end;



es funktioniert nur so

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button5Click(Sender: TObject);
begin
   with TIniFile.Create(ExtractFilePath(ParamStr(0)) +  'config.ini'do
  try
    label1.caption := ReadString('settings''beschreibung''');
  finally
    free;
  end;
end;
Chakvour Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 15.11.09 19:24 
user profile iconChakvour hat folgendes geschrieben Zum zitierten Posting springen:
Hm irgendwas funktioniert nicht so ganz.
ConfigClass.pas habe ich erstellt und ist auch im Project drinnen und auch klausel gesetzt.

Also die INI wird erstellt und auch mit einem hinhalt gefüllt.

Wollte nur mit einem Button klick das in ein label schreiben aber das programm stürzt dann ab wenn ich den button drücke.
anscheind weil die datei nicht gefunden werden kann.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button5Click(Sender: TObject);
begin
 label1.caption := ini.ReadString('Settings''Beschreibung''');

end;



es funktioniert nur so

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button5Click(Sender: TObject);
begin
   with TIniFile.Create(ExtractFilePath(ParamStr(0)) +  'config.ini'do
  try
    label1.caption := ReadString('settings''beschreibung''');
  finally
    free;
  end;
end;


Aber in der ConfigClass.pas steht ja das hier

ausblenden Delphi-Quelltext
1:
Beschreibung := Ini.ReadString('Settings','Beschreibung','');					


aso sollte das ja so aussehen

ausblenden Delphi-Quelltext
1:
label1.caption := Beschreibung					


Aber Beschreibung ist dann nicht deklariert
ConfigClass steht in den Uses
Chakvour Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 15.11.09 19:25 
user profile iconChakvour hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconChakvour hat folgendes geschrieben Zum zitierten Posting springen:
Hm irgendwas funktioniert nicht so ganz.
ConfigClass.pas habe ich erstellt und ist auch im Project drinnen und auch klausel gesetzt.

Also die INI wird erstellt und auch mit einem hinhalt gefüllt.

Wollte nur mit einem Button klick das in ein label schreiben aber das programm stürzt dann ab wenn ich den button drücke.
anscheind weil die datei nicht gefunden werden kann.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button5Click(Sender: TObject);
begin
 label1.caption := ini.ReadString('Settings''Beschreibung''');

end;



es funktioniert nur so

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button5Click(Sender: TObject);
begin
   with TIniFile.Create(ExtractFilePath(ParamStr(0)) +  'config.ini'do
  try
    label1.caption := ReadString('settings''beschreibung''');
  finally
    free;
  end;
end;


Aber in der ConfigClass.pas steht ja das hier

ausblenden Delphi-Quelltext
1:
Beschreibung := Ini.ReadString('Settings','Beschreibung','');					


aso sollte das ja so aussehen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button5Click(Sender: TObject);
begin
label1.caption := Beschreibung
end;


Aber Beschreibung ist dann nicht deklariert
ConfigClass steht in den Uses
Niko S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: So 15.11.09 19:25 
Ich habe extra ein beispiel gewählt, wo du "Beschreibung" als property hast.
Also reicht ein:
ausblenden Delphi-Quelltext
1:
Label1.Caption := config.beschreibung;					

vollkommen aus!
Chakvour Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 15.11.09 19:42 
ok danke dir habs nicht ganz gesehen. das mit dem globalen sachen hatte ich noch nicht gemacht aber danke dir trotzdem.
und sorry wegen der posts hatte immer auf quote gedrückt anstatt edit :)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 15.11.09 19:54 
Wenn es tatsächlich um Einstellungen geht, kannst du auch meine SJ Config Utils verwenden. Diese automatisieren die Verwaltung der Einstellungen komplett.
www.delphi-forum.de/viewtopic.php?t=92348
Mit dem beiliegenden Tool kannst du diese auch automatisch deinem Projekt hinzufügen und musst hinterher nur noch von dem zweiten Formular darauf genauso zugreifen.