purebasic.info

PureBasic forum
Текущее время: Сб дек 16, 2017 12:37 am

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




Начать новую тему Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 3136 ]  На страницу 1, 2, 3, 4, 5 ... 210  След.
Автор Сообщение
 Заголовок сообщения: Разные вопросы 2 (архив)
СообщениеДобавлено: Чт дек 23, 2010 3:59 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11070
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Эта тема предназначена для вопросов, требующих не больше одного, двух ответов, без дальнейшего обсуждения.
Прежде чем задать вопрос, воспользуйтесь поиском.
Возможно уже есть ответ на ваш вопрос.

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


Последний раз редактировалось Пётр Пт апр 27, 2012 10:32 am, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 24, 2010 8:58 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 12:46 pm
Сообщений: 44
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Вот возникла пара вопросов:

1. Как рисовать сетку на ImageGadget'е?
2. Как привязывать объекты к сетке при их размещении на области?


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11070
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
MrApple писал(а):
Как рисовать сетку на ImageGadget'е?

С помощью функции LineXY
Вот пример из одной из моих прог
Код:
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
LoadFont(2,"Lucida Console",8)
LoadFont(3,"Courier New",8)
 
Procedure SNR_CreateGrafik(Image)
kHz=34
kHz_Step=69
Tone=8
Tone_Step=16
 
 If StartDrawing(ImageOutput(Image))
   DrawingMode(#PB_2DDrawing_Transparent)
   DrawingFont(FontID(2))
   
   Box(1,1,578,118,RGB(240, 240, 240))
   DrawText(4, 2, "SNR", RGB(132, 0, 0))
   DrawText(4, 12, "dB", RGB(132, 0, 0))
   Number=60
         
        LineXY(28,25,538,25,RGB(150, 150, 150))
      For x = 20 To 70 Step 10 ; Создание горизонтальных линий
        LineXY(28,x+15,538,x+15,RGB(200, 200, 200)) ; Линия
        DrawText(8, x+9, Str(Number), RGB(132, 0, 0)) ; Текст скраю графика
        DrawText(546, x+9, Str(Number), RGB(132, 0, 0))
        Number-10
      Next x
       LineXY(28,x+15,538,x+15,RGB(150, 150, 150))
       
       DrawingFont(FontID(3))
       
       p=0 : n=1
       LineXY(28,25,28,x+15,RGB(150, 150, 150))
       For y = 44 To 528 Step 16 ; Создание вертикальных линий
        LineXY(y,26,y,x+14,RGB(200, 200, 200))  ; Линия
          If p=0 And y<528
             p=1
             If n=1
              n=0
             Else
              n=1
             EndIf
             DrawText(y-8, 100, Str(kHz+n), RGB(3, 2, 208))
             DrawText(y-4, 10, Str(Tone), RGB(31, 125, 94))
             kHz+kHz_Step
             Tone+Tone_Step
          Else
             p=0
          EndIf
       Next y
       LineXY(y-1,25,y-1,x+15,RGB(150, 150, 150))  ; Линия
       
       DrawText(550, 100, "кГц", RGB(3, 2, 208))
       DrawText(550, 10, "Тон", RGB(31, 125, 94))
   
   StopDrawing()
 EndIf
 
EndProcedure
 
If OpenWindow(0, 0, 0, 580, 120, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateImage(0, 580, 120)
      SNR_CreateGrafik(0)
      ImageGadget(0, 0, 0, 580, 120, ImageID(0))
    EndIf
   
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf
 



MrApple писал(а):
Как привязывать объекты к сетке при их размещении на области?

По текущим их координатам, относительно, объекта.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб дек 25, 2010 12:38 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт фев 26, 2009 1:53 am
Сообщений: 1154
Откуда: Беларусь, Витебск
Благодарил (а): 22 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Можете посмотреть также мою работу. Есть тоже сетка, есть частный случай привязки к координатам.

_________________
Ubuntu 10.10, PureBasic 4.61 x86
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб дек 25, 2010 7:57 pm 
Не в сети
профессор

Зарегистрирован: Вт янв 27, 2009 3:09 pm
Сообщений: 295
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Как запретить процессу использовать одно из ядер?
upd: нагуглил, через SetThreadAffinityMask


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб дек 25, 2010 8:26 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс ноя 07, 2010 12:19 pm
Сообщений: 281
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Old Dirty Bastard
SetProcessAffinityMask().

_________________
Materia Lucida


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11070
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Код:
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
Procedure.l ProcessMessage(*Msg.MSG) 
  Static Handled.l
  If PeekMessage_(Msg,0,0,0,#PM_REMOVE)
    If *Msg\Message <> #WM_QUIT
      Handled = #False
      TranslateMessage_(*Msg)
       DispatchMessage_(*Msg)
    EndIf
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure
 
Procedure ProcessMessages()
  Static Msg.MSG
  While ProcessMessage(Msg) : Wend
EndProcedure
 
;запуск процесса на конкретном процессоре, установленном в системе
;FileName$  - имя exe файла для запуска
;Visibility = {
;               #SW_HIDE           : скрытое окно
;               #SW_MAXIMIZE       : развернутое окно на весь экран
;               #SW_MINIMIZE       : свернутое окно
;               #SW_RESTORE        : восстановить положение окна из развёрнутого или свёрнутого
;               #SW_SHOW           : показать окно и утсановить на него фокус
;               #SW_SHOWDEFAULT    : установить положение окна по данным из STARTUPINFO (по-умолчанию)
;               #SW_SHOWMAXIMIZED  : развернутое окно на весь экран + фокус на него
;               #SW_SHOWMINIMIZED  : свернутое окно + фокус на него
;               #SW_SHOWMINNOACTIVE:
;               #SW_SHOWNA         :
;               #SW_SHOWNOACTIVATE :
;               #SW_SHOWNORMAL     : показать окно + фокус на него.
;             }
;
;BitMask - маска, несущая информацию об общем количестве процессоров в системе,
;          а так же номера процессоров для запуска процесса на этих процах.
;          Например, установлено 4 процессора, а процесс нам необходимо запустить на процах 2 и 4
;          (справо налево) :: 1010 = 2^0 * 0 + 2^1 * 1 + 2^2 * 0 + 2^3 * 1 = 2 + 8 = 10
;          BitMask.l = 10
;
;Synch  = {
;           #true : ждать, пока процесс не будет завершён
;           #false: ->>->>->>-
;
;return = {#false,#WAIT_FAILED или ExitCode завершившегося процесса}
;
Procedure.l ExecuteProcess(FileName$, Visibility.l, BitMask.l, Synch.b = #False)
  Static zAppName${513}, WorkDir${256}, ProcessInfo.PROCESS_INFORMATION, Closed.b, Result.l
  Protected StartupInfo.STARTUPINFO
  Closed = #True
  StartupInfo\cb          = SizeOf(STARTUPINFO)
  StartupInfo\dwFlags     = #STARTF_USESHOWWINDOW
  StartupInfo\wShowWindow = Visibility
  zAppName$ = FileName$
  If Not CreateProcess_(#Null,@zAppName$,#Null,#Null,#False,#CREATE_NEW_CONSOLE|#NORMAL_PRIORITY_CLASS,#Null,#Null,StartupInfo,ProcessInfo)
    Result = #WAIT_FAILED
  Else
    SetProcessAffinityMask_(ProcessInfo\hProcess, BitMask)
    If Synch
      Closed = #False
      Repeat
        If WaitForSingleObject_(ProcessInfo\hProcess,100) = #WAIT_OBJECT_0
          Closed = #True
        EndIf
        ProcessMessages()
      Until Closed
      GetExitCodeProcess_(ProcessInfo\hProcess, @Result)      
      CloseHandle_(ProcessInfo\hProcess)
      CloseHandle_(ProcessInfo\hThread)
    Else
      Result = #False
    EndIf
  EndIf
EndProcedure
 
;сгенерировать BitMask для ExecuteProcess()
;TotalCPUs    - число процессоров в системе
;CPUstoUsage$ - строка с номерами процессоров для использования. Например для процов 2 и 3 : "23" или "32"
Procedure.l GenerateBitMask(TotalCPUs.l, CPUstoUsage$)
  Protected cpu$, Resul.l
  Static i.l, cpuN.l
  For i = 1 To TotalCPUs
    cpu$ + "0"
  Next
  For i = 1 To Len(CPUstoUsage$)
    cpuN = Val(Mid(CPUstoUsage$,i,1))
    PokeC(@cpu$+TotalCPUs-cpuN,$31)  
  Next
  For i = TotalCPUs To 1 Step-1
    Result + ((2<<(TotalCPUs-i-1)) * Val(Mid(cpu$,i,1)))
  Next
  ProcedureReturn Result
EndProcedure
 
;ПРИМЕР ИСПОЛЬЗОВАНИЯ
;запустить процесс на 2 процессоре и дождаться его завершения
Debug ExecuteProcess("c:\Program Files\PureBasic\Visual Designer.exe",#SW_SHOWNORMAL,GenerateBitMask(2,"2"),#True)


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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб дек 25, 2010 10:40 pm 
Не в сети
профессор

Зарегистрирован: Вт янв 27, 2009 3:09 pm
Сообщений: 295
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Поэкспериментировал я с этими функциями, так ничего дельного и не вышло. В диспетчере задач по-прежнему галки на обоих процессорах стоят. Или это не показатель?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 26, 2010 1:22 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 8:25 am
Сообщений: 799
Откуда: Нерезиновая
Благодарил (а): 21 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Old Dirty Bastard
Показатель.

Сам делаю таким образом и прекрасно работает только на нужном ядре:

Код:
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
IncludeFile "GetPID.pb"
ProgramName$ = "cmd.exe"
 
Procedure GenerateBitMask(TotalCPUs.l, UsageCPU$)
UsageCPU$="&"+UsageCPU$+"&"
For w=TotalCPUs To 1 Step -1
If CountString(UsageCPU$, "&"+Str(w)+"&")>0
res.s+"1" : Else : res.s+"0" : EndIf : Next
ProcedureReturn Val("%"+res)
EndProcedure
 
Procedure FindNumberCores()
sysinfo.SYSTEM_INFO : GetSystemInfo_(@sysinfo)
ProcedureReturn sysinfo\dwNumberOfProcessors
EndProcedure
 
CM$="@echo My program runing...&@pause"
RunProgram("cmd","/C "+CM$,"")
 
Repeat
hWnd = GetPID(ProgramName$)
Delay (100)
Until hWnd<>0
 
 
hProcess=OpenProcess_(#PROCESS_ALL_ACCESS, #False, hWnd)
SetProcessAffinityMask_(hProcess, GenerateBitMask(FindNumberCores(), "1"))



Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 28, 2010 4:20 pm 
Не в сети
студент

Зарегистрирован: Вс янв 17, 2010 12:39 am
Сообщений: 9
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
прошло уже некоторое время.
и у меня опять возникает вопрос - вышло ли какое-либо обновление, устраняющее баг с некорректным отображением (точнее не отображением) рамки фокуса (или как там оно - чёрная рамочка вокруг кнопки), так же как и баг с отсутствующим напрочь defaultbutton.

имею ввиду когда кнопка создана средствами пурика
Код:
1
ButtonGadget(0, 10, 10, 200, 20, "Button 1")




на буржуйском форуме данный вопрос поднимался ещё в 2005(!) году. сегодня уже, слава Свидетелям Иеговы, настаёт 2011.


к стати поделки пурика узнаю именно по этой черте - нажал на кнопку/чекбокс, фокуса нет. смотрю имя класса окна - так и есть. пурик. :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 28, 2010 4:53 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6206
Благодарил (а): 16 раз.
Поблагодарили: 171 раз.
Пункты репутации: 48
SLUTER писал(а):
вышло ли какое-либо обновление

Нет, и большинству, кто программирует на Пурике на это наплевать. Для особо озабоченного меньшинства решение есть :
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
If OpenWindow(0, 0, 0, 400,150,  "Focus Test", #PB_Window_ScreenCentered |#PB_Window_SystemMenu)
   ButtonGadget(0, 100, 100, 80, 25, "Button &1")
   ButtonGadget(1, 200, 100, 80, 25, "Button &2")
   OptionGadget(2, 30, 20, 60, 20, "Option 1")
   OptionGadget(3, 30, 45, 60, 20, "Option 2")
   OptionGadget(4, 30, 70, 60, 20, "Option 3")
   CheckBoxGadget(5, 30,  95, 60, 20, "standard")
 
   SetActiveGadget(1)
   SendMessage_(WindowID(0), #WM_UPDATEUISTATE, $30002,0)
   
   Repeat
   Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 28, 2010 10:48 pm 
Не в сети
док

Зарегистрирован: Вт дек 28, 2010 10:25 pm
Сообщений: 103
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
люди,я программирую всего 4 дня и поэтому такой нубский вопрос:есть ли в пурике оператор(или как там его?),который извлекает квадратный корень.например,число 121 надо переделать в 11 и т.д.И если есть,то скажите,пожалуйста,какой.А то очень срочно нужно.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 28, 2010 11:13 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн сен 07, 2009 10:00 pm
Сообщений: 1046
Откуда: Николаев
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Из справки :
Math (математика) библиотека предоставляет основные арифметические функции, такие как Cos(), Sin(), Pow(), Log() etc

Синтаксис
Result.f = Sqr(Number.f)
Описание
Возвращает корень квадратный указанного числа.
Поддерживаемые ОС
Все

_________________
www.mirashic.narod.ru
Первое знакомство с PB


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 28, 2010 11:23 pm 
Не в сети
док

Зарегистрирован: Вт дек 28, 2010 10:25 pm
Сообщений: 103
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Спасибо,очень благодарен.Наконец-то прогу допишу!:)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 29, 2010 2:01 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн сен 07, 2009 10:00 pm
Сообщений: 1046
Откуда: Николаев
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Как у такой конструкции (у ListIconGadget ) скрыть скроллинг?
Пробовал с помощью PanelGadget(), но тогда исчезает #PB_ListIcon_GridLines.
Рамку и верхний заголовок убрал.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Enumeration
 #Window_0
 #List
EndEnumeration
 
If OpenWindow(#Window_0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  SetWinBackgroundColor(WindowID(#Window_0),RGB(21, 21, 21))
  ListIconGadget(#List,10,10,0,0,"Список",350,#PB_ListIcon_DisplayMode|#PB_ListIcon_GridLines)
 
   For a=0 To 140
    AddGadgetItem(#List, -1, "строка   "+Str(a)  )
   Next a
   
   SetGadgetColor(#List, #PB_Gadget_BackColor, RGB(21, 21, 21))
   SetGadgetColor(#List, #PB_Gadget_FrontColor, RGB(137, 127, 98))
   SetGadgetColor(#List, #PB_Gadget_LineColor, RGB(35, 35, 35))
   
   SetWindowLongPtr_(GadgetID(1),#GWL_EXSTYLE,0)
   ResizeGadget(1,#PB_Ignore,#PB_Ignore,480,230)
   
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf



и ещё:

Код:
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
 
Enumeration
#MoveString
#Button_0
EndEnumeration
Global RuneLine$
 
Procedure MarqueeTimer0()                                               ; Справа на лево
While a=0
 If Len(GetGadgetText(#MoveString)) < Len(RuneLine$)
   iLen = iLen + 1
   SetGadgetText(#MoveString,Left(RuneLine$, iLen))
 Else
   SetGadgetText(#MoveString,Right(RuneLine$, Len(RuneLine$) - 1) + Left(RuneLine$, 1))
   RuneLine$ = GetGadgetText(#MoveString)
 EndIf
 SetWindowTitle(0, RuneLine$); множим строку по всем надписям
 SetGadgetText(#Button_0,RuneLine$)
 Delay(100)
Wend
EndProcedure
 
 
Procedure MarqueeTimer(*x)                                               ; Справа на лево
While a=0
 If Len(GetGadgetText(#MoveString)) < Len(RuneLine$)
   iLen = iLen + 1
   SetGadgetText(#MoveString,Left(RuneLine$, iLen))
 Else
   SetGadgetText(#MoveString,Right(RuneLine$, Len(RuneLine$) - 1) + Left(RuneLine$, 1))
   RuneLine$ = GetGadgetText(#MoveString)
 EndIf
 SetWindowTitle(0, RuneLine$); множим строку по всем надписям
 SetGadgetText(#Button_0,RuneLine$)
 Delay(100)
Wend
EndProcedure
 
If OpenWindow(0, 0, 0, 300, 160, "Moving string", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
  RuneLine$="Hello PureBasic!               "
  TextGadget(#MoveString, 100, 20, 300, 20, RuneLine$)
  ButtonGadget(#Button_0, 20, 85, 195, 25, RuneLine$)
 
  ;MarqueeTimer0()
  CreateThread(@MarqueeTimer(),0)
 
  Repeat  
  Until WaitWindowEvent()  = #PB_Event_CloseWindow
 
 EndIf
 


_________________
www.mirashic.narod.ru
Первое знакомство с PB


Последний раз редактировалось mirashic Вт янв 31, 2012 6:29 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 3136 ]  На страницу 1, 2, 3, 4, 5 ... 210  След.

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


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

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


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

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