| |

Allgemeine DiskussionenSo, hier mal mein Ansatz zu dem Problem!  | |  | Autor: unbekannt | Datum: 15.08.01 11:56 |
| Hi Hotte, Hi Ronny
Das Problem von Hotte erscheint in einem flüchtigen Augenblick als etwas wie: "Warum braucht man das?". Hotte will das Erscheinungsbild in einer Form, in der sieben Kontrollboxen je für einen Tag stehen, in einem Feld haben, das symbolisieren soll, welche Kontrollboxen checked sind und welche nicht.
Ein einer Feldvariablen oder UDT wäre der Zustand der Kontrollboxen ja leicht nachvollziehbar - aber, wie sieht es aus, wenn dieser Zustand ja gespeichert werden soll? Wie sieht das aus, wenn man eine Anwendung hat und man beim Anruf der Anwendung den Zustand der Kontrollboxen wieder herstellen möchte?
Das ist der Ansatz von Hotte, und ich meine mit der Ansatzlösung, jeder Kontrollbox einen Wert zuzuweisen, bereits schon genial angedacht.
Betrachten wir mal das Szenario genauer:
Sieben Kontrollboxen, jede Kontrollbox erhält einen Wert:
Sonntag = 1
Montag = 2
Dienstag = 4
Mittwoch = 8
Donnerstag = 16
Freitag = 32
Samstag = 64
Daraus läßt sich ein einziger String formeln, ein Binärcode. Ist z.B. Sonntag, Mittwoch und Freitag checked, ergibt sich der folgende String:
"0101001" Dieser Binärcode definiert allerdings eine Dezimalzahl, die sich aus der Summe der Werte, der einer Kontrollbox zugewiesen ist, ergibt. In dem Beispiel hätte eine einzige Variable den Wert: 1 + 8 + 32 = 41.
In einer Datenbank oder in der Registry würde ich den Zustand der sieben Kontrollboxen somit abspeichern: 41 Eine Variable vom Typ Byte - kürzer geht es nicht mehr!
Jetzt wird der Wert wieder geladen und der Zustand der Kontrollboxen soll wieder hergestellt werden, hier kommt nun die folgende Funktion zur Wirkung (eine Abwandlung der Byte2BinHex - Funktion aus unseren Tipps & Tricks):
'Funktion Dez2Bin(Wert)
'Gibt aus einer Dezimalzahl einen binären Code als String zurück
'
Private Function Dec2Bin (Byval nDec As Integer) As String
Dim i As Byte
Dim n As Integer
Dim BinString As String
n = nDec
For i = 7 To 0 Step -1
If (n - 2 ^ i) >= 0 Then
BinString = BinString + "1"
n = n - 2 ^ i
b = True
ElseIf b Then
BinString = BinString + "0"
End If
Next
'Führende Nullen anfügen:
If Len(BinString) < 7 Then
BinString = Binstring & String(7 - Len(Binstring),"0")
End If
Dec2Bin = BinString
End Function Jetzt brauche ich nur noch diesen String auszuwerten, um den Zustand der Kontrollboxen zu restaurieren:
Private Function IsChecked (Byval sBinString As String, Byval nNr) _
As Boolean
If sBinString = "" Then Exit Function
If nNr < 1 Or nNr > Len(sBinString) Then Exit Function
IsChecked = False
If Mid(sBinString, nNR,1)="1" then IsChecked = True
End Function Aus meiner gespeicherten Zahl erhalte ich mit dieser Funktion also zurück: "0101001"
Natürlich waren wir so clever, und haben unsere Kontrollböxchen in der Entwicklungszeit als Steuerelementfeld angelegt:
Private Sub Form_Load()
'Den gespeicherten Wert aus dem Speichermedium zurückholen
Dim i As Byte
Dim Binstr As String
i = "gespeicherter Wert
BinStr = Dec2Bin(i)
For i = 0 To CheckBox1.Count - 1
Checkbox1(i).Value = IsChecked(BinStr, CheckBox1.Count-i)
Next
End Sub Voila! In der Kürze liegt die Würze.
Zusammenfassung:
Private Sub Form_Load()
'Den gespeicherten Wert aus dem Speichermedium zurückholen
Dim i As Byte
Dim Binstr As String
i = "gespeicherter Wert
BinStr = Dec2Bin(i)
For i = 0 To CheckBox1.Count - 1
Checkbox1(i).Value = IsChecked(BinStr,Checkbox1.Count-i)
Next
End Sub
Private Function IsChecked (Byval sBinString As String, Byval nNr) _
As Boolean
If sBinString = "" Then Exit Function
If nNr < 1 Or nNr > Len(sBinString) Then Exit Function
IsChecked = False
If Mid(sBinString, nNR,1)="1" then IsChecked = True
End Function
Private Function Dec2Bin (Byval nDec As Integer) As String
Dim i As Byte
Dim n As Integer
Dim BinString As String
n = nDec
For i = 7 To 0 Step -1
If (n - 2 ^ i) >= 0 Then
BinString = BinString + "1"
n = n - 2 ^ i
b = True
ElseIf b Then
BinString = BinString + "0"
End If
Next
'Führende Nullen anfügen:
If Len(BinString) < 7 Then
BinString = Binstring & String(7 - Len(Binstring),"0")
End If
Dec2Bin = BinString
End Function cu
Lordchen |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Neu! sevCoolbar 3.0 
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|