| Autor |
Beitrag |
Chakvour
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
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.
      
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: 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
Delphi-Quelltext 1:
| Form1.Var1 := 'DiesDas'; |
Dann haste auch immer zugriff drauf, musst nur immer die Unit1 in die uses Klausel eintragen!
|
|
jaenicke
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
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.
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.
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.
      
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: 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:
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.
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' , 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
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 public 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:
Delphi-Quelltext 1:
| ExtractFilePath(Application.ExeName)+'config.ini' |
|
|
Chakvour 
Hält's aus hier
Beiträge: 12
|
Verfasst: 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.
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.Button5Click(Sender: TObject); begin label1.caption := ini.ReadString('Settings', 'Beschreibung', '');
end; |
es funktioniert nur so
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 
Hält's aus hier
Beiträge: 12
|
Verfasst: So 15.11.09 19:24
|
|
Chakvour 
Hält's aus hier
Beiträge: 12
|
Verfasst: So 15.11.09 19:25
Chakvour hat folgendes geschrieben : | Chakvour hat folgendes geschrieben : | 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.
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.Button5Click(Sender: TObject); begin label1.caption := ini.ReadString('Settings', 'Beschreibung', '');
end; |
es funktioniert nur so
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
Delphi-Quelltext 1:
| Beschreibung := Ini.ReadString('Settings','Beschreibung',''); |
aso sollte das ja so aussehen
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.
      
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: So 15.11.09 19:25
Ich habe extra ein beispiel gewählt, wo du "Beschreibung" als property hast.
Also reicht ein:
Delphi-Quelltext 1:
| Label1.Caption := config.beschreibung; |
vollkommen aus!
|
|
Chakvour 
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|