AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Fenster positionierung

Ein Thema von Daniel B · begonnen am 30. Jan 2003 · letzter Beitrag vom 31. Jan 2003
 
Daniel B
(Gast)

n/a Beiträge
 
#1

Problem mit Fenster positionierung

  Alt 30. Jan 2003, 23:01
Hallöchen,

so ich blick jetzt gar nicht mehr durch.
Kurz zum Ziel:
Das Hauptformular wird normalerweise gecentert auf dem Display angezeigt. Nun habe ich in den Einstellungen eine CheckBox, womit ich entscheiden kann, ob die Fensterposition gespeichert werden soll oder nicht. Ist die also geChecked, so soll beim schliessen die letzte position des Hauptformulares gespeichert werden. Schaltet man die CheckBox wieder aus, so soll danch das Formular dann wieder geCentert angezeigt werden. Also eigentlich nichts schwieriges.

So, jetzt ein bisschen Code:
Delphi-Quellcode:
var
  MainFormMC2004: TMainFormMC2004;
  mHandle: THandle;
  MC2004: TMC2004;
  Pfad: String;
  FensterPosSave: Boolean;
  Geoeffnete: Boolean;
  Gespeicherte: Boolean;
Also Global!
Delphi-Quellcode:
procedure TMainFormMC2004.FormShow(Sender: TObject);
//Funktionen, Befehle, die beim Start des Programmes ausgeführt werden
var
  ini: TIniFile;
  s, t, r, i, n, g: string;
begin
  if not (FileExists('MC2004.ini')) then //Fals es die Datei es noch nicht gibt
  begin
    ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini')); //Datei Öffnen
    try
      ini.WriteString('Einstellungen', 'Port', 'COM1'); //Standardwert COM1 schreiben
      ini.WriteString('Einstellungen', 'Baud', '19200'); //Standardwert 19000Baud speichern
      ini.WriteString('Einstellungen', 'Format', '2'); //Standardwert Müt schreiben
      ini.WriteBool('Einstellungen', 'Geoeffnete', False); //Zuletzt geöffnete laden
      ini.WriteBool('Einstellungen', 'Gespeicherte', False); //Zuletzt gespeicherte laden
      ini.WriteString('Programme', 'Monitor', ''); //Programmpfad für's Datenmonitor
      ini.WriteString('Programme', 'SAM', ''); //Programmpfad für's Signal-Anzeige-Modul
      ini.WriteString('Programme', 'MC2004W', ''); //Programmpfad für's MC2004W
      ini.WriteBool('Fensterdaten', 'Fensterposition', False); //Fensterposition speichern; Nein
      ini.WriteInteger('Fensterdaten', 'Links', 0); //Position von Links auf 0
      ini.WriteInteger('Fensterdaten', 'Oben', 0); //Position von Oben auf 0
      ini.WriteInteger('Fensterdaten', 'Breite', 0); //Breite auf 0
      ini.WriteInteger('Fensterdaten', 'Hoehe', 0); //Hoehe auf 0
      s := 'COM1'; //ComPort Port
      t := '19200'; //ComPort Baudrate
      r := '2'; //Format auf Müt
      Geoeffnete := False; //Zuletzt geöffnete Nein
      Gespeicherte := False; //Zuletzt gespeicherte Nein
      FensterPosSave := False; //Fensterposition Nein
    finally
      FreeAndNil(ini); //Datei Schliessen/Freigeben
    end;
  end
  else if FileExists('MC2004.ini') then
  begin
    ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini')); //Datei Öffnen
    try
      s := ini.ReadString('Einstellungen', 'Port', ''); //ComPort Port
      t := ini.ReadString('Einstellungen', 'Baud', ''); //ComPort Baudrate
      r := ini.ReadString('Einstellungen', 'Format', ''); //Format; Std., Erw., Müt
      Geoeffnete := ini.ReadBool('Einstellungen', 'Geoeffnete', False); //Zuletzt geöffnete
      Gespeicherte := ini.ReadBool('Einstellungen', 'Gespeicherte', False); //Zuletzt gespeicherte
      i := ini.ReadString('Programme', 'Monitor', ''); //Pfad des Datenmonitor's auslesen
      n := ini.ReadString('Programme', 'SAM', ''); //Pfad des Signal-Anzeige-Modul's auslesen
      g := ini.ReadString('Programme', 'MC2004W', ''); //Pfad des MC2004W
      FensterPosSave := ini.ReadBool('Fensterdaten', 'Fensterposition', False); //Fensterposition
      if FensterPosSave = True then
      begin
        MainFormMC2004.Left := ini.ReadInteger('Fensterdaten', 'Links', 0);
        MainFormMC2004.Top := ini.ReadInteger('Fensterdaten', 'Oben', 0);
        MainFormMC2004.Width := ini.ReadInteger('Fensterdaten', 'Breite', 0);
        MainFormMC2004.Height := ini.ReadInteger('Fensterdaten', 'Hoehe', 0);
      end
      else if FensterPosSave = False then
      begin
        Position := poScreenCenter;
      end;
    finally
      FreeAndNil(ini); //Datei Schliessen/Freigeben
    end;
  end;
// ComPort.Port := s; //ComPort Port setzen
// ComPort.CustomBaudRate := StrToInt(t); //ComPort Baudrate setzen
// ComPort.Open; //ComPort Öffnen
  SetStandard; //Standardwerte setzen
// ZentralenStatus;
  Check;
end;
Delphi-Quellcode:
procedure TMainFormMC2004.FormClose(Sender: TObject;
  var Action: TCloseAction);
//Funktionen, Befehle, die beim Beenden des Programmes ausgeführt werden
var
  ini: TIniFile;
begin
  if not IsAllClear then
  begin
    if Application.MessageBox('Wollen Sie die vorhandenen Daten Speichern?',
      'Speichern?', MB_YESNO) = mrYes then
    begin
      SpeichernClick(Sender);
    end;
  end;
  ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini')); //Datei Öffnen
  try
    ini.WriteBool('Einstellungen', 'Geoeffnete', Geoeffnete);
    ini.WriteBool('Einstellungen', 'Gespeicherte', Gespeicherte);
    ini.WriteBool('Fensterdaten', 'Fensterposition', FensterPosSave);
    if FensterPosSave = True then
    begin
      ini.WriteInteger('Fensterdaten', 'Links', MainFormMC2004.Left);
      ini.WriteInteger('Fensterdaten', 'Oben', MainFormMC2004.Top);
      ini.WriteInteger('Fensterdaten', 'Breite', MainFormMC2004.Width);
      ini.WriteInteger('Fensterdaten', 'Hoehe', MainFormMC2004.Height);
    end
    else if FensterPosSave = False then
    begin
      ini.WriteInteger('Fensterdaten', 'Links', 0);
      ini.WriteInteger('Fensterdaten', 'Oben', 0);
      ini.WriteInteger('Fensterdaten', 'Breite', 641);
      ini.WriteInteger('Fensterdaten', 'Hoehe', 375);
    end;
  finally
    FreeAndNil(ini);
  end;
// ComPort.WriteStr(#113#0);
// ComPort.Close; //ComPort Schliessen
end;
Und die Einstellungen:
Delphi-Quellcode:
procedure TEinstellungen.FormShow(Sender: TObject);
//ComPorts ermitteln und in ComboBox Anzeigen
var
  reg: TRegistry;
  sl: TStrings;
  i: integer;
  ini: TIniFile;
  s: string;
begin
  ShowMessage('Bei Änderungen, kann gleich mit den neuen Werten weiter gearbeitet'
    + #13 + 'werden. Das Programm muss nicht neu gestartet werden!');
  reg := TRegistry.Create;
  reg.RootKey := HKEY_LOCAL_MACHINE;
  reg.OpenKey('hardware\devicemap\serialcomm', False);
  sl := TStringList.Create;
  reg.GetValueNames(sl);
  ComboBoxPort.Items.Clear;
  for i:=0 to sl.Count -1 do
    begin
      ComboBoxPort.Items.Add(reg.ReadString(sl.Strings[i]));
    end;
  sl.Free;
  reg.CloseKey;
  reg.free;

  ComboBoxPort.ItemIndex := StrToInt(
    AnsiLastChar(MainFormMC2004.ComPort.Port)) -1;
    
  ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
  try
    s := ini.ReadString('Einstellungen', 'Baud', '');
    FensterPosSave := ini.ReadBool('Einstellungen', 'Fensterposition', False);
    Geoeffnete := ini.ReadBool('Einstellungen', 'Geoeffnete', False);
    Gespeicherte := ini.ReadBool('Einstellungen', 'Gespeicherte', False);
  finally
    ini.Free;
  end;
  if Geoeffnete = True then
  begin
    CheckBox1.Checked := True;
  end
  else if Geoeffnete = False then
  begin
    CheckBox1.Checked := False;
  end;
  if Gespeicherte = True then
  begin
    CheckBox2.Checked := True;
  end
  else if Gespeicherte = False then
  begin
    CheckBox2.Checked := False;
  end;
  if FensterPosSave = True then
  begin
    CheckBox3.Checked := True;
  end
  else if FensterPosSave = False then
  begin
    CheckBox3.Checked := False;
  end;
  if s = '2400then
  begin
    ComboBoxBaud.ItemIndex := 0;
  end
  else if s = '4800then
  begin
    ComboBoxBaud.ItemIndex := 1;
  end
  else if s = '9600then
  begin
    ComboBoxBaud.ItemIndex := 2;
  end
  else if s = '14400then
  begin
    ComboBoxBaud.ItemIndex := 3;
  end
  else if s = '19200then
  begin
    ComboBoxBaud.ItemIndex := 4;
  end
  else if s = '28800then
  begin
    ComboBoxBaud.ItemIndex := 5;
  end
  else if s = '38400then
  begin
    ComboBoxBaud.ItemIndex := 6;
  end;
end;
Delphi-Quellcode:
procedure TEinstellungen.FormClose(Sender: TObject;
  var Action: TCloseAction);
var
  s, t, r: string;
  ini: TIniFile;
begin
  ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini')); //Datei Öffnen
  try
    ini.WriteBool('Fensterdaten', 'Fensterposition', Main.FensterPosSave); //Neuen Wert Schreiben
    ini.WriteBool('Einstellungen', 'Geoeffnete', Geoeffnete);
    ini.WriteBool('Einstellungen', 'Gespeicherte', Gespeicherte);
  finally //Neue Werte Einlesen
    s := ini.ReadString('Einstellungen', 'Port', ''); //ComPort Port
    t := ini.ReadString('Einstellungen', 'Baud', ''); //ComPort Baudrate
    r := ini.ReadString('Einstellungen', 'Format', ''); //ComPort Format
    FreeAndNil(ini); //Datei Schliessen/Freigeben
  end;
end;
Und die Ini:
Code:
[Einstellungen]
Port=COM1
Baud=19200
Format=2
Geoeffnete=1
Gespeicherte=1

[Programme]
Monitor=
SAM=
MC2004W=

[Fensterdaten]
Fensterposition=0
Links=0
Oben=0
Breite=0
Hoehe=0
Ich sagte ja, ein bisschen Code.

Das schlimmste, beim ersten Start, da wird auch die .ini angelegt und bei Fensterposition steht die 0!
Bei Start erhalte ich aber die Fehlermeldung: "Cannot change in OnShow or OnPaint".
Aha, gut zu wissen.
Das nächste ist, wenn ich in den Einstellungen die CheckBox setze, wird beim Schliessen die 1 geschrieben.
Beim starten ist auch ncoh die 1 drin, auch noch wenn ich das Einstellungenfenster öffne, das Problem ist, wenn die 1 in der ini ist, dann sollte die CheckBox geChecked sein, ist sie aber nicht!

Irgend welche Ideen?
Vielen Dank.

Grüsse, Daniel
  Mit Zitat antworten Zitat
 


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 07:03 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 by Thomas Breitkreuz