purebasic.info

PureBasic forum
Текущее время: Ср ноя 21, 2018 9:14 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Обоочка для E_Book
СообщениеДобавлено: Вс июн 03, 2007 10:46 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6399
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Проба пера - пытаюсь написать свою электронную книгу. Ну не в смысле книгу, как произведение, а в смысле как оболочку к некоему тексту, из которой его будет трудно извлечь и украсть.
Вот что получилось.
Код:
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
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
 
; Пример создания электронной книги. Упор делался на максимальное затруднение украсть текст этой книги.
; kvitaliy 2007 г. PB v4.01
; В простейшем варианте после компиляции файл должен быть упакован программой типа FSG, WinUnpack и т.п.
; Что обеспечит защиту от честных читателей. А реально надо исходный текстовый файл шифровать, а перед выводом на экран
; расшифровывать. ну хотя бы простейшей процедурой XOR:
 
 
 
; Procedure XorWithKey (sText.l, LenText.l, sKey.l, LenKey.l)
;   XOr ecx, ecx
;   MOV esi, sText
;   MOV edi, sKey
;   MOV edx, LenText
;   MOV ebp, LenKey
;   ADD ebp, esi
;   xornextbyte:
;   MOV al, [esi]
;   MOV bl, [edi]
;   XOr al, bl
;   MOV [esi], al
;   INC ecx
;   INC esi
;   INC edi
;   CMP esi, ebp
;   JGE l_xorcomplete
;   CMP ecx, edx
;   JGE l_xornextround
;   JMP l_xornextbyte
;   xornextround:
;   XOr ecx, ecx
;   SUB edi, edx
;   JMP l_xornextbyte
;   xorcomplete:
; EndProcedure
 
;Это в перспективе...  
 
 
;- Инициализация переменных и служб
;{
Global Strg.l
Global i.l
Global First.l
Global Ende.l
Global stranica.l
Global mejstrok.l
Global FullText.s
Global Stranic.l
;Dim TextStr.s(1000)
InitSprite()
InitKeyboard()
InitMouse()
;} Конец инициализации
 
OpenScreen(800, 600,32,"") ; Экран
LoadFont(1,"Arial",12,#PB_Font_Bold|#PB_Font_HighQuality) ; Шрифт
CatchSprite(0, ?curs,#PB_Sprite_Texture)
CatchSprite(1, ?exit,#PB_Sprite_Texture)
CatchSprite(2, ?backward,#PB_Sprite_Texture)
CatchSprite(3, ?forward,#PB_Sprite_Texture)
CatchSprite(4, ?raskl,#PB_Sprite_Texture)
CatchSprite(5, ?favor_add,#PB_Sprite_Texture)
CatchSprite(6, ?favor,#PB_Sprite_Texture)
 
;ClearScreen(0,0,255)
 
;- Ищем временную папку и пишем туда текстовый файл
;{
Path.s = Space (1000)
GetTempPath_(1000,@Path)
 
 
 
If CreateFile(0,Path+"Text.txt")  
     
       
          L1= ?curs - ?abouttext    ;
         WriteData(0,?abouttext,L1) ;
   
    CloseFile(0)                
  Else
    End; Не вышло, значит не судьба!
  EndIf
  ;}
  ;-Считаем, сколько строк
  ;{
  If ReadFile(0,Path+"Text.txt")   ;
    While Eof(0) = 0
      a.s= ReadString(0)
      Strg+1    
    Wend
    CloseFile(0)              ;
  Else
   
  EndIf
  ;}  
  ;- Выделем массив и пишем в него строки
  ;{
  Global Dim TextStr.s(Strg)
  Strg.l=0
 If ReadFile(0,Path+"Text.txt")   ;
    While Eof(0) = 0
      TextStr.s(Strg)= ReadString(0)
      Strg+1    
    Wend
    CloseFile(0)              ;
  Else
   
  EndIf
Result = DeleteFile(Path+"Text.txt"); удаляем исходный файл
;}
 
;-Параметры отображения текста на экране
First=1 ; первая строчка
Ende=25 ; последняя строчка
stranica=1; первая страница
mejstrok=20 ; расстояние между строк
 
If Ende >= Strg
   Ende=Strg
   Else
   Stranic=(Strg/Ende)+1
   Global Dim Zakladka(Stranic)
   Global Dim OpisZakl.s(Stranic)
EndIf
Procedure List_Forvard()
If i<Strg
          First=Ende
          If Ende+25<Strg
           Ende=Ende+25
           Else
           Ende=Ende+(Strg-(25*stranica)-1)
          EndIf
          stranica+1
         
  Else
      ;Beep_(500,50)
      StartDrawing(ScreenOutput())
          DrawText(360,z,"КОНЕЦ ТЕКСТА")
          Sleep_(500)
          StopDrawing()
 EndIf
 
EndProcedure
Procedure List_backward()
If stranica>1
          Ende=First
          If First-25>=1
              First=First-25
              stranica-1
                Else
              First=1
              Ende=25
              stranica-1
          EndIf
      Else
      ;Beep_(1000,50)
      StartDrawing(ScreenOutput())
          DrawText(360,z,"НАЧАЛО ТЕКСТА")
          Sleep_(500)
          StopDrawing()
     EndIf
EndProcedure
Procedure Pishem()
 
FullText=""
 Repeat
 
;-перекл клаву
HKL = GetKeyboardLayout_(0)
If HKL = 67699721
    Caption$ = "EN"
Else
    Caption$ = "RU"
EndIf
 
   ExamineMouse()
   ExamineKeyboard()
   FlipBuffers()
   ClearScreen(RGB(0,0,0))
   FullText + KeyboardInkey()  ; Add the new text to the current one (if any)
   
    If KeyboardReleased(#PB_Key_Back)  
      FullText = Left(FullText, Len(FullText)-1)
    EndIf
   
    ; Display the result
    ;
      StartDrawing(ScreenOutput())
      DrawingMode(1)
      FrontColor(RGB(255,255,255))
      DrawText(10,10,"Краткое описание:_")
      DrawText(150,10,FullText)
      DrawText(750,575,Caption$) ; раскладка
      StopDrawing()
      DisplayTransparentSprite(4,740,560 ); расклад
      DisplayTransparentSprite(0, MouseX(), MouseY())
      If SpriteCollision(0, MouseX(), MouseY(), 4,740,560)
     If  MouseButton(1)
       Beep_(100,5)
       Sleep_(200)
       ActivateKeyboardLayout_(#HKL_NEXT, 0)
     EndIf  
EndIf
      Until KeyboardPushed(#PB_Key_Return)
      OpisZakl.s(stranica)=FullText
EndProcedure
 
Repeat
   ExamineKeyboard()
   FlipBuffers()
   ClearScreen(RGB(0,0,255)) ; цвет экрана
   ExamineMouse()
   
 
   StartDrawing(ScreenOutput())
    DrawingMode(1)
    DrawingFont(FontID(1))
    FrontColor(RGB(255,255,255)); цвет букв
    z=40
    For i=First To Ende
    DrawText(10,z,TextStr.s(i)); выводим строки на экран
    z=z+mejstrok                ; Расстояние между строк
    Next i
    DrawText(380,570,Str(stranica)+" стр. из " + Str(Stranic)) ; нумеруем страницы
    DrawText(750,575,Caption$) ; раскладка
    StopDrawing()
 
  ;-Листаем вперёд
  ;{
  If KeyboardReleased(#PB_Key_PageDown) Or KeyboardReleased(#PB_Key_Pad3) Or KeyboardReleased( #PB_Key_Right)
  List_Forvard()
  EndIf
  ;}
  ;- Листаем назад
 
  ;{
  If KeyboardReleased(#PB_Key_PageUp) Or KeyboardReleased(#PB_Key_Pad9) Or KeyboardReleased(#PB_Key_Left)
  List_backward()
  EndIf
    ;}
   ;- Картинки на экране
;{
 
DisplayTransparentSprite(1,750,5 ); Выход
DisplayTransparentSprite(2,5,570 ); назад
DisplayTransparentSprite(3,650,570 );Вперед
DisplayTransparentSprite(4,740,560 ); расклад
DisplayTransparentSprite(5,10,10 ); Закладку добавить
 
 
;- Обрабатываем закладки
For j = 1 To Stranic
If OpisZakl.s(j)<>""
x+30
DisplayTransparentSprite(6,x,10 ); Закладкa на экран
If SpriteCollision(0, MouseX(), MouseY(), 6, x, 10)
    StartDrawing(ScreenOutput())
    DrawingMode(1)
    DrawingFont(FontID(1))
    FrontColor(RGB(255,0,0))
    DrawText(x,5,OpisZakl.s(j)); Вывод закладок на экран
    StopDrawing()
    If  MouseButton(1)
        Beep_(50,5)
        Sleep_(200)
       Ende = j*25
       First=Ende - 25
       stranica=j
    EndIf
EndIf
EndIf
Next j
x=30
DisplayTransparentSprite(0, MouseX(), MouseY())
;}
If SpriteCollision(0, MouseX(), MouseY(), 1, 770, 5)
    StartDrawing(ScreenOutput())
    DrawingMode(1)
    DrawingFont(FontID(1))
    FrontColor(RGB(255,0,0))
    DrawText(700,5,"Выход")
    StopDrawing()
    If  MouseButton(1)
    ClearClipboard()
        End
    EndIf
EndIf
;{
;-перекл клаву
HKL = GetKeyboardLayout_(0)
If HKL = 67699721
    Caption$ = "EN"
Else
    Caption$ = "RU"
EndIf
;}
 
If SpriteCollision(0, MouseX(), MouseY(), 2, 5, 570)
   If  MouseButton(1)
     Beep_(50,5)
     Sleep_(200)
     List_backward()
   EndIf
 EndIf
If SpriteCollision(0, MouseX(), MouseY(), 3, 650, 570)
     If  MouseButton(1)
       Beep_(50,5)
       Sleep_(200)
       List_Forvard()
     EndIf  
EndIf
If SpriteCollision(0, MouseX(), MouseY(), 4,740,560)
     If  MouseButton(1)
       Beep_(100,5)
       Sleep_(200)
       ActivateKeyboardLayout_(#HKL_NEXT, 0)
     EndIf  
EndIf
;-Добавляем закладку
;{
If SpriteCollision(0, MouseX(), MouseY(), 5,10,10)
    StartDrawing(ScreenOutput())
    DrawingMode(1)
    DrawingFont(FontID(1))
    FrontColor(RGB(255,0,0))
    DrawText(40,10,"Добавить закладку на "+Str(stranica)+" стр.")
    StopDrawing()
     If  MouseButton(1)
       Beep_(100,5)
       Sleep_(200)
      Pishem()
     EndIf  
EndIf
;}
;- Если была попытка снять копию экрана, то очищаем буфер обмена.( наивно,конечно, но для неискушенных поможет)
If KeyboardReleased(#PB_Key_All)
ClearClipboard()
EndIf
 
Delay(1)
Until KeyboardPushed(1)
ClearClipboard();очищаем буфер обмена на всякий случай...
End
 
DataSection
abouttext:
  IncludeBinary "proba.txt"; Текст должен быть подготовлен специально - в Win кодировке, длина строки содержать ~ 80-83 символа
  curs:
 IncludeBinary "cursor1.bmp"
  exit:
 IncludeBinary "exit.bmp"
  backward:
 IncludeBinary "skip_backward.bmp"
  forward:
 IncludeBinary "skip_forward.bmp"
  raskl:
 IncludeBinary "window1.bmp"
  favor_add:
 IncludeBinary "favor_add.bmp"
  favor:
 IncludeBinary "favor.bmp"
 
EndDataSection  



Полная версия с нужными ресурсами в ZIP архиве.
http://pbasic.spb.ru/files/up/e_book.zip


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 441 раз.
Квитали, у меня твоя прога неработает!
При её запуске, винда выбрасывает такое окошко: Инструкция по адресу "0х77f5674b" обратилась к памяти по адресу "0хfffffff8". Память не может быть "read". :(
И что это может значить??


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

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6399
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
А ты сам компиллируешь или готовый запускаешь?


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 441 раз.
Цитата:
А ты сам компиллируешь или готовый запускаешь?

В одном и в другом случае появляется это сообщение. :(


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

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6399
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
А у тебя сколько оперативки в компе? Может просто мало?...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июн 03, 2007 3:21 pm 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Изумительно.
Я текст не смог украсть.
Хотел сфотографировать и в FineReader - не смог.
Скриншот не получается.
Здорово.


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 441 раз.
Цитата:
А у тебя сколько оперативки в компе?

Может и мало. Установлено 192Мб. Ось WinXP.


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 441 раз.
Только что повнемательней изучил программу и нашёл где "собака зарыта". :D Дело было не в ОЗУ, а в том что моя видеокарта не поддерживает 32-битное отображение цветов. В строке
Код:
1
OpenScreen(800, 600,32,"")

32 заменил на 16, и заработало! :D

Я только не понял одного. Почему, появлялась ошибка связанная с паматью?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июн 03, 2007 6:37 pm 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цитата:
Почему, появлялась ошибка связанная с паматью?

Потому что, комп не поймёт, что делать.
Он и выводит стандарт - "недостаточно мозгов понять, что от меня хотят"


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

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6399
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Пётр писал(а):
Только что повнемательней изучил программу и нашёл где "собака зарыта". :D Дело было не в ОЗУ, а в том что моя видеокарта не поддерживает 32-битное отображение цветов. В строке
Код:
1
OpenScreen(800, 600,32,"")

32 заменил на 16, и заработало! :D

Я только не понял одного. Почему, появлялась ошибка связанная с паматью?


Видео это тоже память, в компьютере занимает определённое адресное пространство. Люди, программирующие на Ассемблере, обязаны знать распределение памяти, но для Бейсика это не надо, тут всё автоматом.
Ну тут моя вина - надо было оформить эту строчку примерно так:
Код:
1
2
3
4
5
6
7
 
If OpenScreen(800, 600,32,"") ; Экран
ElseIf OpenScreen(800, 600,16,"")
Else
MessageRequester("Ошибка!", "Не возможно открыть экран 800Х600@16", #MB_OK|#MB_ICONWARNING)
EndIf
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июн 03, 2007 10:36 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 933
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
Нужно чтобы юзеры не воровали книжки?
оболочка идет в комплекте с одной книгой, или этой оболочкой можно будет открывать разные книги?
Но в первом случае можно будет копировать всю программу целиком, а во втором тиражировать файлы с книгами :idea:


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

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6399
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
22vlad писал(а):
Нужно чтобы юзеры не воровали книжки?
оболочка идет в комплекте с одной книгой, или этой оболочкой можно будет открывать разные книги?
Но в первом случае можно будет копировать всю программу целиком, а во втором тиражировать файлы с книгами :idea:


Идея состоит в том, что бы максимально затруднить извлечение текста из оригинальной оболочки. Одна оболочка - одна книга, внедряемая на стадии компиляции. Полностью исключить этого, естественно, не возможно. Всё что появляется на экране монитора легко можно скопировать в файл и без использования буфера обмена. (я такую программу на пурике за 5 минут напишу, а готовых в сети не менее десятка).
Исходя из этого создавая оболочку с информацией можно преследовать 2 основные цели:
1. Книга распространяется бесплатно, но содержит рекламу(которую оплатил заказчик).
2.Книга распространяется платно, рекламы нет, но к оболочке применены те же методы защиты, которые обычно применяться к
платным программам, затрудняющие её несанкционированное распространение( серийные номера, привязка к железу и т.п.).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 04, 2007 6:54 am 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Первый раз у меня возникли затруднения что -то скопировать с экрана.
Хорошая идея.


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

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


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

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


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

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