Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

unschöne Art der Speicherung von Einstellungen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Xolios
aka Ray


Anmeldungsdatum: 07.12.2004
Beiträge: 589
Wohnort: Wildeshausen

BeitragVerfasst am: 11.01.2005, 15:50    Titel: unschöne Art der Speicherung von Einstellungen Antworten mit Zitat

Hallo!

Ich nehme hier jetzt nicht mein Prog rein da das sonst zu viel wird. peinlich

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 11.01.2005, 16:09    Titel: Antworten mit Zitat

Schau mal in der Hilfe unter BSAVE, das speichert den gesamten Bildschirm, mit Hintergrundinformationen.
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 11.01.2005, 16:15    Titel: Antworten mit Zitat

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. lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 11.01.2005, 21:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Xolios
aka Ray


Anmeldungsdatum: 07.12.2004
Beiträge: 589
Wohnort: Wildeshausen

BeitragVerfasst am: 13.01.2005, 20:28    Titel: ... Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 13.01.2005, 20:57    Titel: Antworten mit Zitat

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. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Xolios
aka Ray


Anmeldungsdatum: 07.12.2004
Beiträge: 589
Wohnort: Wildeshausen

BeitragVerfasst am: 13.01.2005, 21:04    Titel: ... Antworten mit Zitat

Moin!

Soll ja Benutzerfreundlich sein peinlich

Also auch für DAU's
oder ausgeschrieben für Dümmste anzunehmende User
lachen

Gruß
Ray
_________________
www.ray-earth.de
Anm.: Neue ICQ
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 23.01.2005, 20:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 23.01.2005, 23:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 24.01.2005, 00:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 24.01.2005, 18:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 24.01.2005, 18:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 24.01.2005, 18:25    Titel: Antworten mit Zitat

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...

durchgeknallt
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz