Наверное Windows сошли с ума или Мой Бэсик ч. 4

Юрий Меркулов
ЧАСТЬ ЧЕТВЕРТАЯ


060602



И, видимо, самая печальная.
Мало того, что книжка козляча, так еше и бараня. Почему-то автору захотелось не объяснять КАК открывается файл с диска, как в него что-то записывается или наоборот из него что-то берется, и как это все потом сохраняется на диске в виде файла.
Смутные вопросы - а как же сохранить установки , сделанные пользователем? Я накликал килограмм флажков, а при новом запуске? Смутно вспоминаю что-то о константах   - уж не они ли, родненькие, информацию всю в себе держат? Так что же, программа сама себя записывает в новом виде, получается? или?

Пролистал книжку далеко - ни слова о СоммоnDialog, например! А я всего то хочу открыть текстовый файл в окошечке текстбокса и модифицировав его Сохранить Как... Но мой безумно любимый теперь уже автор пособия предпочел сделать так: “информацию об этом вы найдете на прилагаемом Сидюке.” А на сидюке - английская версия, да не учебного курса, а скорее научного препарирования. Три страницы об аргументе, который, в общем-то...

Убил вечер пытаясь понять книгу. Много суше, плюс по-английски. Ничего не получилось и из попытки высмотреть как это делается в примерах. СоммонДиалог1. тоже нигде не описан... Попутно нашел пару ненужных кавычек в его (автора) коде, но это уже такие сравнительно пустяки, что и говорить о них смешно...

Ну что ж, если завтра голова не прояснится, то у меня есть уже много чего спросить. И я буду.
1. Как проверить четность переменной?
2. Массивы и нахер они мне загнулись ( с примерами)
3. Метод Мув и натягивание невидимого Лейбла, с целью его дальнейшего драгэнддропа.
4. И вот, операции с файлами.

В принципе, добив тему простых элементов я иду в рисование, что должно быть приятно, так что надеюсь не на одну счастливую ночь, наполненную кофе и матюками...

130602

Вау, стыдно сказать на что ушло три дня: конечно были причины экстрапрограммистского характера, как-то необходимость записать новую пластинку, чтобы подарить вовремя и своевременно людям, с которыми прощаюсь, но можно также и сказать, что я переживал свой первый глубинный кризис в деле этом
Сейчас расскажу...

В книжке - будь она трижды переиздана с исправлениями, очевидно злонамеренно внесены проблемы. А именно: элементы открытия и сохранения файла не описаны вообще! Сначала я думал над этим, потом перестал, потом снова стал.

Чудо озарения посетило меня. Я открыл “пример”, работающий, то есть открывающий эти самые будь они диалоговые окна и понял, что не в коде дело. Мельком упомянутый через СТО страниц ( я пролистал) ...нужно поместить на форму элемент управления СommonDialog и все типа покатится...

Эти три дня понадобились мне для того, чтобы подойти к проблеме со свежей головой, не отягощенной прежним неудачным опытом.
Все решилось когда я остановил форму и увидел на ней невидимый элемент управления. На моей панели инструментов его не было пришлось искать. Как нашел? Открыл окно добавления компонентов на панель и понял, что искомое кличут MicrosiftCommonDialog 6.0
Кто бы мог подумать?
Поместив его на форму, у меня все заработало.
Теперь я иду спать, потому что устал. Страницы, что следуют за той, что я остановился обещают быть трудными и интересными. В одном они врут.
А этому автору я помимо спасибо еще бы, конечно, кое что сказал!

Private Sub Command1_Click()
CommonDialog1.ShowOpen
End Sub

До смешного просто, правда?
Смешно до грустного.
Устал.





Опыт №   



Стоит ли удивляться тому, что скорость освоения материала у меня повысилась настолько, что записывать каждый шаг я уже не успеваю.
Разобравшись с проблемой открыть закрыть сохранить, я немедленно приступил к осуществлению одного из замыслов:
Окончательно удобный Текстовый редактор:




Option Explicit
Public OpenFile As String
Public Pruf As String

                " Dubbing - Buttom SAVE FILE

Public Sub DublButtonSaveFile_Click()
MenuFileSpeichern_Click
End Sub
Private Sub Command1_Click()
MenuFileSpeichernAls_Click
End Sub

Private Sub LabelOpenedFileNameInformator_Click()
MenuMachenVisible
End Sub
"                MENU EXTRA

"                show geschichte
Private Sub MenuExtraShowGeschichte_Click()
GeschichterList.Visible = Not GeschichterList.Visible
End Sub

Private Sub MenuFile_Click()
MenuFile.Caption = "File"
End Sub
                " MENU FILE


                "file neu

Private Sub MenuFileNeu_Click()
MenuMachenVisible
Editor.Text = ""
LabelOpenedFileNameInformator.Caption = "Sie haben einen neue File gemacht!"
OpenFile = ""

End Sub

                "file open

Public Sub MenuFileOffen_Click()
If Pruf = “” Then
Dim FNum As Integer
Dim txt As String
MenuMachenVisible
On Error GoTo FileError
    CommonDialog1.CancelError = True
    CommonDialog1.Flags = cdlOFNFileMustExist
    CommonDialog1.DefaultExt = "TXT"
    CommonDialog1.Filter = "Text files|*.TXT|All files|*.*"
    CommonDialog1.ShowOpen
    FNum = FreeFile
    Open CommonDialog1.FileName For Input As #FNum
    txt = Input(LOF(FNum), #FNum)
Pruf = CommonDialog1.FileName
AddGeschichte
    Close #FNum
    Editor.Text = txt
LabelOpenedFileNameInformator.Visible = True
LabelOpenedFileNameInformator.Caption = "Sie bearbeiten dieser File:   " & CommonDialog1.FileName
"присвоение глобальной переменной OpenFile - открытый _
файл под именем #FNum
Else
Beep
MsgBox "Ein File ist schon Geoffnet!"
Beep
End If
Exit Sub
FileError:
    If Err.Number = cdlCancel Then Exit Sub
    MsgBox "Unkown error while opening file " & CommonDialog1.FileName
    OpenFile = ""
    End Sub

                " file schliessen

Private Sub MenuFileSchlieЯen_Click()
Form2.Show
End Sub

                " file speichern

Private Sub MenuFileSpeichern_Click()
Dim FNum As Integer
Dim txt As String
    If OpenFile = "" Then " esli stroka pustaya
        MenuFileSpeichernAls_Click
        Exit Sub
    End If
On Error GoTo FileError
    FNum = FreeFile " wahrscheinlich,
    Open OpenFile For Output As #1
    Print #FNum, Editor.Text
    Close #FNum
    Exit Sub

FileError:
    If Err.Number = cdlCancel Then Exit Sub
    MsgBox "Unkown error while saving file " & OpenFile
    OpenFile = ""

End Sub

                "file save as



Private Sub MenuFileSpeichernAls_Click()
Dim FNum As Integer
Dim txt As String

On Error GoTo FileError
    CommonDialog2.CancelError = True
    CommonDialog2.Flags = cdlOFNOverwritePrompt
    CommonDialog2.DefaultExt = "TXT"
    CommonDialog2.Filter = "Text files|*.TXT|All files|*.*"
    CommonDialog2.ShowSave
    FNum = FreeFile
    Open CommonDialog2.FileName For Output As #1
    Print #FNum, Editor.Text
    Close #FNum
    OpenFile = CommonDialog1.FileName
    Exit Sub

FileError:
    If Err.Number = cdlCancel Then Exit Sub
    MsgBox "Unkown error while saving file " & CommonDialog1.FileName
    OpenFile = ""
End Sub

                "   file druecken


Private Sub MenuFileFileDrucken_Click()
On Error GoTo Error
CommonDialog1.ShowPrinter
Exit Sub
Error:
If Err.Number = cdlCancel Then
Exit Sub
Else
MsgBox "drugaa osibka"
End If
End Sub
"                DIE FUNCTIONEN!!!

Private Function MenuMachenVisible()
OperationenMenu.Visible = Not OperationenMenu.Visible
ExtraMenu.Visible = Not ExtraMenu.Visible
EditMenu.Visible = Not EditMenu.Visible
End Function

Private Function AddGeschichte()
GeschichterList.AddItem CommonDialog1.FileName
End Function



FORM 2

Option Explicit

Private Sub JaSpeichern_Click()
Form1.DublButtonSaveFile_Click
Form1.LabelOpenedFileNameInformator.Caption = "Sie haben alles GUT gespeichert!"
PutzenHiden
End Sub
Private Sub NeinSpeichern_Click()
    Form1.LabelOpenedFileNameInformator.Caption = "Sie haben nicht gespeichert!"
    PutzenHiden
End Sub
Private Function PutzenHiden()
    Form1.Editor.Text = ""
Form1.CommonDialog1.FileName = ""
    Me.Hide
End Function


Не мог вспомнить как вызывать этот блин инпут бокс, пришлось лепить вторую форму. А что если бы и вспомнил, как бы я на нем нарисовал кнопки сохранить - не сохранять? Да никак!

Программульки мои, прежде всего те, о которых я постыдился бы рассказывать, пухнут просто дико - где же тот добрый старый калькулятор в две строчки нарисованный!
Я должен признаться что часто просто не понимаю как это работает, ведь не должно же!

Очень понравилась мне возможность дублировать событие другой кнопкой. Просто после события клик ставишь другое событие клик - и это другое выполняется так , как будто именно по нему щелкнули. Но при вызове таких штукенций из другой формы  - мы обязательно должны дополнять его адресом и объявить действующие переменные глобальными. Ну или публичными хотя бы... Как девок!




Опыт №

Убился на создании “мигающей” кнопки типа жми меня.
Учитель подсказал что if (MyVal Mod 2 ) = 0 проверяет четность...
Да, проверяет, только все равно таймер не получился...


"               FLASCH MENU LOS!

Private Function FlaschMenuLos()
Dim Pendler As Integer, ChetNechet, Ltimer
For Pendler = 1 To 25
If (Pendler Mod 2) = 0 Then
MenuFile.Caption = "1314234"
Else
Ltimer = Timer()

While Timer - Ltimer < 1
Wend
MenuFile.Caption = "NECHETNOE"
Pendler = Pendler + 1
End If
Next
End Function

Это уродливый кусок, не работает. Вешает программу при старте пока не закончится цикл и так далее. Удивительно то, что однажды оно заработало, я решив это улучшить закрепить успех, чего то накружил и оно остановилось насмерть...
Тружусь дальше, чувствую, что удача где-то рядом:

Похерил это занятие за ужасной потребой времени.

Вернулся к текстовому редактору, который и был, собственно причиной отвлечения на...
Оказалось, что это очень непросто - при изменении размера формы, соответственно изменять размер элемента текст бокс и - естественно - приклеенную к нему снизу командную строку.
В итоге - результата я добился, но изображение страшно дергается, когда я изменяю размер формы - то есть след. функция вызывается Form_Resize...


                " GROSS GLEICHER
Private Function GrossGleicher()
Editor.Height = Form1.Height - 2000
Editor.Width = Form1.Width - 250
"LabelOpenedFileNameInformator.Width = Editor.Width
LabelOpenedFileNameInformator.Left = Editor.Left
LabelOpenedFileNameInformator.Top = Editor.Top + Editor.Height _
 + LabelOpenedFileNameInformator.Height
Move Form1.Left, Form1.Top + Editor.Height + 500
"Form1.Top -Form1.Height + 300
"Editor.Left = Form1.Left - 10
"Editor.Top = Form1.Top - 10
End Function

К тому же оказалось, что Load_Form почему-то тут же выполняет Form_Resize!
А в этой строчке:

Move Form1.Left, Form1.Top + Editor.Height + 500
я почему то понял, что ТОП  элемента - всегда отрицательное число, относительно того, кого я хочу поместить под ним.
А сразу после этого я понял, что вся эта строчка - остаток от прежних экспериментов, который тут совершенно ни к чему. Закавычив его я получил искомое: окошко меняясь в размерах, меняет с собой размер ТЕКСТ БОКС, который тянет за собой “командную строку”

Private Function GrossGleicher()
Editor.Height = Form1.Height - 2000
Editor.Width = Form1.Width - 250
"LabelOpenedFileNameInformator.Width = Editor.Width
LabelOpenedFileNameInformator.Left = Editor.Left
LabelOpenedFileNameInformator.Top = Editor.Top + Editor.Height _
 + LabelOpenedFileNameInformator.Height
"Move Form1.Left, Form1.Top + Editor.Height + 500
"Form1.Top -Form1.Height + 300
"Editor.Left = Form1.Left - 10
"Editor.Top = Form1.Top - 10
End Function

Должен сознаться, что реализовал код без обращения к первоисточникам, то есть не следуя примерам. Теперь бы посмотреть как это делают умные люди, да нету силушки. Больщие программы требуют много времени. Теперь бы еще проверить как оно после этого все работает...

При наращивании мощности, посмотрю, что же мне дает вынос функции за скобку события - чтобы при случае обратиться к этой же функции...

Но однако,если из одного события можно инициировать другое событие - то на кой они вообще - эти функции:


Private Sub Button1_Click()
Button2_Click()
End Sub

Private Sub Button2_Click
MsgBox “Ohne Funktion man kann einfach!”
End Sub

Ощущение, что я отказался от реализации “мигания” средствами таймера - неверное. Я просто взял паузу и пошел гулять с семьей. Работать более 12 часов в день можно, но назавтра идет расплата. Не будем загонять коней, еще есть время...




Опыт №


Private Function GrossGleicher()
Editor.Height = Form1.Height - Form1.Height - 1500
Editor.Width = Form1.Width - 250
LabelOpenedFileNameInformator.Left = Editor.Left
LabelOpenedFileNameInformator.Top = Editor.Top + Editor.Height _
 + LabelOpenedFileNameInformator.Height - 150
End Function


Только начал трудиться - сразу убил баг:
См.выше давала мне сбой, если я делал форму слишком маленькой. Тогда я понял, что ставить численные значения точно так же невозможно глупо, как делать это в хтмл страничке: мы ж все разные!
тогда я просто поставил пропорцию и все закружилось см ниже:

Editor.Height = Form1.Height - Form1.Height - Form1.Height /4


Но это работало очень недолго. Одно неловкое движение  - и все полетело к чертям.
Строка LabelOpenedFileNameInformator , призванная быть командной, никак не желала отражаться на экране и двигаться вместе с размерами формы, сохраняя при этом свою высоту...

" GROSS GLEICHER
Private Function GrossGleicher()
"If Editor.Height = Form1.Height - 4 * LabelOpenedFileNameInformator.Height <= 0 Then
"LabelOpenedFileNameInformator.Height = LabelOpenedFileNameInformator.Height - _
"LabelOpenedFileNameInformator.Height
""LabelOpenedFileNameInformator.Visible = False
""Exit Function
"Else
Editor.Height = Form1.Height - 4 * LabelOpenedFileNameInformator.Height
Editor.Width = Form1.Width
    LabelOpenedFileNameInformator.Left = Editor.Left
    LabelOpenedFileNameInformator.Top = Editor.Top + Editor.Height
"+ Editor.Height + _
  "  4 * LabelOpenedFileNameInformator.Height
"Form1.Refresh
"End If
End Function


Бился-мучался, хоть и азартно. В итоге, выбросив почти все, пробую:


" GROSS GLEICHER
Private Function GrossGleicher()
If Form1.Height <= 1001 Then
Exit Function
End If
Editor.Height = Form1.Height - 4 * LabelOpenedFileNameInformator.Height
Editor.Width = Form1.Width
    LabelOpenedFileNameInformator.Left = Editor.Left
    LabelOpenedFileNameInformator.Top = Editor.Top + Editor.Height

"       geschichte fenster moving

GeschichterList.Move Editor.Left, Editor.Top, Editor.Width / 1.25, Editor.Height / 2
End Function

И оно работает! Хотя убей Бог не понимаю как! Ну хорошо, мы выходим из функции, когда достигается предельно малая величина, но ведь изменение размера продолжаются и дальше!
Нет, не понимаю...

Назревший вопрос: как мне сохранить установки пользователя после закрытия программы? Возможно ли это? На моем уровне да, я просто автоматически записываю информацию в текстовый файл, а при загрузке формы считываю ее. но есть наверняка и более короткий путь...
Хорошо, что он мне пока не нужен...

Хотел запечатлеть кодом новый шаг в моем развитии, но оставил на завершение опыта.
А пока только доложу, что

Private Sub MenuAlleAuszeichnen_Click()
Editor.SelStart = 0
Editor.SelLength = Len(Editor.Text)
End Sub

работает, тогда как:

Editor.SelStart = Editor.SelText

работать отказывается. Странно, курсор же стоит, значит у него есть позиция...

Или вот, к примеру:

Private Sub MenuEinzufuegen_Click()
If Clipboard.GetFormat(vbCFText) Then
Editor.SelText = Editor.SelText + Clipboard.GetText
LabelOpenedFileNameInformator.Caption = "Die Auszeichnung ist einzufuegt..."
Else
MsgBox "Clipboard inhalt kein Text!"
End If
Exit Sub
End Sub

В варианте
Editor.SelText = Clipboard.GetText

скопированное вставляется только со второго раза, заменяя собой выделение. А это глупо...

Нет, написать программу - то есть создать алгоритм - дело совсем не трудное. Трудное дело - попробовать его работу при всех условиях. Обязательно где-то закосит...
Что же. У меня - редактор, созданный специально под рубрику “Лав Стори” . Он позволяет набирать текст и - что самое главное - автоматический подсчет набранного уже и оставшегося.
Поставил два индикатора - вот пришло мне в голову, что длина элемента может соответствовать количеству. Сломал голову над пропорциями и в итоге:

" INDIKATOR HAND SCHRIFT
Handei.Width = Handei.Width + 1 / 3000 * Editor.Width
Debug.Print " handei" & Handei.Width + 1 / 3000 * Editor.Width
" IDIKATOR INSERT
x = Form1.Width / 9198
Dlina.Width = Len(Editor.Text) * x
Debug.Print "dlina" & Len(Editor.Text) * x
End Sub

Проверить работу трудно , менять данные не хочется. Оставлю как бета версию и попытаюсь в нем работать, добавив конечно вступление и постскриптум автоматически.
Надо отметить специфику:
1. Писем - то есть вставленного текста должно быть около 7 000
2. Комментариев - ручного ввода - около 3 000
Задача: Синий индикатор должен быть заполнен при достижении 3000
Красный  - при 7 000
Конечно, все должно быть пропорционально верно.

На вопрос: Как это сделать? Следует очень умный ответ: а на хера тебе это надо?
Вот от 9 утра до 0 ночи - на что ушло?
На глупые эксперименты.
на эксперименты, которые сделают меня Мастером...



Опыт №






...Два дня - ни шагу вперед. В теории я имею в виду. Зато на практике - позанимался тем, что давно должно было.
В итоге - приложение, которое:




1. Масштабируется.

2. Заточено под конкретну.ю задачу - набрать 9198 знаков, из которых 7000 отражаются розовым индикатором наполнения, а “ручной ввод” около 3000 знаков - это синенький. Индикаторы тоже масштабируются - все построено на пропорциях. Разумеется очень просто эти параметры изменить или вводить юзером.

3. Открывает сохраняет изменяет создает файлы - только текстовые, - ну разумеется.

4. Ведет историю пункта 3.

5. Корректируется почти хорошо, чуть чуть защищено от дурака.

6. Имеет ужас сколько форм в составе и модуль к тому.

7. Весьма приличную командную строку имеет это приложение: информация об уже и еще с изменением цвета. Не знаю стопроцентно ли работает...

8. Само собой - выделить скопировать вставить тоже работает.

9. Фишка, убившая время - это кнопка Интеллектуальной помощи.
Пока она вставляет заголовок и постскриптум и все, но в процессе работы намерен добавить ей свойств. Это тоже легко модифицируется в коде.

10. Имеет красную черточку.

11. Большая.




" Projekt Lavstor 001 - 004 bis  jun 2002 von 18 jun 2002
Option Explicit
Public OpenFile, x As Integer, Max
Dim DumKopf As Integer

"
"
"
                " INTELLEKT BUTTON PROGRAMMING

Private Sub ButtonSaveDoppelt_Click()
On Error GoTo ZuViel
If Len(Editor.Text) >= 8900 Then
Editor.Text = Editor.Text & vbCrLf & "" & vbCrLf & "" & vbCrLf & "" & vbCrLf & "P.S. Спасибо всем, кто пишет нам письма по адресу: 654066 Новокузнецк, а/я 7161 ""Лав Стори"" или lovestoryrus@yahoo.com" & vbCrLf & _
"А также всем друзьям народной рубрики Лав Стори за понимание, за внимание, и за добрые мысли в наш адрес. " & vbCrLf & _
"Не забывайте, что Вы сами выбираете темы для нашего разговора.  " & vbCrLf & _
"Пишите еще!" & vbCrLf & _
"И встретимся в пятницу!" & vbCrLf & _
"Ю.М." & vbCrLf & _
 " " & vbCrLf & _
" " & vbCrLf & _
" стиль и пунктуация писем - авторские"
DumKopf = 0
MenuFileSpeichern_Click
End If
"Exit Sub
"     Anfang
Select Case Editor.Text
Case Is = ""
MenuVisibleTrue
Editor.Text = Editor.Text & Date & vbCrLf & "Лав Стори " & vbCrLf & " " & vbCrLf & "             "
Editor.SetFocus
Editor.SelStart = Len(Editor.Text)

"         postskriptum

Case Is = Date & vbCrLf & "Лав Стори " & vbCrLf & " " & vbCrLf & "             "
Editor.SetFocus
Editor.SelStart = Len(Editor.Text) - 3
Editor.SelLength = Len(Editor.Text)
Case Else
DumKopfFunction
End Select
Exit Sub
ZuViel:
MsgBox "Dieser Editor kan nur kleinen Text bearbeiten!"
DumKopf = 0
End Sub


" correctur fuer hand indikator

Private Sub Editor_KeyPress(KeyAscii As Integer)
Debug.Print KeyAscii
Select Case KeyAscii
Case Is = 8 "back spase
Max = Max - 1 - Len(Editor.SelText)
Case Is = 13 " enter
Max = Max
Case Is = 27 " escape
Max = Max
Case Else
Max = Max + 1
End Select
End Sub

Private Sub Form_Load()
Handei.Width = 1 / 3000 * Form1.Width
Dlina.Width = 1 / 9198 * Form1.Width
" alle zeichen
End Sub

"  neue schreibung ohne offen + COUNTERS + INDIKATORS

Private Sub Editor_Change()
"Debug.Print Editor.Width
"Debug.Print " 9/!" & 9 / 10; Editor.Width
DumKopf = 0
Dim Noch As Integer
BirnePruef
MenuVisibleTrue
MenuFile_Click
Noch = 9198 - Len(Editor.Text)
If Noch > 0 Then
LabelOpenedFileNameInformator.Caption = "Sie machen eines neuen Text..." _
& "SCHON  " & Len(Editor.Text) & " NOCH " & Noch
Else
LabelOpenedFileNameInformator.Caption = "Sie machen eines neuen Text..." _
& "SCHON  " & Len(Editor.Text) & " SIE UBERARBEITEN!"
End If
" farbe des command string
If Noch > 7100 Then
LabelOpenedFileNameInformator.BackColor = vbGreen
ElseIf Noch > 500 Then
LabelOpenedFileNameInformator.BackColor = vbYellow
Else
LabelOpenedFileNameInformator.BackColor = vbBlue
End If
" INDIKATOR HAND SCHRIFT BLAU
If Max <= 0 Then
Exit Sub
End If
Handei.Width = Max * Editor.Width / 3000
If Handei.Width < Editor.Width / 10 Then
Handei.Caption = Max
Else
Handei.Caption = "hand:" & Max & " "
End If
" IDIKATOR INSERT ROT
Dlina.Width = Len(Editor.Text) * Editor.Height / 7000
Debug.Print Dlina.Width
"w
Select Case Dlina.Width
Case Is < Editor.Width / 10
Dlina.Caption = Len(Editor.Text)
Case Is > Editor.Width / 10
Dlina.Caption = "alle:" & Len(Editor.Text) & " "
Debug.Print Editor.Width
Debug.Print Dlina.Width
Case Is >= 9 / 10 * Editor.Width
"w
ButtonSaveDoppelt.Visible = False
"_
 "+ Editor.Width - ButtonSaveDoppelt.Height, _
"Editor.Top - (Form1.Height - Editor.Height) + 1.7 * ButtonSaveDoppelt.Height
"ew
"ButtonSaveDoppelt.Top = 1 / 5 * ButtonSaveDoppelt.Top
"Case is
End Select
End Sub

                " MENU BEARBEITEN

Private Sub MenuAlleLoeschen_Click()
Max = 1
Editor.Text = ""
End Sub
Private Sub MenuAusgang_Click()
End
End Sub
Private Sub MenuCopierenDieAuszeichnung_Click()
Clipboard.SetText Editor.SelText
LabelOpenedFileNameInformator.Caption = "Die Auszeichnung ist kopiert..."
End Sub
Private Sub MenuEinzufuegen_Click()
If Clipboard.GetFormat(vbCFText) Then
Editor.SelText = Editor.SelText + Clipboard.GetText
LabelOpenedFileNameInformator.Caption = "Die Auszeichnung ist einzufuegt..."
Else
MsgBox "Clipboard inhalt kein Text!"
End If
Exit Sub
End Sub
Private Sub MenuAlleAuszeichnen_Click()
Editor.SelStart = 0
Editor.SelLength = Len(Editor.Text)
End Sub


"                MENU EXTRA

"                BUTTON show geschichte
Private Sub MenuExtraShowGeschichte_Click()
Geschichte.Show
End Sub
"                schliessen
Private Sub MenuFileSchliessen_Click()
Frage.Show
End Sub



Private Sub MenuGrosseMachen_Click()
Editor.SelText = UCase$(Editor.SelText)
End Sub

Private Sub MenuJug_Click()
PraesentForm.Show
End Sub

Private Sub MenuKleineMachen_Click()
Editor.SelText = LCase$(Editor.SelText)
End Sub



                "Doppel-button Scliessen die Geschichte
Private Sub TasteSchliessenGeschichte_Click()
MenuExtraShowGeschichte_Click
End Sub
Private Sub MenuFile_Click()
MenuFile.Caption = "File"
End Sub                " MENU FILE


                "file neu

Public Sub MenuFileNeu_Click()
OperationenMenu.Visible = True
ExtraMenu.Visible = True
MenuBearbeiten.Visible = True
Editor.Text = ""
LabelOpenedFileNameInformator.Caption = "Sie haben einen neue File gemacht!"
OpenFile = ""
End Sub
                "file open

Public Sub MenuFileOffen_Click()
Dim FNum As Integer
Dim txt As String
On Error GoTo FileError
    CommonDialog1.CancelError = True
    CommonDialog1.Flags = cdlOFNFileMustExist
    CommonDialog1.DefaultExt = "TXT"
    CommonDialog1.Filter = "Text files|*.TXT|All files|*.*"
    CommonDialog1.ShowOpen
    FNum = FreeFile
    Open CommonDialog1.FileName For Input As #FNum
    txt = Input(LOF(FNum), #FNum)
    Close #FNum
    Editor.Text = txt
    OpenFile = CommonDialog1.FileName
Geschichte.GeschichterList.AddItem "    Am   " & Date & "    in  " & Time & "    Sie haben geoeffnet:   "
Geschichte.GeschichterList.AddItem CommonDialog1.FileName
LabelOpenedFileNameInformator.Caption = "Sie bearbeiten dieser File:   " & OpenFile
Exit Sub
FileError:
    If Err.Number = cdlCancel Then Exit Sub
    MsgBox "Unkown error while opening file " & CommonDialog1.FileName
    OpenFile = ""
   
End Sub

                " file speichern
Public Sub MenuFileSpeichern_Click()
Dim FNum As Integer
Dim txt As String
If Editor.Text = "" Then GoTo Fehler
    If OpenFile = "" Then
        MenuFileSpeichernAls_Click
        Exit Sub
    End If
On Error GoTo FileError
    FNum = FreeFile
    Open OpenFile For Output As #1
Print #FNum, Editor.Text
    Close #FNum
LabelOpenedFileNameInformator.Caption = "Sie haben alles GUT gespeichert!"
Geschichte.GeschichterList.AddItem "    Am   " & Date & "    in  " & Time & "    ist gespeichert:   "
Geschichte.GeschichterList.AddItem CommonDialog1.FileName
    Exit Sub
FileError:
    If Err.Number = cdlCancel Then Exit Sub
    MsgBox "Unkown error while saving file " & OpenFile
    OpenFile = ""
Exit Sub
Fehler:
Beep
MsgBox "Ihr File hat kein Wort!"
End Sub

                "file save as



Public Sub MenuFileSpeichernAls_Click()
Dim FNum As Integer
Dim txt As String

On Error GoTo FileError
    CommonDialog2.CancelError = True
    CommonDialog2.Flags = cdlOFNOverwritePrompt
    CommonDialog2.DefaultExt = "TXT"
    CommonDialog2.Filter = "Text files|*.TXT|All files|*.*"
    CommonDialog2.ShowSave
    FNum = FreeFile
    Open CommonDialog2.FileName For Output As #1
    Print #FNum, Editor.Text
    Close #FNum
    OpenFile = CommonDialog1.FileName
Geschichte.GeschichterList.AddItem "    Am   " & Date & "    in  " & Time & "  Als File :   "
Geschichte.GeschichterList.AddItem CommonDialog1.FileName & "   ihr Text war gespeichert"
If OpenFile = "" Then
LabelOpenedFileNameInformator.Caption = "Sie haben ihr neue File GUT gespeichert!"
Else
LabelOpenedFileNameInformator.Caption = "Sie haben   " & OpenFile & "  GUT gespeichert!"
    Exit Sub
FileError:
    If Err.Number = cdlCancel Then Exit Sub
    MsgBox "Unkown error while saving file " & CommonDialog1.FileName
    OpenFile = ""
End If
End Sub

                "   file druecken


Private Sub MenuFileFileDrucken_Click()
On Error GoTo Error
CommonDialog1.ShowPrinter
Exit Sub
Error:
If Err.Number = cdlCancel Then
Exit Sub
Else
MsgBox "FEHLER!"
End If
End Sub
"                DIE FUNCTIONEN!!!

" Menu Machen Visible

Private Function MenuMachenVisible()
OperationenMenu.Visible = Not OperationenMenu.Visible
ExtraMenu.Visible = Not ExtraMenu.Visible
MenuBearbeiten.Visible = Not MenuBearbeiten.Visible
End Function

                "ADD GESCHICHTE


Private Function AddGeschichte()
Geschichte.GeschichterList.AddItem "                Am   " & Date & "  In  " & Time & " sie haben bearbeiten:  "
Geschichte.GeschichterList.AddItem CommonDialog1.FileName
End Function

                " GROSS GLEICHER
Private Function GrossGleicher()
If Form1.Height <= 2001 Then
Exit Function
End If
Editor.Height = Form1.Height - 6 * LabelOpenedFileNameInformator.Height
Editor.Width = 9.9 / 10 * Form1.Width
    LabelOpenedFileNameInformator.Left = Editor.Left
    LabelOpenedFileNameInformator.Top = Editor.Top + Editor.Height
    LabelOpenedFileNameInformator.Width = Editor.Width

" button BIRNE LAMPOCHKA
ButtonSaveDoppelt.Move Editor.Left + Editor.Width - ButtonSaveDoppelt.Height, _
Editor.Top - (Form1.Height - Editor.Height) + 1.7 * ButtonSaveDoppelt.Height
End Function
Private Function BirnePruef()
If Len(Editor.Text) >= 7000 Or Max >= 1500 Then
ButtonSaveDoppelt.Move Editor.Left
Line1.X2 = Form1.Width * 5
End If
End Function


                " Menu Alle Visible Machen
Private Function MenuVisibleTrue()
OperationenMenu.Visible = True
ExtraMenu.Visible = True
MenuBearbeiten.Visible = True
MenuJug.Visible = True
End Function

   "                Form Resize

Private Sub Form_Resize()
GrossGleicher
End Sub
                "  DumKopf

Private Function DumKopfFunction()
If (Len(Editor.Text) - 41) < 0 Then
DumKopf = 2
"Exit Function
End If
Select Case DumKopf
Case Is = 0
Beep
Editor.Text = Editor.Text & "Die Intelligenzhilfe sind nicht offenbar "
Editor.SetFocus
Editor.SelStart = Len(Editor.Text) - 41
Editor.SelLength = Len(Editor.Text)
DumKopf = DumKopf + 1
"   fehler 2, upper Case
Case Is = 1
Beep
Editor.SelText = UCase$(Editor.SelText)
Editor.SetFocus
Editor.SelStart = Len(Editor.Text) - 41
Editor.SelLength = Len(Editor.Text)
DumKopf = DumKopf + 1
" fehler 3 show DumKopfForm
Case Is = 2
DumKopfForm.Show
DumKopf = 0
Case Else
Beep
MsgBox "Das Sub - Programm "" DUMKOPF "" ist nicht so Klueg wie Sie!"
DumKopf = 0
End Select
End Function