|
Daniel B
(Gast)
n/a Beiträge |
#1
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:
Also Global!
var
MainFormMC2004: TMainFormMC2004; mHandle: THandle; MC2004: TMC2004; Pfad: String; FensterPosSave: Boolean; Geoeffnete: Boolean; Gespeicherte: Boolean;
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:
Und die Einstellungen:
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;
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 = '2400' then begin ComboBoxBaud.ItemIndex := 0; end else if s = '4800' then begin ComboBoxBaud.ItemIndex := 1; end else if s = '9600' then begin ComboBoxBaud.ItemIndex := 2; end else if s = '14400' then begin ComboBoxBaud.ItemIndex := 3; end else if s = '19200' then begin ComboBoxBaud.ItemIndex := 4; end else if s = '28800' then begin ComboBoxBaud.ItemIndex := 5; end else if s = '38400' then begin ComboBoxBaud.ItemIndex := 6; end; end;
Delphi-Quellcode:
Und die Ini:
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;
Code:
Ich sagte ja, ein bisschen 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 ![]() 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 ![]() |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |