 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Xolios aka Ray

Anmeldungsdatum: 07.12.2004 Beiträge: 589 Wohnort: Wildeshausen
|
Verfasst am: 11.01.2005, 15:50 Titel: unschöne Art der Speicherung von Einstellungen |
|
|
Hallo!
Ich nehme hier jetzt nicht mein Prog rein da das sonst zu viel wird.
Also nehmen wir mal an das ich in mein Prog die
Aktuelle Schrift und Hintergrundfarbe speichern möchte und beim start wieder aufrufen will.
z.B. folgendermaßen
'bc%=backcolor
'fc%=forecolor
OPEN "c:\color.txt" for input as #1
input #1, bc%,fc%
close #1
color fc%,bc%
Beim beenden soll er halt die eventuell geänderte Farbe
wieder speichern also so z.B.:
OPEN "c:\color.txt" for output as #1
write #1, bc%,fc%
close #1
Schön und einfach verständlicher Code
nur ich habe den Verdacht das es noch einfachere möglichkeiten
gibt.
Kennt ihr welche?
Besten Dank im Voraus!
Ray _________________ www.ray-earth.de
Anm.: Neue ICQ |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 11.01.2005, 16:09 Titel: |
|
|
Schau mal in der Hilfe unter BSAVE, das speichert den gesamten Bildschirm, mit Hintergrundinformationen. _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 11.01.2005, 16:15 Titel: |
|
|
Hallo.
@Gremlin: BSAVE bringt ihm hier nicht sonderlich viel. Er will doch nur Informationen speichern.
@Ray: Die Art der Informationsspeicherung, wie du sie da machst, ist schon OK, wenn es bei diesen beiden Einstellungen bleibt.
Aber! Du solltest unbedingt immer relative Pfade für sowas verwenden! Also nur "COLOR.TXT" statt einen Pfad anzugeben. Den Pfad festzulegen ist aus verschiedenen Gründen schlecht.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 11.01.2005, 21:59 Titel: |
|
|
Hi leute!
Zu den Farben:
Tja, recht viel gibt's da wohl ned zu verbessern, weil doch nur 2 Byte geschrieben werden!
Aber:
Einen Kleinen Tipp hab ich für dich, zumindest, wenn du dich auf jeweils 16 Farben beschränken kannst/musst (was etwa in SCREEN 0,7,8,9,12 u. anderen der Fall ist).
Hier kannst du aus zwei Bytes eines machen.
Das geht nach der Formel:
Code: |
farbe% = vorder% + hinter% * 16
|
Acuh wichtig: Speichere farbe% nicht als String!
(Wenn farbe% z.B. 92 ware, dann schreibe in deine Datei nicht "92", sondern "\", was der ASCII-Code von 92 ist.)
Das kannst du auf zwei Weisen erreichen:
1. Mit OPEN FOR OUTPUT:
Code: |
OPEN "COLOR.TXT" FOR OUTPUT AS #1
PRINT #1, CHR$(farbe%)
...
CLOSE
|
2. Mit OPEN FOR BINARY
Hier öffnest du einfach die Datei wie schon gesagt im binär-Modus, und schreibst anstatt PRINT #1:
PUT #1, ,farbe%
Das hatt den selben Effekt.
Ob du nun lieber im Binär-Modus arbeitest, oder im sequentiellen, musst du selbst entscheiden.
Das ganze ist jetzt eine schöne Methode zum Speichern, aber man muss es ja auch wieder laden können:
Dazu lädst du wieder farbe% (mit GET oder INPUT)
und wandelst den Wert dann in eine HEX-Zahl um:
farbe$ = HEX$(farbe%)
Das erste Zeichen steht dann für die Hintergrundfarbe, das zweite für die Vordergrundfarbe.
also:
hinter% = VAL("&H" + LEFT$(farbe$, 1))
vorder% = VAL("&H" + RIGHT$(farbe$, 1))
Das sind recht einfache Techniken, und auch wenn es hier nach viel aussieht - der Quellcode wächst nicht besonders stark an.
Anmerkung:
Die zuallererst genannte Formel funktioniert leider nur wenn sowohl für Vorder- als Auch Hintergrundfarbe 16 Atribute oder weniger zur Verfügung stehen.
Wenn etwa, wie bei SCREEN 0 der Vordergrund 32 Farben haben kann, der Hintergrund dafür auch, muss man das etwas abwandeln:
farbe% = vorder% + hinter% * 32
Natürlich wirft das wieder die ganze Lade-Routine durcheinander, aber auch hier gibt es Möglichkeiten.
Wenn auch die dich interessieren, dann schreib einfach, ich werde dann noch mal eine komplette SUB entwickeln...
Aber ich denke, das dürfte schon mal eine kleine Anregung sein, wie man ausgabe von zwei werten optimieren kann.
(Generell: Diese Methode funktioniert, wenn beide Werte miteinander multipliziert nicht größer als 256 sind.) |
|
Nach oben |
|
 |
Xolios aka Ray

Anmeldungsdatum: 07.12.2004 Beiträge: 589 Wohnort: Wildeshausen
|
Verfasst am: 13.01.2005, 20:28 Titel: ... |
|
|
Moin!
Erst mal ein dankeschön für die antworten!
@Sebastian
Was für Vorteile denn z.B.?
Wenn man nur "color.txt" angiebt und das prog später
in ein anderes Verzeichnis verschiebt wird das prog wenn keine
Fehlerbehandlung dabei ist beendet.
Mit "c:\color.txt" is das nicht so. Der Benutzer (wenn je Vorhanden) wird sich freuen da seine Farben und andere einstellunggen
immer egal im welchem Verzeichnis verfügbar sind.
Ich muss mal sehen vielleicht setze ich eine vordemo von meinem prog ins netz.
Gruß
Ray _________________ www.ray-earth.de
Anm.: Neue ICQ |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 13.01.2005, 20:57 Titel: |
|
|
Hallo.
Auch wenn man vom DAU ausgehen sollte, ich denke, dass ein halbwegs intelligentr User so schlau ist, den ganzen Ordner, und nicht nur eine EXE, zu verschieben, so ergibt sich das Problem nicht. _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
Xolios aka Ray

Anmeldungsdatum: 07.12.2004 Beiträge: 589 Wohnort: Wildeshausen
|
Verfasst am: 13.01.2005, 21:04 Titel: ... |
|
|
Moin!
Soll ja Benutzerfreundlich sein
Also auch für DAU's
oder ausgeschrieben für Dümmste anzunehmende User
Gruß
Ray _________________ www.ray-earth.de
Anm.: Neue ICQ |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 23.01.2005, 20:09 Titel: |
|
|
Also, ich versuch das dann immer so zu lösen, dass eine DEFAULT-Datei erstellt wird, wenn keine Datei gefunden wurde.
Etwa so:
Code: |
SUB LoadSets
OPEN "SETTINGS.DAT" FOR BINARY AS #1
IF LOF(1) THEN
GET #1, var
'....
'Lese Daten ein
ELSE
var = 1
PUT #1, var
'variablen "per hand" festlegen und in Datei schreiben.
END IF
END SUB
|
Macht natürlich ned immer sinn, aber für solche SETTING.DAT's dürfts wohl doch ne gute möglichkeit sein, oder? _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
stef
Anmeldungsdatum: 13.01.2005 Beiträge: 102
|
Verfasst am: 23.01.2005, 23:29 Titel: |
|
|
Es ist doch viel schöner, wenn alle Dateien zu einem Programm im selben Ordner sich befinden. Mir würde ein Programm, daß direck auf die c-Platte schreibt nicht gefallen.
Wenn natürlich jemand das Programm verschiebt, aber die dazugehörige Datei nicht, dann muß hat mit Grundeinstellungen gearbeitet werden, wie Dusky_Joe es schon erwähnt hat.
Es wäre warscheinlich besser mit einem Type-Element zu arbeiten um die Informationen zu speichern:
Code: | TYPE ProgInfoType
backcolor AS INTEGER
forecolor AS INTEGER
END TYPE
DIM ProgInfo AS ProgInfoType
OPEN "color.txt" for BINARY AS #1
IF LOF(1) THEN 'Bildschirmfarben aus Datei holen
GET #1, , ProgInfo
ELSE 'Default Bildschirmfarben verwenden
ProgInfo.backcolor =1
ProgInfo.forecolor = 15
ENDIF
CLOSE #1
COLOR ProgInfo.forecolor, ProgInfo.backcolor
.
.
.
'Farbeinstellungen in Datei speichern
OPEN "c:\color.txt" for BINARY AS #1
PUT #1, , ProgInfo
close #1
END |
|
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 24.01.2005, 00:01 Titel: |
|
|
Absolute Pfade sollte man immer unterlassen, denn ein Vorhandensein eines bestimmten Laufwerks darf man niemals voraussetzen. Zusätzlich seit NT 4.0/2000/XP darf man auch keine vorhandene Schreibberechtigung in beispielsweise C:\ voraussetzen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 24.01.2005, 18:03 Titel: |
|
|
Ja, stimmt, MS hats ja inzwischen tatsächlich geschafft, ordner so zu blockieren, dass man praktisch keine Möglichkeit hat, auch nur den Ordnerinhalt durchzusehen, wenn man nicht im richtigen Konto angemeldet is... aber gilt das auch für ASSEMBLER?
Ich bin in der Sprache relativ neu, aber da gabs doch im INT 21h ein paar Funktionen zur Dateibearbeitung... aber die hat ms wohl auch geändert, auf denen basieren ja die ganzen Datei-Befehle, oder? _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 24.01.2005, 18:17 Titel: |
|
|
Unter UNIX/Linux war es schon immer so, dass Systembereiche gegenüber normalen Arbeitsbenutzern keinerlei Schreibberechtigungen besitzen. Sonst könnte mir ja schliesslich jeder Webhostingkunde den Webserver auf den Kopf stellen... ;-)
Speziell im Zusammenhang mit der Viren/Würmer-Problematik lohnt sich der Versicht auf lokale Administratorenrechte zum Arbeiten in jedem Fall, da dort ein per bösartiger Webseite gestartetes Script nicht mehr am C:\WINDOWS herumfummeln kann.
Für Assembler gilt dies genauso, da Windows NT 4.0/2000/XP wie in der UNIX/Linux-Welt schon lange üblich auch mit Speicherschutz und Unterscheidung Supervisor/Usermode der CPU arbeiten, d.h. jeder Benutzerprozess arbeitet dort wie in einem Käfig, wo nur der Kernel vollen Speicherzugriff besitzt. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 24.01.2005, 18:25 Titel: |
|
|
der kernel.... ähm... das ist doch so was wie ein BATCH-Prog, oder?
Event A ist aufgetreten? Dann reagiere so: ....
Event B ist aufgetreten? Dann reagiere so: ....
...?
Oder hab ich da was falsch verstanden?
Aber in der Form dürfte das wohl kaum realisierbar sein, weil so eine Endlos lange Reihe von CMP-JE - Befehlen den Prozessor extrem ausbremsen müsste... oder?
Ich meine, das müsste dann ja nach jedem Systemtakt aufgerufen werden...
 _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|