PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)


Вопросы новичка (продолжение…)

Сообщений 691 страница 720 из 961

691

Он там есть.

0

692

Код:
Procedure LOWORD(Value)          ; Макрокоманда  извлекает младшее слово из данного 32-разрядного значения (левый индикатор ур)
  ProcedureReturn Value & $FFFF 
EndProcedure 

Procedure HIWORD(Value)          ; Макрокоманда  извлекает старшее слово из данного 32-разрядного значения  (правый индикатор ур) 
  ProcedureReturn (Value >> 16) & $FFFF 
EndProcedure

http://purebasic.info/phpBB2/viewtopic. … word#16721

0

693

Теперь выдает ошибку макроса: имя процедуры должно начинаться с буквы(a-z or _).

0

694

Сделал так:

Код:
   level=BASS_ChannelGetLevel(handle)       
   L=level & $FFFF                       
   R=(level >> 16) & $FFFF

Все заработало.

0

695

Макрос делал тоже самое, поэтому и заработало.

0

696

кто нибуть работал с api RegGetKeySecurity and  RegSetKeySecurity ?
Ни как не могу с ними совладать,не получить корректного ответа от функции,не сменить атрибут,вообщем не могу с ними совладать и всё,бьюсь уже больше трёх часов и всё без столку,гугл ни чего не дал.
Если кто может,приведите пример использование этих двух функций,пожалуйста.

0

697

ты свой код выложи, а мы поправим где ошибка

0

698

v1 написал(а):

кто нибуть работал с api RegGetKeySecurity and  RegSetKeySecurity ?


Код:
;HKEY_LOCAL_MACHINE\SECURITY\Policy
#DACL_SECURITY_INFORMATION = 4

 nLengthNeeded.l = 0
If  RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "SECURITY\Policy", 0, #KEY_ALL_ACCESS, @hKey) = #ERROR_SUCCESS
    ; Узнаем размер буфера
    fResult = RegGetKeySecurity_(hKey, #DACL_SECURITY_INFORMATION, 0, @nLengthNeeded)

    If nLengthNeeded = 0
        MessageBox_(0, "RegGetKeySecurity failed with error code : " + Str(fResult), "Error", 0)
        End
    EndIf
    *oldSD.l = AllocateMemory(nLengthNeeded)  ; выделяем память под буфер
    If *oldSD
        FillMemory(*oldSD, nLengthNeeded)
        fResult = RegGetKeySecurity_(hKey, #DACL_SECURITY_INFORMATION, *oldSD, @nLengthNeeded)
        If fResult = #ERROR_SUCCESS
          ; ...
        Else
            MessageBox_(0, "RegGetKeySecurity failed with error code : " + Str(fResult), "Error", 0)
        EndIf
        FreeMemory(*oldSD)  
    EndIf
 EndIf

Тут посмотри ,   Тут   и   Тут

И на офф. сайте есть про это

Отредактировано crc (26.04.2012 14:50:55)

0

699

crc огромнейшие спасибо.

0

700

Есть возможность отслеживать по этим ключам:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB
историю соединения флеш накопителей,ключи защищены и простым regdelete их не удалишь.
Нужно вообщем снять защиту с этих ключей и удалить их,думал получится самому разобраться,но судя по всему,не доходит до идиота.
Не получается не то что получить нужный дакл,не получается даже его открыть,хотя программа запускается от имени администратора.
Возможно ли как нибудь снять атрибуты не открывая сам ключ?
Пробовал выше приведённый пример.

0

701

В CodeArchiv нашел LoadAdditionalFonts:

Код:
; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1651&highlight=
; Author: GPI (updated for PB4.00 by blbltheworm)
; Date: 08. July 2003
; OS: Windows
; Demo: No

#Dir_Font = 0

Procedure LoadAdditionalFonts(Dir$) 
  ExamineDirectory(#Dir_Font,"Style\","*.TTF") 
  While NextDirectoryEntry(#Dir_Font) 
    AddFontResource_("Style\"+DirectoryEntryName(#Dir_Font)) 
  Wend 
  ExamineDirectory(#Dir_Font,"Style\","*.FON") 
  While NextDirectoryEntry(#Dir_Font) 
    AddFontResource_("Style\"+DirectoryEntryName(#Dir_Font)) 
  Wend 
  SendMessage_(#HWND_BROADCAST,#WM_FONTCHANGE,0,0) 
EndProcedure 

Procedure UnLoadAdditionalFonts(Dir$) 
  ExamineDirectory(#Dir_Font,"Style\","*.TTF") 
  While NextDirectoryEntry(#Dir_Font) 
    RemoveFontResource_("Style\"+DirectoryEntryName(#Dir_Font)) 
  Wend 
  ExamineDirectory(#Dir_Font,"Style\","*.FON") 
  While NextDirectoryEntry(#Dir_Font) 
    RemoveFontResource_("Style\"+DirectoryEntryName(#Dir_Font)) 
  Wend 
  SendMessage_(#HWND_BROADCAST,#WM_FONTCHANGE,0,0) 
EndProcedure

Как я понял эта прога проверяет на наличие шрифтов *.TTF. Где можно посмотреть пример работы с такими шрифтами?

0

702

Первая процедура ищет в заданной папке файлы шрифтов и инсталлирует их в систему.
Вторая процедура деинсталлирует шрифты.

0

703

Пётр написал(а):

Первая процедура ищет в заданной папке файлы шрифтов и инсталлирует их в систему.
Вторая процедура деинсталлирует шрифты.

Где тогда можно посмотреть пример работы с такими шрифтами?

0

704

TTF шрифт это например, Arial.
Пример из справки.

Код:
  If OpenWindow(0, 0, 0, 222, 130, "SetGadgetFont", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If LoadFont(0, "Arial", 16)
      SetGadgetFont(#PB_Default, FontID(0))   ; Set the loaded Arial 16 font as new standard
    EndIf
    ButtonGadget(0, 10, 10, 200, 30, "Button - Arial 16")
    SetGadgetFont(#PB_Default, #PB_Default)  ; Set the font settings back to original standard font
    ButtonGadget(1, 10, 50, 200, 30, "Button - standard")
    If LoadFont(1,"Courier",10, #PB_Font_Bold|#PB_Font_Underline)
      SetGadgetFont(#PB_Default, FontID(1))   ; Set the loaded Courier 10 font as new standard
    EndIf
    TextGadget(2, 10, 90, 200, 40, "Bold + underlined Courier 10 Text", #PB_Text_Center)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

0

705

А как использовать свой, не загружая в систему, например этот?

0

706

Как программно установить шрифт в систему?

0

707

Спасибо. У меня правда Хрюша. Сейчас попробую.

0

708

Спасибо, работает.

0

709

Здравствуйте...
У меня такой вопрос, можно ли протащить спрайт поверх фона или спрайтов не обновляя постоянно экран чтобы избежать затирания.

Пишу игру, и у меня планируется огромная куча объектов, не уверен что будет всё быстро работать.

Отредактировано Phoenix (11.05.2012 13:56:32)

0

710

Сначала нужно отобразить спрайт фона, а затем спрайты, располагающиеся на этом фоне.

Phoenix написал(а):

планируется огромная куча объектов, не уверен что будет всё быстро работать

Примерно сколько?
Некоторое время назад тестировали скорость прорисовки и в тесте было около 30 тысяч спрайтов и не тормозило, даже с проверкой коллизий.

0

711

Пётр, значит та двойная буферизация должна справиться.
У меня конечно меньше до сотни где-то если с пульками считать...
Тогда думаю всё только в обработку событий упираться будет...
Спасибо.

0

712

Вопрос по указателям:

Заполнить массив можно как-то так

Код:
Dim Arr(10)

For i=0 To 10
  *PArr=@Arr(i)
  PokeI(*PArr, i) 
Debug Arr(i)
Next

Можно ли получить из массива данные по указателю?

0

713

Код:
Dim Arr(10)

For i=0 To 10
  *PArr=@Arr(i)
  PokeI(*PArr, i) 
  Debug PeekI(*PArr)
Next

0

714

А работать с указателем как с массивом не выйдет?
То есть, зная адрес массива (*PArr=@Arr) и номер элемента, получить значение из массива.

0

715

Тигрёнок написал(а):

зная адрес массива (*PArr=@Arr) и номер элемента, получить значение из массива.

как получить элементs массива имея только указатель на массив?

0

716

Спасибо. Ответ как всегда исчерпывающий)

0

717

Есть код:

Код:
Procedure.d A()
  ProcedureReturn  0.5
EndProcedure

*Proc=@A()
a.d=CallFunctionFast(*Proc)
Debug a

Procedure B()
  ProcedureReturn  10
EndProcedure

*Proc=@B()
B=CallFunctionFast(*Proc)
Debug B

В случае "А", CallFunctionFast возвращает неверное значение. Почему? Заранее спасибо.

0

718

Тигрёнок написал(а):

В случае "А", CallFunctionFast возвращает неверное значение. Почему?

Потому что:

Примечание: Эта функция не особенно гибка и не обрабатывает строковые/плавающие/двойные плавающие/четверные параметры или строковые/плавающие/двойные плавающие/четверные возвращаемые значения. Настоятельно рекомендуется использование прототипов.

http://purebasic.ru/manual.php?id=646&lng=rus
Нужно использовать прототипы.

0

719

Имеется такая вот программка, которая открывает два окна, главное и дочернее.

Код:
Procedure Window(ParentWindow)
  Window=OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 300,200, "Окно Dll", #PB_Window_SystemMenu|#PB_Window_TitleBar, WindowID(ParentWindow))
  If IsWindow(Window)
    DisableWindow(ParentWindow, 1)
    Repeat
      Event=WindowEvent()
      Select event 
        Case #PB_Event_Gadget
          Select EventGadget()
          EndSelect
      EndSelect
    Until Event=#PB_Event_CloseWindow
    
    CloseWindow(Window)
    DisableWindow(ParentWindow, 0)
    ProcedureReturn 1
  EndIf
  
  ProcedureReturn 0
EndProcedure

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 300, 200, "Главное окно")
  ButtonGadget(0, 5, 5, 100, 20, "Открыть окно")
  Window(0)
  Repeat
    Event=WindowEvent()
    Select event 
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0
            Window(0)
        EndSelect
    EndSelect
  Until Event=#PB_Event_CloseWindow
EndIf

Я попытался перенести функцию Window() в Dll. Вот код

Код:
ProcedureDLL DllWindow(ParentWindow)
  Window=OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 300,200, "Окно Dll", #PB_Window_SystemMenu|#PB_Window_TitleBar, WindowID(ParentWindow))
  If IsWindow(Window)
    DisableWindow(ParentWindow, 1)
    Repeat
      Event=WindowEvent()
      Select event 
        Case #PB_Event_Gadget
          Select EventGadget()
          EndSelect
      EndSelect
    Until Event=#PB_Event_CloseWindow
    
    CloseWindow(Window)
    DisableWindow(ParentWindow, 0)
    ProcedureReturn 1
  EndIf
  
  ProcedureReturn 0
EndProcedure


;Открывалка

If OpenLibrary(0, "My.dll")
  If OpenWindow(0, #PB_Ignore, #PB_Ignore, 300, 200, "Главное окно")
    ButtonGadget(0, 5, 5, 100, 20, "Открыть окно")
    CallFunction(0, "DllWindow", 0)
    Repeat
      Event=WindowEvent()
      Select event 
        Case #PB_Event_Gadget
          Select EventGadget()
            Case 0
              CallFunction(0, "DllWindow", 0)
          EndSelect
      EndSelect
    Until Event=#PB_Event_CloseWindow
  EndIf

  CloseLibrary(0)
EndIf

И столкнулся с проблемой. Процедуры WindowID() и DisableWindow() перестают работать, т. к. значение ParentWindow для них "чуждо".
Как можно обойти эту проблему?

0

720

Тигрёнок написал(а):

И столкнулся с проблемой. Процедуры WindowID() и DisableWindow() перестают работать, т. к. значение ParentWindow для них "чуждо".
Как можно обойти эту проблему?

Нужно передавать хэндл ParentWindow.

Код:
Window=OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 300,200, "Окно Dll", #PB_Window_SystemMenu|#PB_Window_TitleBar, ParentWindow)
Код:
CallFunction(0, "DllWindow", WindowID(0))

В место DisableWindow(), нужно использовать WinAPI функцию EnableWindow_().

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)