zeppelinflieger hat geschrieben:... Kannst Du nicht doch was code hier zeigen auch wenns nur in häppchen sind. ...
Was war das schwerste zu Programmieren?
Elrik hat geschrieben:Die Zeichentabelle für den abzuspeichernden Schlüssel, nehme ich an.
Man speichert einfach die Werte des Schlüssel's ab.
Speziell auf die Zeichentabelle muss man nicht achten. Oder ist etwas anderes gemeint?
Wie man das macht,, dafür gibt es natürlich verschiedene Methoden, ich habe es so gemacht:
Code: Alles auswählen
frei = FreeFile
Open a$ For Binary As #frei a$ = Der Pfad + Name der Datei ( Was man vorher ausgewählt hat! )
For x = 1 To 100
Put #frei, , Key(x)
Next
Close frei
Ich hätte es mir auch einfacher machen können, ohne For Next Schleife
Code: Alles auswählen
frei = FreeFile
Open a$ For Binary As #frei
Put #frei, , Key()
Close frei
Aber dann wird auch der NULL Wert von Key(0) mit abgespeichert! Das hätte ich dann wiederum beim Laden mit beachten müssen. Wenn ich so überlege, hätte ich aber diese Methode benutzen sollen(können).
zeppelinflieger hat geschrieben:Was war das schwerste zu Programmieren?
Schwer war da gar nichts, nur nervig. Das nervigste waren die ganzen "
Lade & Speicher Prozeduren"
Schlüssel speichern:
Code: Alles auswählen
Private Sub ss_Click()
Dim a$, x As Long, b$, c As Long
On Error GoTo Fehler
SSaver = SSaver + 1: c = 2
If SSaver < 10 Then
b$ = "Key0" & Trim$(Str$(SSaver)) & ".scl"
Else
b$ = "Key" & Trim$(Str$(SSaver)) & ".scl"
End If
HierHer:
a$ = Speichern$("Schlüssel speichern", c, b$)
If a$ = vbNullString Or Len(a$) = 0 Then SSaver = SSaver - 1: Exit Sub
If FF(a$) Then
x = MsgBox("Datei: " & Chr$(34) & Mid$(a$, InStrRev(a$, "\") + 1) & Chr$(34) & vbNewLine & "existiert schon!" & vbNewLine & vbNewLine & "Überschreiben?", 276, "Indigo")
If x = 6 Then
Kill a$
DoEvents
Else
b$ = Mid$(a$, InStrRev(a$, "\") + 1): c = -1: GoTo HierHer
End If
End If
frei = FreeFile: Open a$ For Binary As #frei
For x = 1 To 100: Put #frei, , Key(x): Next: Close frei
Hallo:
If Timer1.Enabled Then Sleep 2: DoEvents: GoTo Hallo
Scroll$ = "Schlüssel wurde erfolgreich gespeichert!": Timer1.Enabled = True
Exit Sub
Fehler:
Close frei: MsgBox "Fehler " & Chr$(34) & Err.Number & Chr$(34) & " ist aufgetreten!" & vbNewLine & Err.Description, 16, "Indigo :-("
Err.Clear: On Error GoTo 0
MsgBox "Schlüssel-Speicherung fehlerhaft!", 48, "Indigo :-("
SSaver = SSaver - 1
End Sub
(Verschlüsselten) Text speichern:
Code: Alles auswählen
Private Sub tp_Click()
Dim a$, b$, x As Long, c$, d As Long
If Len(Text1.Text) = 0 Then MsgBox "Es wurde noch nichts geschrieben oder verschlüsselt!", 64, "Indigo": Exit Sub
On Error GoTo Fehler
TSaver = TSaver + 1
d = 3: c$ = ".txt": If En.Enabled Then c$ = ".vtxt": d = 4
If TSaver < 10 Then
b$ = "Test-Text0" & Trim$(Str$(TSaver))
Else
b$ = "Test-Text" & Trim$(Str$(TSaver))
End If
Jumping:
If En.Enabled Then
a$ = Speichern$("Verschlüsselten Text speichern", d, b$ & c$)
Else
a$ = Speichern$("Text speichern", d, b$ & c$)
End If
If a$ = vbNullString Or Len(a$) = 0 Then TSaver = TSaver - 1: Exit Sub
If FF(a$) Then
x = MsgBox("Datei: " & Chr$(34) & Mid$(a$, InStrRev(a$, "\") + 1) & Chr$(34) & vbNewLine & "existiert schon!" & vbNewLine & vbNewLine & "Überschreiben?", 276, "Indigo")
If x = 6 Then
Kill a$
DoEvents
Else
b$ = Mid$(a$, InStrRev(a$, "\") + 1): c$ = vbNullString: d = -1: GoTo Jumping
End If
End If
frei = FreeFile: Open a$ For Binary As #frei
If En.Enabled Then
Put #frei, , Chr$(1) & Chr$(247) & Chr$(8) & Chr$(125) & Chr$(44) & VSpeicher$ & Chr$(254) & Chr$(1) & Chr$(9)
Scroll$ = "Verschlüsselter Text wurde erfolgreich gespeichert!"
Else
Put #frei, , Text1.Text
Scroll$ = "Ihr Text wurde erfolgreich gespeichert!"
End If
Close frei
Hbllo:
If Timer1.Enabled Then Sleep 2: DoEvents: GoTo Hbllo
Timer1.Enabled = True
Exit Sub
Fehler:
Close frei: MsgBox "Fehler " & Chr$(34) & Err.Number & Chr$(34) & " ist aufgetreten!" & vbNewLine & Err.Description, 16, "Indigo :-("
Err.Clear: On Error GoTo 0
MsgBox "Text-Speicherung fehlerhaft!", 48, "Indigo :-("
TSaver = TSaver - 1
End Sub
Schlüssel laden:
Code: Alles auswählen
Private Sub sl_Click()
Dim a$, x As Long, c As Long, b$
On Error GoTo Fehler
c = 2: b$ = vbNullString
Nochmal:
a$ = Laden$("Schlüssel laden", c, b$)
If a$ = vbNullString Or Len(a$) = 0 Then Exit Sub
frei = FreeFile: Open a$ For Binary As #frei
If LOF(frei) < 100 Then
Close frei: MsgBox "Datei: " & Chr$(34) & Mid$(a$, InStrRev(a$, "\") + 1) & Chr$(34) & vbNewLine & "ist keine Schlüssel-Datei!" & vbNewLine & vbNewLine & "Diese Datei ist zu klein!", 16, "Indigo :-("
c = -1: b$ = Mid$(a$, InStrRev(a$, "\") + 1): GoTo Nochmal
End If
If LOF(frei) > 100 Then
x = MsgBox("Datei: " & Chr$(34) & Mid$(a$, InStrRev(a$, "\") + 1) & Chr$(34) & vbNewLine & "ist keine Schlüssel-Datei, sie ist zu GROSS!" & vbNewLine & vbNewLine & "Diese Datei trotzdem als Schlüssel einladen?", 276, "Indigo")
If x = 6 Then
For x = 1 To 100: Get #frei, , Key(x): Next: Close frei
For x = 1 To 30: KeyText(x).Text = Key(Page * 5 + x): Next
Dillo:
If Timer1.Enabled Then Sleep 2: DoEvents: GoTo Dillo
Scroll$ = "Fremd-Datei wurde als Schlüssel geladen!": Timer1.Enabled = True: Exit Sub
Else
Close frei: c = -1: b$ = Mid$(a$, InStrRev(a$, "\") + 1): GoTo Nochmal
End If
End If
For x = 1 To 100: Get #frei, , Key(x): Next: Close frei
For x = 1 To 30: KeyText(x).Text = Key(Page * 5 + x): Next
Eber:
If Timer1.Enabled Then Sleep 2: DoEvents: GoTo Eber
Scroll$ = "Schlüssel wurde erfolgreich geladen!": Timer1.Enabled = True: Exit Sub
Fehler:
Close frei: MsgBox "Fehler " & Chr$(34) & Err.Number & Chr$(34) & " ist aufgetreten!" & vbNewLine & Err.Description, 16, "Indigo :-("
Err.Clear: On Error GoTo 0
MsgBox "Schlüssel laden fehlerhaft!", 48, "Indigo :-("
(Verschlüsselten) & Text laden:
Code: Alles auswählen
Private Sub tl_Click()
Dim a$, i As Byte, c As Long, b$
On Error GoTo Fehler
c = 4
aNochmal:
a$ = Laden$("Text oder verschlüsselten Text laden", c, b$)
If a$ = vbNullString Or Len(a$) = 0 Then Exit Sub
frei = FreeFile: Open a$ For Binary As #frei
If LOF(frei) = 0 Then
Close frei: MsgBox "Datei: " & Chr$(34) & Mid$(a$, InStrRev(a$, "\") + 1) & Chr$(34) & vbNewLine & "ist leer!", 16, "Indigo"
c = -1: b$ = Mid$(a$, InStrRev(a$, "\") + 1): GoTo aNochmal
End If
If LOF(frei) < 9 Then b$ = String$(LOF(frei), 0): GoTo Heiter
If LOF(frei) < 109 Then
b$ = String$(LOF(frei), 0): Get #frei, , b$: Close frei
If Left$(b$, 5) = Chr$(1) & Chr$(247) & Chr$(8) & Chr$(125) & Chr$(44) And Right$(b$, 3) = Chr$(254) & Chr$(1) & Chr$(9) Then
b$ = Mid$(b$, 6): b$ = Left$(b$, Len(b$) - 3)
For i = 0 To 3: Label1(i).ForeColor = &HFF&: Next: Text1.ForeColor = &HFF&: Ve.Enabled = False: En.Enabled = True: Command1.Visible = True: Text1.Locked = True
VSpeicher$ = b$
b$ = Replace$(b$, Chr$(0), Chr$(1)): b$ = Replace$(b$, Chr$(9), Chr$(1))
Text1.Text = b$: Text1.SetFocus: Text1.SelStart = Len(Text1.Text)
Scroll$ = "Verschlüsselter Text wurde erfolgreich geladen!"
GoTo Eberesche
Else
GoTo Teiter
End If
End If
b$ = String$(100, 0)
Heiter:
Get #frei, , b$: Close frei
Teiter:
Text1.Text = b$: Call MachNeu
Scroll$ = "Text wurde erfolgreich geladen!"
Eberesche:
If Timer1.Enabled Then Sleep 2: DoEvents: GoTo Eberesche
Timer1.Enabled = True: Exit Sub
Fehler:
Close frei: MsgBox "Fehler " & Chr$(34) & Err.Number & Chr$(34) & " ist aufgetreten!" & vbNewLine & Err.Description, 16, "Indigo :-("
Err.Clear: On Error GoTo 0
MsgBox "Text laden fehlerhaft!", 48, "Indigo :-("
End Sub
In diesen Prozeduren, werden wiederum andere Prozeduren aufgerufen und/oder auch API's.
API's:
Code: Alles auswählen
Private Declare Function ShellExecuteA Lib "shell32.dll" (ByVal hWnd As Long, ByVal lOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
zeppelinflieger hat geschrieben:Mich interessiert das Steuerelement, da wo die Zahlen vom Schlüssel drin sind mit den Scrollbalken und so. Was ist das für ein Steuerelement?
:-)
Gar keins, ist selbst gebaut aus 30 Textboxen, ein VScroll Element und 6 Labels. Ich habe aber keine 30 Textboxen einzeln platziert, sie werden bei der Aktivierung der Form in einem Index nachgeladen:
Code: Alles auswählen
Private Sub Form_Activate()
Dim i As Byte, x As Long, y As Long, r As Byte, z As Byte, k As Byte, a$
...
Anderer Code
...
k = 0: z = 1: x = 1300: y = 120: For r = 1 To 6: For i = 1 To 4 + k: z = z + 1
Load KeyText(z): KeyText(z).Visible = True
KeyText(z).Left = x: KeyText(z).Top = y
x = x + 420
Next
y = y + 270: x = 880: k = 1: Next: Call ProgrammKey
y = 140: x = 6: For i = 2 To 6: Load Labelnummer(i): Labelnummer(i).Visible = True
Labelnummer(i).Left = 45: y = y + 270: Labelnummer(i).Top = y
Labelnummer(i).Caption = x & " - " & x + 4: x = x + 5
Next: Page = 0: Text1.SetFocus
End Sub
Und jedesmal wenn rauf oder runter gescrollt wird, werden die Werte eingetragen:
Code: Alles auswählen
Private Sub VScroll1_Change()
Dim i As Byte, x As Byte, r As Byte
Page = VScroll1.Value
x = Page * 5 + 1
For i = 1 To 6: Labelnummer(i).Caption = x & " - " & x + 4: x = x + 5
Next: x = Page * 5 + 1
For r = 0 To 29: KeyText(r + 1) = Key(x + r): Next: Text2.SetFocus
End Sub
zeppelinflieger hat geschrieben:Auch den Ver/Entschlüsselungscode würde ich gern sehen.
Aber das wird Dir nicht viel sagen, weil Du die Variablen-Zugehörigkeit nicht kennst.
Verschlüsseln:
Code: Alles auswählen
Private Sub Ve_Click()
Dim i As Byte, x As Long, a$
If Text1.Text = vbNullString Then MsgBox "Textbox ist leer!", 64, "Indigo": Text1.SetFocus: Exit Sub
For i = 0 To 3: Label1(i).ForeColor = &HFF&: Next: Text1.ForeColor = &HFF&: Ve.Enabled = False: En.Enabled = True: Command1.Visible = True: Text1.Locked = True
For i = 1 To Len(Text1.Text)
x = Asc(Mid$(Text1.Text, i, 1)) + Key(i): If x > 255 Then x = x - 256
a$ = a$ & Chr$(x): Next
VSpeicher$ = a$
a$ = Replace$(a$, Chr$(0), Chr$(1)): a$ = Replace$(a$, Chr$(9), Chr$(1))
Text1.Text = a$: Text1.SetFocus: Beep
End Sub
Entschlüsseln:
Code: Alles auswählen
Private Sub En_Click()
Dim i As Byte, x As Long, a$
For i = 0 To 3: Label1(i).ForeColor = &H80000012: Next: Text1.ForeColor = &H80000008: Ve.Enabled = True: En.Enabled = False: Command1.Visible = False: Text1.Locked = False
For i = 1 To Len(VSpeicher$)
x = Asc(Mid$(VSpeicher$, i, 1)) - Key(i): If x < 0 Then x = x + 256
a$ = a$ & Chr$(x): Next
Text1.Text = a$: VSpeicher$ = vbNullString: Text1.SetFocus: Beep
End Sub
zeppelinflieger hat geschrieben:Wie bekommst du das Steuerelement für Laden und Speichern hin, also das Teil indem man ;was;Dateien; aussuchen kann?
Man kann dafür ein festes Programmier-Steuerelement (Common-Dialog) benutzen, was aber
extra über 100KB gross ist und bei manchen System noch installiert werden muss. Ich hätte also perse, eine Installation für dieses Programm
extra noch machen müssen. Was das ist, kennt man ja von anderen Programmen die man installieren muss.
Ich benutze aus diesen Gründen immer nur die System-API's und die dazugehörigen Deklarationen:
Code: Alles auswählen
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Public Type CMDialog
Ownerform As Long
Filter As String
Filetitle As String
FilterIndex As Long
FileName As String
DefaultExtension As String
OverwritePrompt As Boolean
AllowMultiSelect As Boolean
Initdir As String
Dialogtitle As String
Flags As Long
End Type
Public cmndlg As CMDialog
Public Function ShowOpen() As String
Dim OFName As OPENFILENAME
Dim temp As String
With cmndlg
OFName.lStructSize = Len(OFName)
OFName.hwndOwner = .Ownerform
OFName.hInstance = App.hInstance
OFName.lpstrFilter = Replace$(.Filter$, "|", Chr$(0))
OFName.lpstrFile$ = String$(254, 0)
OFName.nMaxFile = 255
OFName.lpstrFileTitle$ = String$(254, 0)
OFName.nMaxFileTitle = 255
OFName.lpstrTitle$ = .Dialogtitle$
OFName.nFilterIndex = .FilterIndex
OFName.lpstrDefExt$ = .DefaultExtension$
OFName.lpstrFile$ = .FileName$ & String$(254 - Len(.FileName$), 0)
If GetOpenFileName(OFName) Then
.FilterIndex = OFName.nFilterIndex
Else
.FileName = vbNullString
End If
End With
ShowOpen$ = Trim$(OFName.lpstrFile$)
ShowOpen$ = Replace$(ShowOpen$, vbNullChar, vbNullString)
End Function
Public Sub ShowSave()
Dim OFName As OPENFILENAME
With cmndlg
OFName.lStructSize = Len(OFName)
OFName.hwndOwner = .Ownerform
OFName.hInstance = App.hInstance
OFName.lpstrFilter$ = Replace$(.Filter$, "|", Chr$(0))
OFName.nMaxFile = 255
OFName.lpstrFileTitle$ = String$(254, 0)
OFName.nMaxFileTitle = 255
OFName.lpstrTitle$ = .Dialogtitle$
OFName.nFilterIndex = .FilterIndex
OFName.lpstrDefExt$ = .DefaultExtension$
OFName.lpstrFile$ = .FileName$ & String$(254 - Len(.FileName$), 0)
OFName.Flags = .Flags Or IIf(.OverwritePrompt, &H2, 0)
If GetSaveFileName(OFName) Then
.FileName$ = StripTerminator(Trim$(OFName.lpstrFile$))
.Filetitle$ = StripTerminator(Trim$(OFName.lpstrFileTitle$))
.FilterIndex = OFName.nFilterIndex
Else
.FileName$ = vbNullString
End If
End With
End Sub
Private Function StripTerminator(ByVal strString As String) As String
StripTerminator$ = Replace$(strString$, vbNullChar, vbNullString)
End Function
Aufgerufen werden sie dann so:
Code: Alles auswählen
Private Function Laden(ByVal Titel As String, ByVal FIndex As Long, Optional ByVal Nome As String = vbNullString) As String
With cmndlg
.Filter$ = "Alle Dateien (*.*)|*.*|Schlüssel Dateien (*.scl)|*.scl|Text-Dateien (*.txt)|*.txt|Verschlüsselte Dateien (*.vtxt)|*.vtxt"
If FIndex <> -1 Then .FilterIndex = FIndex
.Flags = 5
If Nome$ <> vbNullString Then .FileName$ = Nome$
.Ownerform = hWnd
.Dialogtitle$ = Titel$
End With
Laden$ = ShowOpen$
If InStr(Laden$, ":\") = 0 Then Laden$ = vbNullString
End Function
---------------------------------------------------------------------------------------------------
Private Function Speichern(ByVal Titel As String, ByVal FIndex As Long, ByVal Nome As String) As String
With cmndlg
.Filter$ = "Alle Dateien (*.*)|*.*|Schlüssel Dateien (*.scl)|*.scl|Text-Dateien (*.txt)|*.txt|Verschlüsselte Dateien (*.vtxt)|*.vtxt"
.Flags = 5
If FIndex <> -1 Then .FilterIndex = FIndex
.FileName$ = Nome$
.Ownerform = hWnd
.Dialogtitle$ = Titel$
ShowSave
Speichern$ = .FileName$
.FileName$ = vbNullString
End With
End Function
So das war's dann!
lg