IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
ОтветитьСоздать новую тему
> Visual Basic 6.0, Один вопрос. В книгах банально не нашел.
Гость_Mamont_*
сообщение Feb 1 2007, 10:29
Сообщение #1





Guests






Необходимо написать программу. Все могу сам, но уперся в один вопрос, решение которого ни где не могу найти.

Требуется, чтобы программа не создавая никаких дополнительных файлов могла хранить некоторый объем текстовой информации.

Т.е. запускаешь прогу, записываешь пару строк, закрываешь прогу. Опять запускаешь прогу, и информация введенная ранее доступна для чтения и редактирования.
Вернуться к началу страницы
 
+Цитировать сообщение
LLeSS
сообщение Feb 1 2007, 10:41
Сообщение #2


N.N.G.
***

Группа: Posters
Сообщений: 292
Регистрация: 16.10.2005
Пользователь №: 103



Можно попробывать в реестр записать...если текст небольшой

Код
Все необходимые установки приложения должны регистрироваться для
текущего пользователя (User). Это отражено в названии ветви
\HKEY_CURRENT_USER. Далее следует ветвь для приложений: \SOFTWARE. На
следующем уровне обычно указывается фирма, но для приложений Visual Basic
предусмотрена собственная ветвь — \VB AND VBA PROGRAM SETTINGS, где
разработчик может сохранять установки приложения. При этом следует
исходить из логики старых INIkфайлов. Верхний уровень обозначает имя
приложения, при необходимости с номером версии. Ниже находятся секции,
содержащие записи, через имена которых можно осуществлять доступ к
соответствующим значениям.
Visual Basic предлагает четыре команды для работы с реестром.
Сохранение параметров
С помощью функции SaveSetting записи сохраняются в реестре.
[b]Save Setting[/b]
SaveSetting (Имя приложения, Секция, Ключ, Установка)
SaveSetting "BigMoney", "User", "Name", "Hugo"
В примере создана новая ветвь реестра с именем BigMoney. Под ней
находится ветвь User, а в ней запись Name со значением Hugo.
Обратите внимание, что структура должна соответствовать определенному
стандарту. Параметр Имя_приложения обычно содержит имя приложения. Для
Windows не имеет значения, что здесь будет записано, но пользователь,
просматривающий реестр, имеет шанс узнать, какой программе принадлежит
запись. Имя секции также должно быть значимым.
Считывание параметров
Для считывания установок служит функция GetSetting.
[b]GetSetting[/b]
GetSetting (Имя_приложения. Секция, Ключ [, По_уыолчанию])
Параметр По_умолчанию помогает узнать, успешно ли выполнено
считывание записи. Если считывание указанной области невозможно, функция
возвращает значение, присвоенное параметру По_умолчанию. Если же процесс
считывания завершился успешно, то в качестве возвращаемого значения
получаем сохраненную в реестре запись.
vReturn = GetSetting("BigMoney", "User", "Name", "Безуспешно")
Если считывание не может производиться, например изkза того, что секции
или записи вообще не существует, то в качестве возвращаемого значения
получаем "Безуспешно", т.е. параметр По_умолчанию.
[b]GetAllSettings[/b]
С помощью функции GetAllSetting считываются все записи из секции. При
этом возвращается массив типа Variant со всеми элементами указанной секции.
GetAllSettings (Имя_приложения, Секция}
Удаление параметров
При деинсталляции приложений следует особенно заботиться об удалении
ненужных установок в реестре, что предотвращает накопление
информационного мусора.
[b]DeleteSetting[/b]
Для этого в Visual Basic имеется оператор DeleteSetting, который удаляет
запись или всю секцию.
DeleteSetting (Имя приложения. Секция[, Ключ})
DeleteSetting "BigMoney","User"
В примере удаляется вся информация о пользователе в секции User. Для работы
с другими областями реестра следует использовать функции Windows API.



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

Сообщение отредактировал LLeSS - Feb 1 2007, 10:47
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_belka_*
сообщение Feb 1 2007, 12:14
Сообщение #3





Guests






ЕХЕ-файлы перезаписать сложно, таких мозгов наверно в чебах нетюю...
DLL спасет тебя, если не хочешь создавать свои файлы.
бугыг
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Mamont_*
сообщение Feb 1 2007, 12:14
Сообщение #4





Guests






LLeSS, пасиба, но необходимо, именно чтобы инфа была потом доступна и на другой машине sad.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_belka_*
сообщение Feb 1 2007, 12:15
Сообщение #5





Guests






БД рулят: научись работать с ними smile.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Mamont_*
сообщение Feb 1 2007, 12:20
Сообщение #6





Guests






Цитата(belka @ Feb 1 2007, 12:15) *
БД рулят: научись работать с ними smile.gif

Это не сложно, но необходимо чтобы никаких файлов небыло. А при работе с БД эта самая БД должна присутствовать. wink.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_belka_*
сообщение Feb 1 2007, 12:21
Сообщение #7





Guests






а БД у всех уже есть
так раз не сложно, как ты себе это представляешь?
Вернуться к началу страницы
 
+Цитировать сообщение
LLeSS
сообщение Feb 1 2007, 12:22
Сообщение #8


N.N.G.
***

Группа: Posters
Сообщений: 292
Регистрация: 16.10.2005
Пользователь №: 103



БД, это файлы.
Объясни что за софт. Может смогу помочь.

Сообщение отредактировал LLeSS - Feb 1 2007, 12:23
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Mamont_*
сообщение Feb 1 2007, 12:28
Сообщение #9





Guests






Цитата(belka @ Feb 1 2007, 12:21) *
а БД у всех уже есть
так раз не сложно, как ты себе это представляешь?

Самый примитивный пример программы, работающей с БД:


Код
Private Sub cmdAdd_Click()
    prompt$ = "Для добавления новой записи нажмите кнопку ОК"
    reply = MsgBox(prompt$, vbOKCancel, "Добавление записи")
    If reply = vbOK Then
        txtTitle.SetFocus
        datStudent.Recordset.AddNew
    End If
End Sub

Private Sub cmdDelete_Click()
    prompt$ = "Вы действительно хотите удалить этот курс ?"
    reply = MsgBox(prompt$, vbOKCancel, "Удаление записи")
    If reply = vbOK Then
        datStudent.Recordset.Delete
        datStudent.Recordset.MoveNext
    End If
End Sub

Private Sub cmdFind_Click()
    prompt$ = "Введите полное наименование курса."
    
    SearchStr$ = InputBox(prompt$, "Поиск курса")
    datStudent.Recordset.Index = "ClassName"
    datStudent.Recordset.Seek "=", SearchStr$
    If datStudent.Recordset.NoMatch Then
        datStudent.Recordset.MoveFirst
    End If
End Sub

Private Sub cmdQuit_Click()
    End
End Sub

Private Sub Form_Load()
prompt$ = _
    "Вы хотите создать резервную копию ваших данных?"
reply = MsgBox(prompt$, vbOKCancel, datStudent.DatabaseName)
If reply = vbOK Then
    FileNm$ = InputBox$ _
        ("Введите путь где будет создана резервная копия.")
    If FileNm$ <> "" Then _
        FileCopy datStudent.DatabaseName, FileNm$
End If

End Sub

Само собой это кусок программы

Сообщение отредактировал Mamont - Feb 1 2007, 12:30
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_belka_*
сообщение Feb 1 2007, 12:29
Сообщение #10





Guests






Цитата
БД, это файлы.

однако же они функцианируют как приложения. В этом случае уже сама база(типа профлиса)выступает как ось.
Гггг slow.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_belka_*
сообщение Feb 1 2007, 12:32
Сообщение #11





Guests






Цитата(Mamont @ Feb 1 2007, 12:28) *
Самый примитивный пример программы, работающей с БД:

ну за чем писать код? (кстати он вроде лисий, хотя ща все работают через скулы)
ты просто расскажи как ты представляешь как себя ехе-шная программа будет изменять?
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Mamont_*
сообщение Feb 1 2007, 12:33
Сообщение #12





Guests






Цитата(belka @ Feb 1 2007, 12:29) *
однако же они функцианируют как приложения. В этом случае уже сама база(типа профлиса)выступает как ось.
Гггг slow.gif

Требуется не просто исполняемый файл, а четка екзешник sad.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Mamont_*
сообщение Feb 1 2007, 12:36
Сообщение #13





Guests






Цитата(belka @ Feb 1 2007, 12:32) *
ну за чем писать код? (кстати он вроде лисий, хотя ща все работают через скулы)
ты просто расскажи как ты представляешь как себя ехе-шная программа будет изменять?

Еслиб я знал, спрашивать не стал бы...
Вернуться к началу страницы
 
+Цитировать сообщение
LLeSS
сообщение Feb 1 2007, 12:36
Сообщение #14


N.N.G.
***

Группа: Posters
Сообщений: 292
Регистрация: 16.10.2005
Пользователь №: 103



хм. править екзешник, к томуже запущенного приложения. имхо бред
что за прога?

Сообщение отредактировал LLeSS - Feb 1 2007, 12:37
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Mamont_*
сообщение Feb 1 2007, 12:46
Сообщение #15





Guests






Цитата(LLeSS @ Feb 1 2007, 12:36) *
хм. править екзешник, к томуже запущенного приложения. имхо бред
что за прога?

Что-то типа базы данных. Содержит короткие записи.
Сдается мне, что она просто куда-то ссылается. Сдается мне, зря я эту тему создал... Хотя сам разобрался.

Меня страшно развели! Прикол был в том, что программы ссылается на закодированный скрытый файл. А с машины на машину она, само-собой, переносилась в папке!

Прошу у всех прощения... blush.gif
Чес слово, сейчас пойду и надаю по рогам приколистам! mad.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_belka_*
сообщение Feb 1 2007, 12:46
Сообщение #16





Guests






ехе-шник можно перекомпилировать, представляю тебе небольшие шаги действий.
1) делаешь программу, однако же строго в начале прописываешь все переменные(!!!!!!!!!)
2) в программе следует предусматреть сохранение нового ехе-файла и его запуск с послудуещем завершением старой программы.

(детально:
а) программа содержит свой же код.
б) программа пишет код в ноый файл
в) программа запускает новый файл
г) программазакрывает себя после успешного запуска. бугыг)

3) открой в ассемблере скомпелированную прогу(ехе-файл).
4) найди блок с резервацией переменных(сам читай как это делать)
5) запиши этот нескомпелированный код в начальный код программы на бейсике
6) заново откомпелируй ее предусматривая пункт 2)
вот и всё.
п.с. блондинки рулят smile.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Mamont_*
сообщение Feb 1 2007, 12:49
Сообщение #17





Guests






Цитата(belka @ Feb 1 2007, 12:46) *
ехе-шник можно перекомпилировать, представляю тебе небольшие шаги действий.
1) делаешь программу, однако же строго в начале прописываешь все переменные(!!!!!!!!!)
2) в программе следует предусматреть сохранение нового ехе-файла и его запуск с послудуещем завершением старой программы.

(детально:
а) программа содержит свой же код.
б) программа пишет код в ноый файл
в) программа запускает новый файл
г) программазакрывает себя после успешного запуска. бугыг)

3) открой в ассемблере скомпелированную прогу(ехе-файл).
4) найди блок с резервацией переменных(сам читай как это делать)
5) запиши этот нескомпелированный код в начальный код программы на бейсике
6) заново откомпелируй ее предусматривая пункт 2)
вот и всё.
п.с. блондинки рулят smile.gif

Хм... Интересное решение... Обязательно попробую, спасибо. rolleyes.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Amp
сообщение Feb 1 2007, 12:51
Сообщение #18


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



Цитата(belka @ Feb 1 2007, 12:46) *
б) программа пишет код в ноый файл

Секции/заголовки и прочее сами ручками формировать будете? smile.gif) Аж полноценный компилятор с линковщиком получается

Сообщение отредактировал Amp - Feb 1 2007, 12:51


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_belka_*
сообщение Feb 1 2007, 12:54
Сообщение #19





Guests






Цитата(Amp @ Feb 1 2007, 12:51) *
Секции/заголовки и прочее сами ручками формировать будете? smile.gif) Аж полноценный компилятор с линковщиком получается

ну сама за место компилятора, умнегГГ.
не моим то способом так то ведь придется весь кампилятор в нее засунуть!!!!
чисто сработано! все так же как и ворд файлы изменяет, бугыг
Вернуться к началу страницы
 
+Цитировать сообщение
Amp
сообщение Feb 1 2007, 12:58
Сообщение #20


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



Цитата(belka @ Feb 1 2007, 12:54) *
ну сама за место компилятора, умнегГГ.
не моим то способом так то ведь придется весь кампилятор в нее засунуть!!!!
чисто сработано! все так же как и ворд файлы изменяет, бугыг

Вы понимаете о чем говорите? Я слабо догоняю smile.gif
"Открой в ассемблере скомпилированную прогу" - хорошо написано smile.gif)

Сообщение отредактировал Amp - Feb 1 2007, 12:59


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
Amp
сообщение Feb 1 2007, 13:29
Сообщение #21


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



а) программа содержит свой же код.
На то она и программа

б) программа пишет код в ноый файл
Для начала ей надо определить по каким адресам ее код вообще лежит.
Прям весь-весь ее код?

3) открой в ассемблере скомпелированную прогу(ехе-файл).
Ок, беру какой-нибудь OllyDebugger и открываю (если я правильно понял вашу мысль)

4) найди блок с резервацией переменных(сам читай как это делать)
Код и данные разделены в программах если что. (если только не использовались на ассемблере db и эти данные не выполняются как код)
Так что мне делать с данными? smile.gif

5) запиши этот нескомпелированный код в начальный код программы на бейсике
Типа захерачить дизассемблированный листинг в бейсковский код?
Вы в своем уме?
А может сразу в бинарный файл? А куда?
И срали мы на адресацию smile.gif

И еще один момент. Речь идет про PE или MZ файлы?

Внимание вопрос - что я делаю не так и что хотели получить?

Сообщение отредактировал Amp - Feb 1 2007, 13:33


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_belka_*
сообщение Feb 1 2007, 13:37
Сообщение #22





Guests






че ты на мне отрываешься? очень похоже на неудачника, чем на человека желающего помочь...
и понял ты все пркрасно и не надо дурку гнать про адресацию.
умничай с кем-нибудь другим, мудаГГГГ
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_belka_*
сообщение Feb 1 2007, 13:39
Сообщение #23





Guests






сам то понимаешь смысл про физическую и логическую адресации?
Вернуться к началу страницы
 
+Цитировать сообщение
Amp
сообщение Feb 1 2007, 13:48
Сообщение #24


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



Цитата(belka @ Feb 1 2007, 13:39) *
сам то понимаешь смысл про физическую и логическую адресации?

Главу про "Виртуальную память" у Таненбаума я читал, не беспокойтесь.
Только для программ я бы применил словосочетание математический или виртуальный адрес.

Цитата(belka @ Feb 1 2007, 13:37) *
че ты на мне отрываешься? очень похоже на неудачника, чем на человека желающего помочь...
и понял ты все пркрасно и не надо дурку гнать про адресацию.
умничай с кем-нибудь другим, мудаГГГГ

Оскорбления - дело последнее. Научитесь культуре общения, потом отписывайтесь на форуме

Сообщение отредактировал Amp - Feb 1 2007, 13:53


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_belka_*
сообщение Feb 1 2007, 13:51
Сообщение #25





Guests






еще пива выпей в честь победы, бугыг
Вернуться к началу страницы
 
+Цитировать сообщение
JoNy202
сообщение Feb 4 2007, 02:00
Сообщение #26


PAUK.NET.RU TEAM
Иконка группы

Группа: Admin
Сообщений: 1,672
Регистрация: 11.7.2005
Из: Чебоксары
Пользователь №: 1



с визуал бэйсиком не знаком, но приведу пример на Си, как я вывожу на экран изображение из базы

Код
// Создан поток в памяти
TMemoryStream *MS = new TMemoryStream();

// Пишем в него данные из базы,
// где stmt->ValueString(0) - это изображение, считаное fread'ом и сохраненное в blob
// stmt->ValueInt(1) - размер изображения в байтах
MS->Write(stmt->ValueString(0), stmt->ValueInt(1));
MS->Seek(0, soFromBeginning);

// Далее просто выводим на экран из потока
mainCreaterForm->FrameAnsvers1->QuestionImage->Picture->Bitmap->LoadFromStream(MS);

// Очищаем запрос и поток
stmt->~SQLiteStatement();
MS->Clear();


Сомневаюсь что бейсик на это способен smile.gif

В качестве БД использована sqlite.


--------------------
Вернуться к началу страницы
 
+Цитировать сообщение
Arturio
сообщение Nov 13 2007, 16:55
Сообщение #27


Пользователь
**

Группа: Posters
Сообщений: 69
Регистрация: 27.10.2007
Из: Новочебоксарск
Пользователь №: 10,895



Цитата(JoNy202 @ Feb 4 2007, 02:00) *
с визуал бэйсиком не знаком, но приведу пример на Си, как я вывожу на экран изображение из базы

Код
// Создан поток в памяти
TMemoryStream *MS = new TMemoryStream();

// Пишем в него данные из базы,
// где stmt->ValueString(0) - это изображение, считаное fread'ом и сохраненное в blob
// stmt->ValueInt(1) - размер изображения в байтах
MS->Write(stmt->ValueString(0), stmt->ValueInt(1));
MS->Seek(0, soFromBeginning);

// Далее просто выводим на экран из потока
mainCreaterForm->FrameAnsvers1->QuestionImage->Picture->Bitmap->LoadFromStream(MS);

// Очищаем запрос и поток
stmt->~SQLiteStatement();
MS->Clear();


Сомневаюсь что бейсик на это способен smile.gif

В качестве БД использована sqlite.

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


--------------------
Смерть стоит того, чтобы жить,
А любовь стоит того, чтобы ждать...
(В. Цой)
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Ireul_*
сообщение Nov 13 2007, 20:50
Сообщение #28





Guests






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

Делаешь себе для работы массивчик на три элемента или тупо три переменные, и ещё парочку чтобы знать в какой позиции массива/переменной храницца наибольшее из трёх и наименьшее из трёх.

Потом забиваешь в эти три достаточно большие начальные значения, чтобы было гарантированно больше возможных значений изначального массива, и поехали:

для каждого элемента одномерного массива:
1) Сравниваем со всеми тремя нашими. На предмет отсечения равных значений. Если хоть одному равно - переходим к следующему элементу, это число нам не подходит, так как мы ищем неповторяющиеся(неравные) значения.
2) Сравниваем с наибольшим из наших трёх. Если этот элемент больше - то переходим к следующему, это число нам не подходит, так как мы ищем наименьшие значения.
3) Заменяем наибольшее наше на текущий элемент, раз он оказался меньше в шаге 2) и не равным уже имеющимся в шаге 1).
4) Заново определяем какое из наших трёх теперь наибольшее и какое наименьшее - ведь новое число введённое может оказацца на любой из этих позиций, равно как и средним между незатронутыми двумя. 2-3 сравнения в зависимости от вашей сообразительности решат эту проблему.

После прохода этих 4-х шагов по всем элементам массива будем иметь три неповторяющихся наименьших.
Вернуться к началу страницы
 
+Цитировать сообщение

2 страниц V   1 2 >
ОтветитьСоздать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 22nd June 2025 - 02:27