Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 5

Как в VB работать с файлами (запись, чтение)

13.05.2012, 17:18. Показов 1442. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет , может кто помочь мне осуществить запись в моей игре , которая бы записывала все файлы в определенных формах , к примеру есть рюкзак и нажав на сохранение при следующем заходе в игру сохраняло все формы что есть в рюкзаке , люди добрые помогите ето сделать =3 , а то уже все волосы себе пересчитал
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.05.2012, 17:18
Ответы с готовыми решениями:

Как работать с INI файлами?
Подскажите как в VB записывать и считывать информацию с INI файла?

Как работать с Ini-файлами?
Где-то видел ссылку на то, как работать с ini-файлами. Подскажите пожалуйста или раскажите. Заранее благодарен.

Как работать с файлами ресурсов в VB6?
Как работать с файлами ресурсов. Добавляю в него JPEG-картинку, а вызвать её в Image не получается. Пишет, что нет объекта с таким ID :(...

11
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
13.05.2012, 21:04
А какого типа у тебя переменные для вещей из рюкзака ?? (что значит "формы" ??)
0
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 5
13.05.2012, 21:12  [ТС]
Цитата Сообщение от morgann55 Посмотреть сообщение
А какого типа у тебя переменные для вещей из рюкзака ?? (что значит "формы" ??)
Формы ето типа все отдельные окна , к примеру Form1 , Form2 и тд. мне надо как то сделать что бы либо программа записывала все изменения с начала её включения , либо что б программа делала отдельный файл в котором бы записывала все изменения , а потом загружала их
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
13.05.2012, 21:34
Цитата Сообщение от 3eBpA Посмотреть сообщение
Формы ето типа все отдельные окна , к примеру Form1 , Form2 и тд. мне надо как то сделать что бы либо программа записывала все изменения с начала её включения , либо что б программа делала отдельный файл в котором бы записывала все изменения , а потом загружала их
Ужас какой !!! Неужели нельзя сделать вещи в каком-нибудь массиве (например в Picture(n)) ?? И будет просто и перебирать и сохранять...
0
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 5
13.05.2012, 22:38  [ТС]
Цитата Сообщение от morgann55 Посмотреть сообщение
Ужас какой !!! Неужели нельзя сделать вещи в каком-нибудь массиве (например в Picture(n)) ?? И будет просто и перебирать и сохранять...
я конечно извиняюсь , но немогли бы вы мне обьяснить как сделать через масив , или написать код , что б я разбирал ?) (желателно 2) в знак благодарности впишу вас в автора моей игры =)
0
 Аватар для zink0000
258 / 107 / 26
Регистрация: 15.03.2012
Сообщений: 353
Записей в блоге: 35
14.05.2012, 13:37
Я так понял, Вам "инвентарь" для игры нужен.
Как вариант, можно организовать как строковую переменную
(только непечатные символы не использовать) - например так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
Attribute VB_Name = "Backpack"
Option Explicit
Option Base 0
 
' Inventory
' Инвентарь хранить в виде строковой переменной
'
' Глобальный динамический массив определяющий - лежит предмет в "рюкзаке" или нет
Global iItemInBox() As Integer
Global iBoxAllInUse(4) As Integer
'
Global iBoxKeyOnLeft As Integer
Global iBoxKeyOnRight As Integer
'
Global iItemBoxFirst As Integer
Global iItemBoxUse As Integer
' Глобальный строковый динамический массив определяющий - в какой ячейке, какой предмет лежит
Global sItemBoxPos As String
'
' Состояние предмета в инвенторе
Global iItemInUseX As Integer
Global iItemInUseY As Integer
 
Sub BoxKeyPos(iX As Integer, iY As Integer)
  If ((LOC_X + 127) <= iX And (LOC_X + 127 + 54) >= iX) And ((LOC_Y + 698) <= iY And (LOC_Y + 698 + 54) >= iY) Then
    ' Первая ячейка
    If True = iBoxAllInUse(0) Then
      frmMain.picMain.MousePointer = 99
      frmMain.picMain.MouseIcon = LoadPicture(sStartDirName + "RES\ICO\C-H.ICO")
    End If
  ElseIf ((LOC_X + 187) <= iX And (LOC_X + 187 + 54) >= iX) And ((LOC_Y + 698) <= iY And (LOC_Y + 698 + 54) >= iY) Then
    ' Вторая ячейка
    If True = iBoxAllInUse(1) Then
      frmMain.picMain.MousePointer = 99
      frmMain.picMain.MouseIcon = LoadPicture(sStartDirName + "RES\ICO\C-H.ICO")
    End If
  ElseIf ((LOC_X + 247) <= iX And (LOC_X + 247 + 54) >= iX) And ((LOC_Y + 698) <= iY And (LOC_Y + 698 + 54) >= iY) Then
    ' Третья ячейка
    If True = iBoxAllInUse(2) Then
      frmMain.picMain.MousePointer = 99
      frmMain.picMain.MouseIcon = LoadPicture(sStartDirName + "RES\ICO\C-H.ICO")
    End If
  ElseIf ((LOC_X + 307) <= iX And (LOC_X + 307 + 54) >= iX) And ((LOC_Y + 698) <= iY And (LOC_Y + 698 + 54) >= iY) Then
    ' Четвёртая ячейка
    If True = iBoxAllInUse(3) Then
      frmMain.picMain.MousePointer = 99
      frmMain.picMain.MouseIcon = LoadPicture(sStartDirName + "RES\ICO\C-H.ICO")
    End If
  End If
End Sub
 
Sub BoxKeyPosLeft(iX As Integer, iY As Integer)
  ' Промотка Инвенторя влево
  If ((LOC_X + 68) <= iX And (LOC_X + 68 + 48) >= iX) And ((LOC_Y + 703) <= iY And (LOC_Y + 703 + 45) >= iY) Then
    ' Промотка Инвенторя влево
    If True = iBoxKeyOnLeft Then
      frmMain.picMain.MousePointer = 99
      frmMain.picMain.MouseIcon = LoadPicture(sStartDirName + "RES\ICO\C-H.ICO")
    End If
  End If
End Sub
 
Sub BoxKeyPosRight(iX As Integer, iY As Integer)
  ' Промотка Инвенторя вправо
  If ((LOC_X + 369) <= iX And (LOC_X + 369 + 48) >= iX) And ((LOC_Y + 703) <= iY And (LOC_Y + 703 + 45) >= iY) Then
    ' Промотка Инвенторя вправо
    If True = iBoxKeyOnRight Then
      frmMain.picMain.MousePointer = 99
      frmMain.picMain.MouseIcon = LoadPicture(sStartDirName + "RES\ICO\C-H.ICO")
    End If
  End If
End Sub
 
Sub BoxKeySet(iX As Integer, iY As Integer)
  Call InventoryView
  If ((LOC_X + 127) <= iX And (LOC_X + 127 + 54) >= iX) And ((LOC_Y + 698) <= iY And (LOC_Y + 698 + 54) >= iY) Then
    ' Первая ячейка
    If True = iBoxAllInUse(0) Then
      iItemInUseX = LOC_X + 124
      iItemInUseY = LOC_Y + 694
      iItemBoxUse = CInt(Asc(Mid$(sItemBoxPos, iItemBoxFirst + 1 - 1, 1)))
    End If
  ElseIf ((LOC_X + 187) <= iX And (LOC_X + 187 + 54) >= iX) And ((LOC_Y + 698) <= iY And (LOC_Y + 698 + 54) >= iY) Then
    ' Вторая ячейка
    If True = iBoxAllInUse(1) Then
      iItemInUseX = LOC_X + 184
      iItemInUseY = LOC_Y + 694
      iItemBoxUse = CInt(Asc(Mid$(sItemBoxPos, iItemBoxFirst + 2 - 1, 1)))
    End If
  ElseIf ((LOC_X + 247) <= iX And (LOC_X + 247 + 54) >= iX) And ((LOC_Y + 698) <= iY And (LOC_Y + 698 + 54) >= iY) Then
    ' Третья ячейка
    If True = iBoxAllInUse(2) Then
      iItemInUseX = LOC_X + 244
      iItemInUseY = LOC_Y + 694
      iItemBoxUse = CInt(Asc(Mid$(sItemBoxPos, iItemBoxFirst + 3 - 1, 1)))
    End If
  ElseIf ((LOC_X + 307) <= iX And (LOC_X + 307 + 54) >= iX) And ((LOC_Y + 698) <= iY And (LOC_Y + 698 + 54) >= iY) Then
    ' Четвёртая ячейка
    If True = iBoxAllInUse(3) Then
      iItemInUseX = LOC_X + 304
      iItemInUseY = LOC_Y + 694
      iItemBoxUse = CInt(Asc(Mid$(sItemBoxPos, iItemBoxFirst + 4 - 1, 1)))
    End If
  End If
End Sub
 
Sub BoxKeySetLeft(iX As Integer, iY As Integer)
  ' Промотка Инвенторя влево
  If ((LOC_X + 68) <= iX And (LOC_X + 68 + 48) >= iX) And ((LOC_Y + 703) <= iY And (LOC_Y + 703 + 45) >= iY) Then
    ' Промотка Инвенторя влево
    If True = iBoxKeyOnLeft Then
      iItemBoxFirst = iItemBoxFirst - 1
      If 1 >= iItemBoxFirst Then
        iItemBoxFirst = 1
        iBoxKeyOnLeft = False
        Call BarBoxLNone
      End If
      iItemBoxUse = 0
      Call InventoryView
    End If
    If (Len(sItemBoxPos) - 3) > iItemBoxFirst Then
      iBoxKeyOnRight = True
      Call BarBoxROn
    End If
  End If
End Sub
 
Sub BoxKeySetRight(iX As Integer, iY As Integer)
  ' Промотка Инвенторя вправо
  If ((LOC_X + 369) <= iX And (LOC_X + 369 + 48) >= iX) And ((LOC_Y + 703) <= iY And (LOC_Y + 703 + 45) >= iY) Then
    ' Промотка Инвенторя вправо
    If True = iBoxKeyOnRight Then
      iItemBoxFirst = iItemBoxFirst + 1
      If (Len(sItemBoxPos) - 3) <= iItemBoxFirst Then
        iItemBoxFirst = Len(sItemBoxPos) - 3
        iBoxKeyOnRight = False
        Call BarBoxRNone
      End If
      iItemBoxUse = 0
      Call InventoryView
    End If
    If 1 < iItemBoxFirst Then
      iBoxKeyOnLeft = True
      Call BarBoxLOn
    End If
  End If
End Sub
 
 
Sub InUse(iX As Integer, iY As Integer)
  Static iRet As Integer
  Static lDstDC As Long
  Static lSrcDC As Long
  Static iX1 As Integer
  Static iY1 As Integer
  Static iW1 As Integer
  Static iH1 As Integer
  '
  iX1 = iX
  iY1 = iY
  iW1 = frmMain.picInUseSprite.Width
  iH1 = frmMain.picInUseSprite.Height
  lDstDC = frmMain.picMain.hDC
  lSrcDC = frmMain.picInUseSprite.hDC
  iRet = TransparentBlt(lDstDC, iX1, iY1, iW1, iH1, lSrcDC, 0, 0, iW1, iH1, RGB(0, 0, 0))
End Sub
 
Sub InventoryInit()
  ' Начальное количество предметов в инвентаре равно нулю
  ' А позиция первго прдмета равна 1
  iItemBoxFirst = 1
  ' Создание пустого массива или массива из одного элемента???!!!
  ReDim iItemBoxPos(0) As Integer
  ReDim iItemBoxPosTemp(0) As Integer
  '
  frmMain.picInUseSprite.BorderStyle = 0
  frmMain.picInUseSprite.AutoRedraw = True
  frmMain.picInUseSprite.AutoSize = True
  frmMain.picInUseSprite.Visible = False
  frmMain.picInUseSprite = LoadPicture(sStartDirName + "RES\SPR\IN-USE.BMP")
  '
  iBoxKeyOnLeft = False
  iBoxKeyOnRight = False
  Call BarBoxLNone
  Call BarBoxRNone
  sItemBoxPos = ""
End Sub
 
Sub InventoryView()
  Dim lDstDC As Long
  Dim lSrcDC As Long
  Dim iRet As Integer
  Dim iW As Integer
  Dim iH As Integer
  Dim iX As Integer
  Dim iY As Integer
  Dim iI As Integer
  Dim iI4 As Integer
  '
  'iItemBoxUse = 0
  For iI = 0 To 3 Step 1
    iBoxAllInUse(iI) = False
  Next iI
  '
  For iI = 0 To 3 Step 1
    lDstDC = frmMain.picMain.hDC
    lSrcDC = frmMain.picEmptyBox.hDC
    iW = frmMain.picEmptyBox.Width
    iH = frmMain.picEmptyBox.Height
    iX = LOC_X + 124 + (iI * 60)
    iY = LOC_Y + 695
    iRet = BitBlt(lDstDC, iX, iY, iW, iH, lSrcDC, 0, 0, SRCCOPY)
  Next iI
  '
  If Len(sItemBoxPos) Then
  End If
  iI4 = 0
  If 0 <> Len(sItemBoxPos) Then
    ' В инвенторе есть хотя бы один предмет!
    For iI = 1 To Len(sItemBoxPos) Step 1
      If 3 < iI4 Then
        Exit For
      ElseIf iItemBoxFirst <= iI Then
        iBoxAllInUse(iI4) = True
        lDstDC = frmMain.picMain.hDC
        lSrcDC = frmMain.picItemBox(CInt(Asc(Mid$(sItemBoxPos, iI, 1))) - 1).hDC
        iW = frmMain.picItemBox(CInt(Asc(Mid$(sItemBoxPos, iI, 1))) - 1).Width
        iH = frmMain.picItemBox(CInt(Asc(Mid$(sItemBoxPos, iI, 1))) - 1).Height
        iX = LOC_X + 124 + (iI4 * 60)
        iY = LOC_Y + 695
        iRet = BitBlt(lDstDC, iX, iY, iW, iH, lSrcDC, 0, 0, SRCCOPY)
        iI4 = iI4 + 1
      End If
    Next iI
  End If
  If True = iBoxKeyOnLeft Then
    Call BarBoxLOff
  End If
  If True = iBoxKeyOnRight Then
    Call BarBoxROff
  End If
End Sub
 
 
Sub ItemAdd(iItem As Integer)
  ' Добавить предмет в инвентарь
  If True = iItemInBox(iItem) Then
    sItemBoxPos = sItemBoxPos + Chr$(iItem)
    If 4 < Len(sItemBoxPos) Then
      iItemBoxFirst = Len(sItemBoxPos) - 3
      iBoxKeyOnLeft = True
      Call BarBoxLOn
      iBoxKeyOnRight = False
      Call BarBoxRNone
    End If
  End If
End Sub
 
Sub ItemAddNPC(iItem As Integer)
  ' Добавить предмет выданный NPC в инвентарь
  sItemBoxPos = sItemBoxPos + Chr$(iItem)
  If 4 < Len(sItemBoxPos) Then
    iItemBoxFirst = Len(sItemBoxPos) - 3
    iBoxKeyOnLeft = True
    Call BarBoxLOn
    iBoxKeyOnRight = False
    Call BarBoxRNone
  End If
End Sub
 
Sub ItemDel(iItem As Integer)
  ' Удалить предмет из инвентаря
  Dim sTA As String
  Dim sTB As String
  Dim iI As Integer
  Dim iChr As Integer
  '
  ' Перевод индексации с 0 на 1
  ' iItem = iItem + 1
  For iI = 1 To Len(sItemBoxPos) Step 1
    iChr = CInt(Asc(Mid$(sItemBoxPos, iI, 1)))
    If iItem = iChr Then
      sTA = Left$(sItemBoxPos, iI - 1)
      sTB = Right$(sItemBoxPos, Len(sItemBoxPos) - iI)
      sItemBoxPos = sTA + sTB
      iItemBoxUse = 0
      Exit For
    End If
  Next iI
End Sub
В окне можно видеть четыре предмета, если больше - работает прокрутка.

Строку в файл сохранить - не проблема.

Хотя лучше бы взглянуть, Ваш модуль "рюкзака",
а то по Вашему описанию не очень ясно,
что же именно Вам необходимо.
Если не к спеху - выставляйте - покапаюсь,
может подскажу что...
1
 Аватар для zink0000
258 / 107 / 26
Регистрация: 15.03.2012
Сообщений: 353
Записей в блоге: 35
16.05.2012, 09:28
Через личку файл не отправляется,
так что ловите здесь:
TEST0007.zip
В примере сохраняются в файл позиция, размер и цвет формы,
при последующей загрузке всё восстанавливается
как было в момент закрытия программы.

Принцип, я думаю, ясен.

Если понадобятся какие-либо пояснения или комментарии - пишите в личку.
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,330
16.05.2012, 10:13
Цитата Сообщение от zink0000 Посмотреть сообщение
позиция, размер и цвет формы,
кр
2940
3600
9885
5730
255

зел
2940
3600
9885
5730
65280

син
2940
3600
9885
5730
16711680

и где тут что?
других способов нет? а то ини файл удаляем и всё белым бело
0
 Аватар для zink0000
258 / 107 / 26
Регистрация: 15.03.2012
Сообщений: 353
Записей в блоге: 35
16.05.2012, 10:37
Ципихович Эндрю

Visual Basic
1
2
3
4
5
frmMain.Top
frmMain.Left
frmMain.Height
frmMain.Width
frmMain.BackColor
Можно прямо в INI-файле закомментировать,
но в данном случае пример элементарный,
зачем такой огород-то городить.

Добавлено через 2 минуты
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
а то ини файл удаляем и всё белым бело
А Вы в любой игрушке файл сохранения удалите,
хм... тоже "белым-бело" будет, но зачем удалять-то?
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,330
16.05.2012, 10:37
игрушки здесь не при чём
нужны инструменты
0
 Аватар для zink0000
258 / 107 / 26
Регистрация: 15.03.2012
Сообщений: 353
Записей в блоге: 35
17.05.2012, 08:23
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
игрушки здесь не при чём
нужны инструменты
Хм... а чем Вас подобное сохранение в качестве инструмента не устраивает?..

В конце-концов, если есть такое желание, напишите лучше.
0
 Аватар для zink0000
258 / 107 / 26
Регистрация: 15.03.2012
Сообщений: 353
Записей в блоге: 35
17.05.2012, 08:54
3eBpA, надеюсь такой вариант Вас устроит?
TEST0008.zip
Загрузка BMP, JPG,
сохранение только BMP.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2012, 08:54
Помогаю со студенческими работами здесь

Как работать с файлами dbf не используя стандартные средства
Как-то раз я видел ActiveX, который позволяет читать, писать, создавать БД не используя средств VB для работы с БД. Но сейчас, когда...

Как работать с файлами *.mht с точки зрения VB6??
Как работать с файлами *.mht с точки зрения VB6?? Всем спасибо

Как работать с файлами - чтение, запись
Помогите пожалуйста! Можете кинуть силки на какиета книги, или так дать пример работи функции винапі с текстовими файлами, ну там...

Как работать с файлами в JavaSript(запись,удаление,чтение)?
Как работать с файлами в JavaSript(запись,удаление,чтение)?

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru