Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi INI Fragen wie immer (https://www.delphipraxis.net/99979-ini-fragen-wie-immer.html)

SaFu 20. Sep 2007 21:04

Re: INI Fragen wie immer
 
Es wäre sehr net von euch wenn ihr mir vielleicht doch bei dem problem helft versuche es jetzt schon seit stunden aber ich komme leider nicht darauf. :cry:

inherited 20. Sep 2007 21:29

Re: INI Fragen wie immer
 
Du hast die lösung doch bereits selbst gegeben?

SaFu 20. Sep 2007 21:31

Re: INI Fragen wie immer
 
dann bin ich total bescheuert

ich bekomme einen Fehler

ich habe jetzt alle einstellungen von 6 Formblätter in die ini gespeichert

jetzt möchte ich aber von der ersten form die werte für die anderen laden

bei diesem post bekomme ich einen fehler "zugriffs verletzung"
Delphi-Quellcode:
procedure TForm1.einstellungenf4;
Var durchlauf: TFileName;
begin
  durchlauf := (ExtractFilePath(ParamStr(0)) + 'EinstellungBilder.ini');
  with TMemIniFile.Create(durchlauf) do
  try
    Form4.Timer2.Enabled:= ReadBool(Einstellung, ja_nein, Form4.Timer2.Enabled); // hier bekomme ich den fehler
    UpdateFile;
  finally
    Free;
  end;
end;
und wo ist hier der fehler??
Delphi-Quellcode:
procedure TForm6.SpinEdit1Change(Sender: TObject);
begin
 Laufschrift := ExtractFilePath(ParamStr(0)) + 'settings.ini';
  begin
   SpinEdit1.MinValue:= 1;
   SpinEdit1.MaxValue:= 10;

   JsRunningText1.Steps:= SpinEdit1.Value; // Stufe einstellen
   Form3.JsRunningText1.Steps:= SpinEdit1.Value;

  with TMemIniFile.Create(Laufschrift) do
   try
     WriteInteger(laufschrifttext,stufe,SpinEdit1.Value);

     UpdateFile;
   finally
    Free;
  end;
 end;

end;

marabu 21. Sep 2007 06:51

Re: INI Fragen wie immer
 
Hallo Sascha,

UpdateFile() musst du nur aufrufen, wenn du Änderungen an TMemIniFile gemacht hast, weil diese Änderungen sonst nicht auf der Platte gespeichert werden.

Das Lesen und Schreiben von Einstellungen einer Form solltest du bei den Ereignissen OnCreate() und OnDestroy() ansiedeln. Jede Form sollte ihre Einstellungen selbst verwalten. Zugriffe der Forms untereinander solltest du nochmal überdenken, das geht oft auch besser.

Du musst auch überlegen welche Eigenschaften von Komponenten einen Neustart deines Programms überdauern müssen. Der Enabled-Status eines Timers gehört für mich nicht unbedingt dazu.

Die Zugriffsverletzung bei der folgenden Zuweisung kann ich nicht erkennen. Die Verwendung der existierenden Einstellung als Default-Wert ist ungewöhnlich, aber nicht strafbar. Vielleicht solltest du mal prüfen, auf was er da mit "Einstellung" und "ja_nein" zugreift.

Delphi-Quellcode:
//  ...
    Form4.Timer2.Enabled := ReadBool(Einstellung, ja_nein, Form4.Timer2.Enabled);
//  ...
Das Setzen von MinValue und MaxValue mit Konstanten machst du besser im Object Inspector. Und speichern musst du nicht bei jeder Änderung am SpinEdit, es reicht wenn du das beim Zerstören der Form machst.

Delphi-Quellcode:
procedure TForm6.SpinEdit1Change(Sender: TObject);
begin
  //...
    SpinEdit1.MinValue:= 1;
    SpinEdit1.MaxValue:= 10;
  // ...
end;
Freundliche Grüße

SaFu 21. Sep 2007 07:20

Re: INI Fragen wie immer
 
danke marabu habe deine einzelnen Punkte berücksichtigt

aber wie kann ich es denn realisieren das mien timer läuft wenn das Programm gestartet wird.

zudem habe ich gestern ihr auch noch einen Fehler bekommen ich habe auch schon einige dinge versucht die hier im Forum stehen aber nichts hat geklappt
Delphi-Quellcode:
JSRunningText1.Color:= StringToColor(ReadString(Laufschrifttext,farbe,JSRunningText1.Color);
mach ich irgfen ein Fehler der wert wurde vorher mit colorToString in die ini geschrieben das funtzt auch

Tormentor32 21. Sep 2007 07:33

Re: INI Fragen wie immer
 
Du kannst Farben einfach als integer speichern, probier das mal!

SaFu 21. Sep 2007 07:36

Re: INI Fragen wie immer
 
mit dem colorToInt

Hawkeye219 21. Sep 2007 07:57

Re: INI Fragen wie immer
 
Hallo,

wenn die Methode einstellungenf4 im Handler für das OnCreate-Ereignis von Form1 aufgerufen wird, kann das zu einer Zugriffsverletzung führen, da zu diesem Zeitpunkt die übrigen Formulare möglicherweise noch nicht existieren. Die zugehörigen Formularvariablen (in diesem Fall Form4) haben dann den Wert NIL.

Gruß Hawkeye

SaFu 21. Sep 2007 08:14

Re: INI Fragen wie immer
 
Also ic Poste mal meine ganze Form

ich bekomme immer dan einen Fehler wenn etwas auf eine andere Form zugreifen will(von Form3 auf Form6)

Bei allen auskommentierten sachen habe ich einen fehler
Delphi-Quellcode:
unit Unit6; // Laufschrift bearbeiten

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons, MPlayer, JsRunningText, Spin,
  ColorGrd, IdBaseComponent,InIFiles, IdComponent, IdTCPConnection, IdTCPClient, IdTime;

type
  TForm6 = class(TForm)
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel4: TPanel;
    SpeedButton1: TSpeedButton;
    JsRunningText1: TJsRunningText;
    Memo1: TMemo;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label7: TLabel;
    ComboBox1: TComboBox;
    SpinEdit1: TSpinEdit;
    CheckBox1: TCheckBox;
    FontDialog1: TFontDialog;
    Button1: TButton;
    ColorDialog1: TColorDialog;
    Button5: TButton;
    IdTime1: TIdTime;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);


  private
  lauftext :TFileName;
  Laufschrift: TFileName;
 { Private-Deklarationen }
  public

  const
  laufschrifttext = 'Laufschrift';
  farbe = 'Farbehintergrund';
  stufe = 'Stufe';
  stufelaufschrift = 'stufelaufschrift';
  Richtung = 'Richtung';
  ein_aus = 'Ein/Aus';{ Public-Deklarationen }
  end;

var
  Form6: TForm6;



implementation

uses Unit2, Unit1, Unit11, Unit3;

{$R *.dfm}

procedure TForm6.FormCreate(Sender: TObject);
var i :integer;
begin
  for i:= 0 to ComponentCount-1 do //XP Anzeige
  if Components[i] is TPanel then (Components[i] as TPanel).ParentBackground:= False;

  Laufschrift := (ExtractFilePath(ParamStr(0)) + 'settings.ini');
  with TMemIniFile.Create(Laufschrift) do
  try
    JsRunningText1.Run:= ReadBool(laufschrifttext, ein_aus, JsRunningText1.Run);
    SpinEdit1.Value:= ReadInteger(Laufschrifttext ,stufe, SpinEdit1.Value);
    ComboBox1.ItemIndex:= ReadInteger(Laufschrifttext ,Richtung, ComboBox1.ItemIndex);
     if ComboBox1.ItemIndex = 1 then
      begin
        Combobox1.Text:= 'Rechts';
      end
     else
      begin
       Combobox1.Text:= 'Links';
      end;
   // JSRunningText1.Color:= StringToColor(ReadString(Laufschrifttext,farbe,JSRunningText1.Color);

 finally
    Free;
  end;
end;

//==============Speichern der ini bei schließen der Form=======================
procedure TForm6.FormDestroy(Sender: TObject);
begin
 Laufschrift := ExtractFilePath(ParamStr(0)) + 'settings.ini';
  begin
  with TMemIniFile.Create(Laufschrift) do
   try
     WriteInteger(laufschrifttext,stufe,SpinEdit1.Value);

     UpdateFile;
   finally
    Free;
  end;
end;
end;

procedure TForm6.FormShow(Sender: TObject);
begin
  Form6.Top:= 0;
  Form6.Left:= 0;



  lauftext:= ExtractFilePath(ParamStr(0)) +'Einstellungen\'+ 'Laufschrifttext.txt';
  Memo1.Lines.LoadFromFile(lauftext);

  Form6.DoubleBuffered:= True;

  JsRunningText1.Font.Size:= 12;
  JsRunningText1.AlwaysCenterText:= True;// text miitig setzen

  ComboBox1.ItemIndex:=0;

  Memo1.SetFocus;
end;

//========= Button Text bearbeiten===============================================
procedure TForm6.Button1Click(Sender: TObject);
begin
if Memo1.Text = '' then
  begin
   MessageDlgPos('Bitte zuerst Text eingeben!',mtInformation,[mbOk],0,260,200);
   Memo1.SetFocus;
  end
 else
   begin
    If FontDialog1.Execute then
     begin
      JsRunningtext1.Font:= Fontdialog1.Font;
      JsRunningText1.AlwaysCenterText:= True;

      Form3.JsRunningtext1.Font:= Fontdialog1.Font;
      Form3.JsRunningText1.AlwaysCenterText:= True;
     end;
   end;
end;

//=========Laufschrift einschalten==============================================
procedure TForm6.Button2Click(Sender: TObject);
begin
  Laufschrift := ExtractFilePath(ParamStr(0)) + 'settings.ini';
  with TMemIniFile.Create(Laufschrift) do
  try
    WriteBool(laufschrifttext,ein_aus,True);
    UpdateFile;
  finally
    Free;
  end;
 if JSRunningText1.Run = True then //Wenn Timer1 ein
   begin
    MessageDlgPos('Laufschrift ist eingeschaltet !',mtInformation,[mbOk],0,260,200);
   end
 else

    if Memo1.Text = '' then //Wenn Edit1 leer
      begin
       MessageDlgPos('Bitte zuerst Text eingeben!',mtInformation,[mbOk],0,260,200);
       Memo1.SetFocus; //Setze Focus auf Edit1
      end
    else
      begin
         lauftext:= ExtractFilePath(ParamStr(0)) +'Einstellungen\'+ 'Laufschrifttext.txt';
         Memo1.Lines.SaveToFile(lauftext); //in Datei speichern alleLehrer.txt

         JsRunningText1.Run:= True;
         JsRunningText1.Font.Size:= 12;
         JsRunningText1.AlwaysCenterText:= True;
         JsRunningText1.AlwaysCenterText:= True;

         Form3.JsRunningText1.Run:= True;
         Form3.JsRunningText1.Font.Size:= 18;
         Form3.JsRunningText1.Font.Style:= [fsBold];
         Form3.JsRunningText1.AlwaysCenterText:= True;
         Form3.Panel1.Visible:= True;
       end;
    end;

//=============Laufschrift ausschalten==========================================
procedure TForm6.Button3Click(Sender: TObject);
begin
  Laufschrift := ExtractFilePath(ParamStr(0)) + 'settings.ini';
  with TMemIniFile.Create(Laufschrift) do
  try
    WriteBool(laufschrifttext,ein_aus,False);

    UpdateFile;
  finally
    Free;
  end;
 if JSRunningtext1.Run = False then

  begin
   MessageDlgPos('Laufschrift ist bereits ausgeschaltet!',mtInformation,[mbOk],0,260,200);
  end

 else
   lauftext:= ExtractFilePath(ParamStr(0)) +'Einstellungen\'+ 'Laufschrifttext.txt';
    Memo1.Lines.SaveToFile(lauftext); //in Datei speichern alleLehrer.txt
     JsRunningText1.Run:= False;
       Form3.JsRunningText1.Run:= False;
          Label3.Visible:= False;
         Label4.Visible:= False;
     JSRunningText1.Color:= ClWhite;
  Form3.Panel1.Visible:= False;
end;

//=========Bedienungsanleitung aufrufen=========================================
procedure TForm6.SpeedButton1Click(Sender: TObject);
begin
 Form11.Show;
 Form11.Webbrowser1.Navigate('\Programme\ElInta\ElInta\Bedienungsanleitung.pdf');
end;

//===========Schließen==========================================================
procedure TForm6.Button4Click(Sender: TObject);
begin
  Form6.Close;
  Form2.Visible:= True;
end;

//========Text für die Laufschrift eingeben=====================================
procedure TForm6.Memo1Change(Sender: TObject);
begin
 JsRunningText1.Text:= Memo1.Lines;
 Form3.JsRunningText1.Text:= Memo1.Lines;
end;

//========Geschwindigkeit der Laufschrift ändern================================
procedure TForm6.SpinEdit1Change(Sender: TObject);
begin
    Form3.SpinEdit1.Value:= SpinEdit1.Value;
  // JsRunningText1.Steps:= SpinEdit1.Value; // Hier bekomme ich einen zugriffsfehler
end;

//=====Richtung für die Laufschrift ändern======================================
procedure TForm6.ComboBox1Change(Sender: TObject);
begin
 Laufschrift := ExtractFilePath(ParamStr(0)) + 'settings.ini';
  begin
   JsRunningText1.Direction:= TJsRunningTextDirection(ComboBox1.ItemIndex);
     with TMemIniFile.Create(Laufschrift) do
   try
     WriteInteger(laufschrifttext ,Richtung ,ComboBox1.ItemIndex);

     UpdateFile;
   finally
    Free;
  end;
   Form3.JsRunningText1.Direction:= TJsRunningTextDirection(ComboBox1.ItemIndex);
end;
end;
//===========Schaten für die Laufschrift========================================
procedure TForm6.CheckBox1Click(Sender: TObject);
begin
 JsRunningText1.Shadow.Visible:=CheckBox1.Checked;
 Form3.JsRunningText1.Shadow.Visible:=CheckBox1.Checked;
end;

//===========farben ändern======================================================
procedure TForm6.Button5Click(Sender: TObject);
begin
 Laufschrift := ExtractFilePath(ParamStr(0)) + 'settings.ini';
  begin
    with TMemIniFile.Create(Laufschrift) do
    try
     if Colordialog1.Execute then
       begin
        JSRunningText1.Color:= ColorDialog1.Color;
       // WriteInteger(laufschrifttext,farbe,ColorToInt(ColorDialog1.Color));
        Form3.JSRunningText1.Color:= ColorDialog1.Color;

        UpdateFile;
       end;
    finally
   Free;
  end;
 end;
end;
end.

inherited 21. Sep 2007 13:25

Re: INI Fragen wie immer
 
Herrgott zeig doch mal ein wenig eigeninitiative :roll:
Es gibt hier eine Forensucher, es gibt eine Internetsuchmaschine mit den Augen und auch eine Menge Fachliteratur.
Du musst hier nicht wegen jedem Mist gleich eine neue Frage eröffnen.
Außerdem solltest du dir die Vorschläge der Anderen mal zu Herzen nehmen. Jemand sagte bereits dass es vermutlich daran liegt, dass die andere Form noch nicht erstellt wurde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz