purebasic.info

PureBasic forum
Текущее время: Пн ноя 19, 2018 12:30 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Презентер
СообщениеДобавлено: Пн июл 07, 2008 9:19 am 
Не в сети
GameC@Soft
Аватар пользователя

Зарегистрирован: Сб сен 22, 2007 12:45 pm
Сообщений: 1084
Откуда: Я из лесу вышел, и сразу зашел, в босоножках дырявых и взлядом ночным.
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Всем привет)))

Написал программку, для просмотра фотографий на вашем ПК)))

Управление внутри программы

Код:
1
2
3
4
клавиша "1" - запустить\остановить презентацию.
LMB - показать выбранное фото
RMB - вернуться к выбору
клавиша "Escape" - выход



ВНИМАНИЕ

Всвязи с непонятными обстоятельствовами, на некоторых фотографиях вылетает, что есть не понятно.... и пишет что память инвалид...
Цитата:
Invalid Memory Acsses
. При том матюгается именно при загрузки спрайта....

Кто поможет ????

Использовался 4.0 без каких либо библиотек...

Код программы:

Код:
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
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
InitSprite()
InitSprite3D()
InitMouse()
InitKeyboard()
UseJPEGImageDecoder()
 
 
Enumeration
  #Window
  #path_s
  #path
  #speed
  #Text_1
  #ws
  #hs
  #cs
  #Start
  #Text_2
  #Help
EndEnumeration
Global path.s
 
OpenWindow(#Window, 299, 291, 401, 121, "Презентационная станция изображений",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      CreateGadgetList(WindowID(#Window))
      StringGadget(#path_s, 10, 10, 275, 20, "")
      ButtonGadget(#path, 290, 10, 105, 20, "Путь")
      TrackBarGadget(#speed, 10, 50, 270, 15,1, 6)
      TextGadget(#Text_1, 120, 65, 60, 15, " Скорость")
      StringGadget(#ws, 15, 90, 50, 20, "1024")
      StringGadget(#hs, 70, 90, 50, 20, "768")
      StringGadget(#cs, 125, 90, 40, 20, "32")
      ButtonGadget(#Start, 295, 90, 95, 20, "Запустить")
      TextGadget(#Text_2, 175, 95, 100, 20, "Параметры экрана")
      ButtonGadget(#Help, 290, 45, 105, 25, "Помощь")
Procedure main()
Repeat
event=WaitWindowEvent(100)
 
    If event=#PB_Event_CloseWindow
    End
    EndIf
 
If event=#PB_Event_Gadget
 
Select EventGadget()
 
    Case #path
    ppp.s=PathRequester("Открыть файлы с графикой","")
    SetGadgetText(#path_s,ppp)
    path=GetGadgetText(#path_s)
   
    Case #help
    MessageRequester("Помощь","Для автоматической прокрутки нажмите 1")
   
    Case #start
    path=GetGadgetText(#path_s)
    If path
    start=1
    Else
    MessageRequester("Ошибка","Укажите правильный путь")
    EndIf
   
 
   
EndSelect
    If event=#PB_Event_CloseWindow
    End
    EndIf
EndIf
 
Until start=1
EndProcedure
 
main()
 
path=GetGadgetText(#path_s)
 
 
Global ws=Val(GetGadgetText(#ws)),hs=Val(GetGadgetText(#hs)),cs=Val(GetGadgetText(#cs)),speed=GetGadgetState(#speed)
 
OpenScreen(ws,hs,cs,"Презентер")
 
Structure pic
 
    id.l
 
    x.f
    y.f
    sx.f
    bx.f
   
    Sprite.d
   
    SpriteM.d
   
    sp3d.d
   
    path.s
   
    coment.s
   
    free.l
    load.l
 
EndStructure
 
 
 
Global NewList pic.pic(),xp,mode,selectpic,modex.f,element,ddd,opticacy.f
 
 
Procedure DebugXY(x,y,text.s)
 
StartDrawing(ScreenOutput())
    DrawingMode(1)
    DrawText(x,y,text,RGB(255,255,255))
StopDrawing()
 
EndProcedure
 
Procedure addpic(path.s)
AddElement(pic())
pic()\path=path
xp+368+30
pic()\x+xp
EndProcedure
 
Procedure picall()
 
ResetList(pic())
While NextElement(pic())
 
 
  pic()\sx+MouseDeltaX()
 
  If modex=1
  pic()\sx=-speed
  EndIf
  If modex=2
  pic()\sx=speed
  EndIf
 
  If modex>0
      If pic()\x<200 And pic()\x<150 And ListIndex(pic())+1=CountList(pic())
      modex=2
      EndIf
     
      If pic()\x<900 And pic()\x>840 And ListIndex(pic())=1
      modex=1
      EndIf
  EndIf
 
 
  If pic()\sx>6
  pic()\sx=6
  EndIf
  If pic()\sx<-6
  pic()\sx=-6
  EndIf
        If pic()\sx<0
        pic()\sx+0.1
        EndIf
        If pic()\sx>0
        pic()\sx-0.1
        EndIf
  pic()\x+pic()\sx
 
  If pic()\x>-ws And pic()\x<ws*2 ; определение в экране или нет
 
 
      If pic()\load=0 ; если изображение не загрузилось загружаем его и обрабатываем    
        pic()\sprite=LoadSprite(#PB_Any,pic()\path,#PB_Sprite_Texture) ; загружаем спрайт        pic()\load=1              
        pic()\sp3d=CreateSprite3D(#PB_Any,pic()\sprite) ; делаем 3d спарайт
       
        If SpriteWidth(pic()\sprite)>368
        w=368
        Else
        w=SpriteWidth(pic()\sprite)
        EndIf
        If SpriteHeight(pic()\sprite)>256
        h=256
        Else
        h=SpriteHeight(pic()\sprite)
        EndIf
       
        ZoomSprite3D(pic()\sp3d,w,h)
        pic()\load=1
        pic()\coment="Длина: "+Str(SpriteWidth(pic()\sprite))+"   Высота: "+Str(SpriteHeight(pic()\sprite))+"  Размер: "+Str(FileSize(pic()\path)/1024)+" кБ" ; спецификация  
      EndIf
     
      If pic()\x>100 And pic()\x<500
          StartDrawing(ScreenOutput())
            Box(pic()\x-4,hs-400-4,376,264,RGB(0,255,0))
            Box(pic()\x,hs-400,368,256,RGB(0,0,0))
          StopDrawing()
         
          If MouseButton(1) ; если нажать на левую мыши, то можно просмотреть на всю фото
          mode=1
            If mode=1
            selectpic=pic()\sp3d
            EndIf
          EndIf
         
      EndIf
     
      Start3D()
        DisplaySprite3D(pic()\sp3d,pic()\x,hs-400)
        Debugxy(pic()\x+30,hs-50,pic()\coment)
      Stop3D()
pic()\bx=pic()\x
  Else
 
  If pic()\load=1
    ob.s+" . "
    debugxy(0,0,"Обработка "+ob)
    FreeSprite(pic()\sprite)
    FreeSprite3D(pic()\sp3d)
    pic()\load=0
    pic()\free=0
  EndIf
           
  EndIf
 
If pic()\x<-ws*2
If pic()\free=0 And pic()\load=1
pic()\free=1  
EndIf
EndIf
 
Wend
 
EndProcedure
 
Procedure picis(pic.l)
 
ResetList(pic())
While NextElement(pic())
 
If pic()\sp3d=pic
 
  If SpriteWidth(pic()\sprite)>ws
  w=ws
  Else
  w=SpriteWidth(pic()\sprite)
  EndIf
 
  If SpriteHeight(pic()\sprite)>hs
  h=hs
  Else
  h=SpriteHeight(pic()\sprite)
  EndIf
 
  ZoomSprite3D(pic()\sp3d,w,h)
 
  If opticacy<255
  opticacy+0.5
  EndIf
 
  Start3D()
    DisplaySprite3D(pic()\sp3d,ws/2-w/2,hs/2-h/2,opticacy)
  Stop3D()
 
If MouseButton(2)
mode=0
opticacy=0
 
        If SpriteWidth(pic()\sprite)>368
        w=368
        Else
        w=SpriteWidth(pic()\sprite)
        EndIf
        If SpriteHeight(pic()\sprite)>256
        h=256
        Else
        h=SpriteHeight(pic()\sprite)
        EndIf
       
        ZoomSprite3D(pic()\sp3d,w,h)
EndIf
Debugxy(0,hs-50,pic()\coment)
EndIf
 
Wend
 
EndProcedure
 
If ExamineDirectory(0,path.s, "*.jpg")  
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
      addpic(path+DirectoryEntryName(0))
      EndIf
    Wend
    FinishDirectory(0)
EndIf
 
If ExamineDirectory(0,path.s, "*.bmp")  
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
      addpic(path+DirectoryEntryName(0))
      EndIf
    Wend
    FinishDirectory(0)
EndIf
 
Repeat
If IsScreenActive()>0
 
FlipBuffers()
ClearScreen(0)
ExamineMouse()
ExamineKeyboard()
 
If KeyboardReleased(#PB_Key_1)
modex+1
If modex>1
modex=0
EndIf
EndIf
 
If mode=0
picall()
debugxy(0,hs-20,"Всего изображений: "+Str(CountList(pic())))
EndIf
If mode=1
picis(selectpic)
EndIf
 
EndIf
 
Until KeyboardPushed(#PB_Key_Escape)
 



И EXE

_________________
"Самый большой глюк в PureBasic - это твоя голова...." (с) Артем
Мой сайт: http://feelzone.org.ua/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 07, 2008 10:47 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Артём писал(а):
Всвязи с непонятными обстоятельствовами, на некоторых фотографиях вылетает, что есть не понятно.... и пишет что память инвалид...
А на какой именно строке?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 07, 2008 12:47 pm 
Не в сети
GameC@Soft
Аватар пользователя

Зарегистрирован: Сб сен 22, 2007 12:45 pm
Сообщений: 1084
Откуда: Я из лесу вышел, и сразу зашел, в босоножках дырявых и взлядом ночным.
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Цитата:
if pic()\load=0 ; если изображение не загрузилось загружаем его и обрабатываем
pic()\sprite=LoadSprite(#PB_Any,pic()\path,#PB_Sprite_Texture) ; загружаем спрайт


вот на этой...

_________________
"Самый большой глюк в PureBasic - это твоя голова...." (с) Артем
Мой сайт: http://feelzone.org.ua/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 07, 2008 2:01 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Попробуй сделать слеующее:
В настройках Пурика, в разделе "Отладчик" сними галку "Убить программу после ошибки".
Далее, запускай прогу и жди пока появится эта ошибка.
Как только она появится, в меню "Отладчик" выбери пункт "Переменные" и посмотри что в pic()\path, может именно тут собака порылась, т. е. там хранится некорректный путь к файлу.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 07, 2008 3:48 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6398
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
А у меня нормально, без ошибок. Ну, есть конечно недочёты - к примеру, большие картинки ( у меня есть 6048 x 2048) не показывает, просто белый лист. В пред просмотре нарушены пропорции - надо различать, когда высота больше ширины! Да и вообще, не надо тупо все картинки приводить к одному размеру, а вводить коэффициент пропорциональности высоты к длине. Настройку на экран сделать автоматом -
Код:
1
2
3
 
StringGadget(#ws, 15, 90, 50, 20, Str(GetSystemMetrics_(#SM_CXSCREEN)))
      StringGadget(#hs, 70, 90, 50, 20, Str(GetSystemMetrics_(#SM_CYSCREEN)))



И раздражает медленное (прозрачность) появление картинки - лучше сделать опционально, на любителя.

Ну пока всё....

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 08, 2008 9:02 am 
Не в сети
GameC@Soft
Аватар пользователя

Зарегистрирован: Сб сен 22, 2007 12:45 pm
Сообщений: 1084
Откуда: Я из лесу вышел, и сразу зашел, в босоножках дырявых и взлядом ночным.
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Ок, учтем и доделаем

_________________
"Самый большой глюк в PureBasic - это твоя голова...." (с) Артем
Мой сайт: http://feelzone.org.ua/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 08, 2008 9:05 am 
Не в сети
GameC@Soft
Аватар пользователя

Зарегистрирован: Сб сен 22, 2007 12:45 pm
Сообщений: 1084
Откуда: Я из лесу вышел, и сразу зашел, в босоножках дырявых и взлядом ночным.
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
по поводу вылетания....

Этот факт замечен при определенных фотографиях...

_________________
"Самый большой глюк в PureBasic - это твоя голова...." (с) Артем
Мой сайт: http://feelzone.org.ua/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 08, 2008 10:15 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6398
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
А почему вообще за основу выбран экранный вариант? Оконное приложение ИМХО предпочтительней в плане управляемости и совместимости. В смысле, можно и свернуть, и другое приложение запустить параллельно. Ещё дополнение - если использовать библиотеку EC_ImagePluginOLE а именно UseEC_OLEImageDecoder(), то можно значительно расширить список поддерживаемых графических файлов.
А ещё лучше полная декларация

Код:
1
2
3
4
5
6
7
UsePNGImageDecoder()
UseEC_PPMImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
UseEC_OLEImageDecoder()
UseEC_IFFImageDecoder()
 


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 08, 2008 1:08 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
kvitaliy писал(а):
А почему вообще за основу выбран экранный вариант
У меня тоже появлялась подобная мылсь.
Не озвучивал её только потому, что прога уже написанна и возможно Артёму проще писать под экранный режим чем под окнонный.
По себе знаю.
Я в экраннных функциях "ни бэ ни иэ", т. е. никогда с ними не работал и даже не предполагаю, а вот Артём почти все проги на них пишет, значит ему так проще. :)
Хотя окна в данном случае предпочтительней.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июл 09, 2008 9:17 am 
Не в сети
GameC@Soft
Аватар пользователя

Зарегистрирован: Сб сен 22, 2007 12:45 pm
Сообщений: 1084
Откуда: Я из лесу вышел, и сразу зашел, в босоножках дырявых и взлядом ночным.
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Да. мне проще экранные проги писать, хотя есть попытка написать оконную... Может что и выйдет....
Программа вообще была разработано чисто под меня... У меня не лавно было день рождения, и друзья подарили планшет, я нарисовал мног разных фотографий, и захотел сделать для себя альбом, вот и написал под свои нужды программу, а потом решил сюда выложить, и узнать из за чего вылетает...

_________________
"Самый большой глюк в PureBasic - это твоя голова...." (с) Артем
Мой сайт: http://feelzone.org.ua/


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB