purebasic.info

PureBasic forum
Текущее время: Пн июл 23, 2018 4:34 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: glib
СообщениеДобавлено: Чт янв 04, 2018 11:47 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб сен 05, 2015 11:30 am
Сообщений: 32
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Когда-то Никита спрашивал как сделать браузерный движок на одних гаджетах, а ему отвечали, что тут нужен Canvas, что все должно рисоваться в Canvas. Я потратил некоторое время, чтобы создать 2 гаджета, прорисовываемых полностью в Canvas - кнопка и строка. Если кому интересно. 5.31 windows.

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

Изображение


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


Последний раз редактировалось dirty.cheese Вс фев 11, 2018 4:01 pm, всего редактировалось 11 раз(а).
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: glib
СообщениеДобавлено: Вс янв 07, 2018 1:55 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 771
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
Код:
1
Gadgets(e)\text = AllocateMemory(Round(StringByteLength(Text)/16, #PB_Round_Up)*16)


почему 16?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: glib
СообщениеДобавлено: Пн янв 08, 2018 2:41 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб сен 05, 2015 11:30 am
Сообщений: 32
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
mestnyi писал(а):
почему 16?

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: glib
СообщениеДобавлено: Пн янв 08, 2018 4:31 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 771
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
Код:
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
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: glib
СообщениеДобавлено: Пн янв 08, 2018 4:51 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1646
Откуда: Алматы
Благодарил (а): 14 раз.
Поблагодарили: 45 раз.
Пункты репутации: 5
конец строки может? помница при склеивании двух разных кусочков памяти надо чтоб в первом было чуть меньше по размеру и по моему как раз на 2 символа.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: glib
СообщениеДобавлено: Пн янв 08, 2018 6:07 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 771
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
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 символа.

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


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

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


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

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


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

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