purebasic.info
http://purebasic.info/phpBB3ex/

glib
http://purebasic.info/phpBB3ex/viewtopic.php?f=10&t=4817
Страница 1 из 1

Автор:  dirty.cheese [ Чт янв 04, 2018 11:47 pm ]
Заголовок сообщения:  glib

Когда-то Никита спрашивал как сделать браузерный движок на одних гаджетах, а ему отвечали, что тут нужен Canvas, что все должно рисоваться в Canvas. Я потратил некоторое время, чтобы создать 2 гаджета, прорисовываемых полностью в Canvas - кнопка и строка. Если кому интересно. 5.31 windows.

Последний раз обновил 16:00 11 февраля 2018
Последнее что делал, исправлял ошибки DIV и добавил List гаджет.

Изображение

Вложения:
glib.pb [50.07 KiB]
Скачиваний: 57

Автор:  mestnyi [ Вс янв 07, 2018 1:55 pm ]
Заголовок сообщения:  Re: glib

Код:
1
Gadgets(e)\text = AllocateMemory(Round(StringByteLength(Text)/16, #PB_Round_Up)*16)


почему 16?

Автор:  dirty.cheese [ Пн янв 08, 2018 2:41 pm ]
Заголовок сообщения:  Re: glib

mestnyi писал(а):
почему 16?

округляю до 16, чтобы не выделять по одному байту каждый раз.

Автор:  mestnyi [ Пн янв 08, 2018 4:31 pm ]
Заголовок сообщения:  Re: glib

Код:
1
AllocateMemory(Round(StringByteLength(Text)/16, #PB_Round_Up)*16)


Это мне кажется бессмысленно, тем более добавлять больше памяти чем положено.
Я делаю вот так но мне не понятно почему надо добавлять 2.
Код:
1
 AllocateMemory(StringByteLength(String)+2)



Код:
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
DeclareModule Memory
  Declare SetString(String.s)
  Declare.s GetString(*Memory)
EndDeclareModule
 
Module Memory
  Procedure SetString(String.s)
    Protected *Memory
   
    If String
      *Memory = AllocateMemory(StringByteLength(String)+2)
     
      If *Memory
        PokeS(*Memory, String)
      EndIf
    EndIf
   
    ProcedureReturn *Memory
  EndProcedure
 
  Procedure.s GetString(*Memory)
   
    If *Memory
      ProcedureReturn PeekS(*Memory)
    EndIf
   
  EndProcedure
EndModule
 
CompilerIf #PB_Compiler_IsMainFile
  Define *Memory = Memory::SetString("string from memory")
 
  Debug "Get: "+Memory::GetString(*Memory)
 
  Define *Memory = Memory::SetString("строка из памяти")
 
  Debug "Get: "+Memory::GetString(*Memory)
CompilerEndIf
 


Автор:  SereZa [ Пн янв 08, 2018 4:51 pm ]
Заголовок сообщения:  Re: glib

конец строки может? помница при склеивании двух разных кусочков памяти надо чтоб в первом было чуть меньше по размеру и по моему как раз на 2 символа.

Автор:  mestnyi [ Пн янв 08, 2018 6:07 pm ]
Заголовок сообщения:  Re: glib

SereZa писал(а):
конец строки может?

Может быт но если делать так то не нужно добавлять 2
Код:
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
DeclareModule Memory
  Declare SetString(String.s)
  Declare.s GetString(*Memory)
EndDeclareModule
 
Module Memory
  Procedure SetString(String.s)
    Protected *Memory
   
    If String
      *Memory = AllocateMemory(StringByteLength(String))
     
      If *Memory
        PokeS(*Memory, String, #PB_All, #PB_UTF8)
      EndIf
    EndIf
   
    ProcedureReturn *Memory
  EndProcedure
 
  Procedure.s GetString(*Memory)
   
    If *Memory
      ProcedureReturn PeekS(*Memory, #PB_All, #PB_UTF8)
    EndIf
   
  EndProcedure
EndModule
 
CompilerIf #PB_Compiler_IsMainFile
  Define *Memory = Memory::SetString("string from memory")
 
  Debug "Get: "+Memory::GetString(*Memory)
 
  Define *Memory = Memory::SetString("строка из памяты")
 
  Debug "Get: "+Memory::GetString(*Memory)
CompilerEndIf
 


SereZa писал(а):
помница при склеивании двух разных кусочков памяти надо чтоб в первом было чуть меньше по размеру и по моему как раз на 2 символа.

А где там разные кусочки памяти?

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/