| Autor |
Beitrag |
V!P3R
      
Beiträge: 151
|
Verfasst: Sa 14.06.08 11:46
Hallo.
Ich habe ein Programm, in dem man viel ändern kann. also z.b datum, uhrzeit, positionen von 20 verschieden Memos usw.
die einzige art, wie ich es schaffe an die informationen ranzukommen, die ich beim letzen nutzen des programms verändert habe, ist die Funktion:
Delphi-Quelltext 1:
| Memo1.Lines.SaveToFile('Beispiel.txt'); |
Ich suche jetzt aber eine bessere möglichkeit wirklich ALLE Änderungen in meinem Projekt zu speichern, und beim nächsten starten des Programms wieder aufzurufen.
Habt ihr eine gute Idee?
Vielen Dank im Voraus
MfG Moderiert von Tino: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 17.07.2008 um 10:13
Zuletzt bearbeitet von V!P3R am So 13.07.08 13:06, insgesamt 1-mal bearbeitet
|
|
GericasS
      
Beiträge: 540
Windows Vista Home Premium
D2010, VisualStudio2008
|
Verfasst: Sa 14.06.08 11:58
Eine gute Möglichkeit wäre da ein Ini-File anzulegen und da die Informationen reinzuspeichern =)
LG
GericasS
_________________ Alexander N.
Neue Bewaffnung Amilo xi2428 T9300
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Sa 14.06.08 12:35
Wofür musst du das denn genau haben? "Alles speichern" ist sehr allgemein. Du solltest die Daten schon selektiv in einem sinnvollen Format speichern. Und wenn du nur die Änderungen speichern willst muss das Programm rausfinden können, was sich verändert hat, wozu es u.U. notwendig ist, die Werte vor der Änderung zu kennen.
Du kannst eine Komponente und alle darunterliegenden Komponenten mit TStream.WriteComponent/ReadComponent serialisieren/deserialisieren. Wenn das aber nicht ein rein privates Projekt ist, ist das aber logischerweise die falsche Lösung.
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: Sa 14.06.08 12:44
Ich nenne mal ein paar beispiele:
Ich habe ein TabbedNotebook mit 5 verschiedenen Tabs.
Im 1.Tab ist zum Beispiel : eine bestimmte Uhrzeit, die immermal geändert wird, ein datum was auch geändert wird usw. es wäre umständlich das ganzen mit meiner lösung anzugehen (s.o.)
Im 2.Tab habe ich z.B. 20 Memos, deren eigenschaften: Color, Text und Top, Left ich ändern kann
sprich 20 mal 4 möglichkeiten beläuft sich auf 80 verschiedenen informationen, was mit SaveToFile verdammt viel Arbeit wäre, da ich für jede änderung eine eigene *.txt datei erstellen müsste.
Ich suche eine möglichkeit wie ich alle änderungen (also Topwerte, Leftwere, Color, Texte, Daten usw.) in einer datei speichern kann, um sie beim nächsten start wieder aufrufen zu können.
MfG
--- Moderiert von Narses: Beiträge zusammengefasst---
Hi ich hab INI ausprobiert aber Delphi meldet fehler:
Delphi-Quelltext 1:
| [Fehler] Unit1.pas(4430): Undefinierter Bezeichner: 'TIniFile' |
Gibts ein Objekt das sah heißt? wenn ja, unter welchem reiter wäre das zu finden?
Edit1: Hab fehler gefunden, ich hab jetzt bei uses noch IniFiles hinzugefügt.
MfG
--- Moderiert von Narses: Beiträge zusammengefasst---
Okay
Ich möchte den Text aus Edit1 in der Ini speichern und anschließend wieder einlesen.
wie mache ich das? und ist der rest richtig?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); var Ini: TIniFile; begin Ini :=TIniFile.Create('C:\Versuch.INI'); Ini.WriteString('??', '??', '??'); Ini.Free; end; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button2Click(Sender: TObject); var Ini: TIniFile; begin Ini :=TIniFile.Create('C:\Versuch.INI'); Ini.ReadString('??', '??', '??'); Ini.Free; end; |
MfG
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Sa 14.06.08 14:06
Ja, der Text dürfte so richtig sein.
ini.writestring (und writeinteger, writebool etc) erwartet drei parameter, der erste ist der Sektionsmname in der ini Datei der zweite der Schlüssel (dient beides nur zur lokalisierung der Information) der dritte parameter ist der Text (integer...) der in der angegebenen sektion unter dem angegebenen schlüssel gespeichert werden soll.
readstring ist eine function. Die ersten parameter geben an welchen Teil der ini du ausliest (Sektion+Schlüssel) der dritte parameter ist der wert den die funktion dir liefert, wenn es die angegebene Sektion/Schlüssel nicht gibt. Richtig wäre der aufruf also ungefähr so
Delphi-Quelltext 1:
| edit1.text:=ini.readstring('Editfelder','1', 'Standardwert'); |
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Sa 14.06.08 14:16
Danach dürften keine Fragen mehr auftauchen.
www.kuknet.de/tutorial1.pdf
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 15.06.08 11:14
Vielen, vielen Dank euch allen, jetzt klappts wunderbar.
Außer ein Einzelfall:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.B_INI_WriteClick(Sender: TObject); begin Ini :=TIniFile.Create('C:\Versuch.INI'); Ini.WriteString('Sek2', 'CB_Anlass', CB_Anlass.Text); Ini.WriteString('Sek2', 'CB_Von', CB_Von.Text); Ini.WriteString('Sek2', 'CB_Und', CB_Und.Text); Ini.Free; end; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.B_INI_ReadClick(Sender: TObject); begin Ini :=TIniFile.Create('C:\Versuch.INI'); CB_Anlass.Text:=Ini.ReadString('Sek2', 'CB_Anlass', 'Normales Treffen'); CB_Von.Text:=Ini.ReadString('Sek2', 'CB_Von', 'Von'); CB_Und.Text:=Ini.ReadString('Sek2', 'CB_Und', 'Und'); Ini.Free; end; |
Randinformationen:
Alle 3 Strings sind TCombobox
CB_Von und CB_Und sind Visible=False beim Start
Wenn ich B_INI_WriteClick und anschließend B_INI_Read.Click mache ist CB_Von und CB_Und = 1 oder 0 warum? und wie kann ich das ändern?
PS: Die Visible Eigenschaft von beiden hab ich auch als WriteBool und ReadBool aufgeführt.
MfG
EDIT:
Achsoo jetzt hab ich meinen dämlichen fehler entdeckt
Wie gesagt habe ich: "Die Visible Eigenschaft von beiden hab ich auch als WriteBool und ReadBool aufgeführt." und denen hab ich die gleiche Sektion UND den gleichen Namen gegeben.
Okay, dann ist meine frage komplett beantwortet.
Vielen Dank
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 15.06.08 16:37
Hallo, eine Frage hab ich dann doch noch:
Ich will aus einem TFontDialog die Eigenschaften in eine INI schreiben
soweit so gut, aber wie komm ich an den Font Style ran?
Delphi-Quelltext 1: 2: 3:
| Ini.WriteBool('Sek5', 'FD.S', FontDialog1.Font.Style); [Fehler] Unit1.pas(4787): Inkompatible Typen: 'Boolean' und 'TFontStyles' |
Delphi-Quelltext 1: 2: 3:
| Ini.WriteBool('Sek5', 'FD.S', FontDialog1.Font.Style [fsBold,fsItalic,fsUnderline,fsStrikeOut]); [Fehler] Unit1.pas(4787): Array-Typ erforderlich |
Delphi-Quelltext 1: 2: 3:
| Ini.WriteBool('Sek5', 'FD.S', FontDialog1.Font.Style []); [Fehler] Unit1.pas(4787): Ausdruck erwartet, aber ']' gefunden |
Wie geht das denn?
MfG
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 15.06.08 16:45
Hallo,
hier musst du die einzelnen Style-Eigenschaften separat speichern. Also so:
Delphi-Quelltext 1: 2: 3: 4:
| Ini.WriteBool('Sek5', 'FD.S.Bold', fsBold in FontDialog1.Font.Style); Ini.WriteBool('Sek5', 'FD.S.Italic', fsItalic in FontDialog1.Font.Style); Ini.WriteBool('Sek5', 'FD.S.Underline', fsUnderline in FontDialog1.Font.Style); Ini.WriteBool('Sek5', 'FD.S.Strikeout', fsStrikeout in FontDialog1.Font.Style); |
Grüße,
Yogu
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 15.06.08 17:10
Vielen Dank
Und wie muss es dann beim einlesen heißen??
Ich hab probiert:
Delphi-Quelltext 1: 2: 3:
| fsBold in FontDialog1.Font.Style:=Ini.ReadBool('Sek5', 'FD.S.Bold', False); [Fehler] Unit1.pas(5127): Inkompatible Typen: 'TFontStyles' und 'Boolean' |
MfG
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 15.06.08 17:20
Hallo,
Delphi-Quelltext 1: 2: 3:
| if Ini.ReadBool('Sek5', 'FD.S.Bold', False) then FontDialog1.Font.Style := FontDialog1.Font.Style + [fsBold]; |
Vielleicht geht es auch eleganter, aber mir fällt keine bessere Möglichkeit ein.
Grüße,
Yogu
|
|
Andymann
Hält's aus hier
Beiträge: 1
Win 2000, Win XP, Win Vista, Suse 10
Delphi 2007 Prof., VS 2008 Standard, #Develop, Lazarus
|
Verfasst: So 15.06.08 18:14
Hallo,
eine weitere Alternative wäre:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| Ini.WriteString('Font', 'Style', GetPropValue(FontDialog1.Font, 'Style'));
SetPropValue(FontDialog1.Font, 'Style', Ini.ReadString('Font', 'Style', '')); |
Gruß Andy
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 15.06.08 18:37
Danke an euch beide,
Ich habe jetzt aber die möglichkeit von Yogu genommen
MfG
PS: Alle Fragen geklärt!
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 13.07.08 13:05
Hallo, ich hab jetzt mal ne ganz neue Frage: (Die trotztdem eng mit dem rest zusammen hängt)
Ich habe ein RichEdit mit VERSCHIEDENEN FontStyles, FontFarben und FOntgrößen und alles im selben RichEdit
(Ich habe vorher mit "SelAttributes" gearbeitet, wenn ich das einfach normal in die INI reinschreibe, und am schluss wieder einlese, ist der Style, die Farbe und die Größe von allen Gleich.
Wie kann ich das in eine INI schreiben, (bzw. aus einer INI lesen) ohne das sich die werte ändern bzw. alle gleichwerden?
kann ich das auch irgentwie mit "SelAttributes" managen?
MfG
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 13.07.08 13:10
Du könntest einfach den Inhalt des RichEdits speichern. Dann werden neben dem eigentlichen Text auch die entsprechenden Formatierungs-Einstellungen mitgespeichert.
Eine andere Möglichkeit wäre, die Bereiche, die unterschiedliche Formatierungen haben, abzuklappern und diese Informationen über SelAttributes zu speichern. Ich kenne mich aber damit nicht aus, benutzt habe ich es noch nie.
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 13.07.08 13:22
ja, aber ich hab alle eigenschaften von dem richedit in die INI geschrieben,
-Font.Style
-Font.Color
-Font.Charset
-Font.Name
-Font.Height
-Font.Pitch
-Font.Size
-RichEdit.Text
trotzdem funktioniert es nicht.
MfG
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: So 13.07.08 13:56
warum speicherst du nicht das richedit im RichTextFormat? vielleicht mittels Stream oder so. und dann einfach als string in die INI anhängen. Damit bleibt die Formatierung.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 13.07.08 14:12
RichTextFormat? wie speicher ich das)
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: So 13.07.08 14:15
Richedit1.Lines.SaveToStream(MyStream); -> Wenn du es in einen Stream speichern möchtest.
Richedit1.Lines.SaveToFile(MyPathToFile); -> Wenn du es in ein File speichern willst.
ACHTUNG!!! RICHEDIT1.PLAINTEXT MUSS FALSE SEIN!!!!
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 13.07.08 14:23
achso, ja die ide mit "SaveToFile" hatte ich auch schon, aber wie schreibe ich das in die INI wie du das gesagt hast?
|
|
|