Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TPanel im File abspeichern (https://www.delphipraxis.net/153218-tpanel-im-file-abspeichern.html)

Glühwürmchen 25. Jul 2010 15:36

Delphi-Version: 2010

TPanel im File abspeichern
 
Hallo,

ich programmiere ein Tool, das mich beim lösen eines Logikrätsels unterstützt.

Kurz zur Definition von Logikrätsel:
Ein Bild, das in einer Matrix (vergleichbbar mit KO-System oder einer Tabelle) abgebildet wird (werden soll). Am linken und oberen Rand der Matrix stehen HinweisZahlen, die Auskunft geben, wie viele Felder der Matrix in der Zeile oder Spalte des Hinweises schwarz gefärbt werden müssen.
...

Mein Programm bietet also ein Formular, das jedes einzelne Feld der Matrix als TPanel darstellt. Klicke ich auf ein Panel, ändert es die Farbe.

Da die Lösung eines Logikrätsels viele Stunden in Anspruch nehmen kann, soll die Matrix abgespeichert werden können.
Mir schwebt vor, die Objekte vom Typ TPanel gleich komplett abzuspeichern, da mir das die Arbeit erspart, sie nach dem Laden erst wieder richtig bemalen und positionieren zu müssen (das Panel weiß ja, ich welchem Zustand es sich befindet).

Meine Idee war es, alle Panels der Matrix in eine Stringliste zu packen und diese mit sl.SaveToFile(...) abzuspeichern.
Funzt aber nicht, weil nur die Strings der Stringliste gespeichert werden und nicht die angehängten Objekte!

Was kann ich tun?

Matze 25. Jul 2010 15:39

AW: TPanel im File abspeichern
 
Ich würde das Design von der Logik trennen. Sprich, du hast deine Daten, die du abspeicherst und eine Routine, die aus diesen Daten die Panels platziert/färbt.

Dann bist du nicht auf die Panels angewiesen und könntest später problemlos deine GUI z.B. mit TCanvas lösen (nur als Beispiel).
Dazu musst du dann nur die Routine anpassen, die die Daten verarbeitet.

Glühwürmchen 25. Jul 2010 19:47

AW: TPanel im File abspeichern
 
Hi Matze,

aus Deiner Antwort schließe ich, dass es keine direkte Möglichkeit von Delphi gibt, ein Objekt abzuspeichern, richtig?

In dem Fall werde ich beides selbstverständlich trennen.
Ich dachte halt nur, ich könnte hier zwei Fliegen mit einer Klappe schlagen...

~~~~~~~~~~~~

Danke, für Deine schnelle Antwort.

Gruß
Glüh

mkinzler 25. Jul 2010 19:48

AW: TPanel im File abspeichern
 
Gibt es schon, man sollte aber Design, Logik und Daten trennen

Glühwürmchen 25. Jul 2010 22:08

AW: TPanel im File abspeichern
 
Zitat:

Zitat von mkinzler (Beitrag 1037494)
Gibt es schon, man sollte aber Design, Logik und Daten trennen

Werte Kollegen,

es ist nett, dass Ihr mir klar machen wollt, wie ein sauberer Programmierstil aussieht, aber Ihr verschwendet meine und Eure Zeit.
Ich bin seit 2001 als Programmierer tätig und weiß grundsätzlich um diese Dinge.

Ich fände es nett, wenn Ihr mir eine Antwort auf meine Frage geben würdet, statt mich zu belehren, wie ich programmieren sollte.

Bitte schließt aus meiner vereinfachten Problemdarstellung nicht, dass ich einen Spaghetticode geschrieben habe, der völlig ohne Sinn und Struktur ist.
Ich versuchte lediglich das Ziel das ich erreichen will, mit einfachen Worten darzustellen.

blackfin 25. Jul 2010 22:24

AW: TPanel im File abspeichern
 
Soweit ich verstehe, willst du die Eigenschaften des TPanels in eine Datei speichern.
"Out of the box" geht das bei Delphi nur mit published Eigenschaften (also die aus dem Objekt Inspektor)
Wenn das reicht, kannst du das so machen:

Delphi-Quellcode:
var
 FStream: TStream;
...
..
.
FStream := TFileStream.Create(AppPath+'Panel1.raw',fmCreate);
FStream.WriteComponent(Panel1) ;
FreeAndNil(FStream) ;
Auslesen kannst du das dann wieder mit FStream.ReadComponent();

P.S.:
Fühl dich doch bitte nicht gleich angegriffen. Der Tipp der Logiktrennung ist sicher nicht böse gemeint gewesen. :love::love:

Glühwürmchen 26. Jul 2010 07:59

AW: TPanel im File abspeichern
 
Zitat:

Zitat von blackfin (Beitrag 1037525)
P.S.:
Fühl dich doch bitte nicht gleich angegriffen. Der Tipp der Logiktrennung ist sicher nicht böse gemeint gewesen. :love::love:

Ja, ist eine Schwäche von mir.
Bitte entschuldigt meine Worte.

Danke für den Tip, ich werde es ausprobieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr.

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