Спасибо, Дмитрий
Вопросы новичка (продолжение…)
Сообщений 481 страница 510 из 990
Поделиться48204.05.2011 14:01:28
Друзья! Выручайте. Нарисовал лист бокс с использованием лист виев с флагом ownerdraw с использованием обработчика событий, все красиво все замечательно. Не могу отследить двойное нажатие на левую кнопку мыши, уже все волосы на голове вырвал. Код в студию не могу выложить, ибо с телефона пишу.
Поделиться48304.05.2011 15:26:09
Если показал бы код, было бы проще посоветовать, а то ведь даже не указал создаешь ListBos с помощью WinAPI или гаджетов пурика.
Пока что могу посоветовать добавить к код это:
SetClassLong_(hWnd, #GCL_STYLE, #CS_DBLCLKS)
hWnd - хэндл лист-бокса.
Поделиться48404.05.2011 23:44:06
Петр, твой вариант не подошел, жаль. Создавался листбокс средствами пурика.
Поделиться48504.05.2011 23:46:15
Как отслеживаешь двойной клик?
Поделиться48605.05.2011 16:00:46
Через обработчик событий " Select msg
Case #PB_EVENTTYPE_LEFTDOUBLECLICK... и т.д"
Поделиться48705.05.2011 17:57:43
Попробуй в обработчике событий лист-бакса отлавливать сообщение #WM_LBUTTONDBLCLK
Поделиться48805.05.2011 19:53:44
Пытался, ноль эмоций, не видит он его 
Поделиться48906.05.2011 01:42:19
Скажите пожалуйста, мне надо в переменную записать строку кода для purebasic. И эта строка кода содержит символ ".
peremennay$=" a$="ppp" "
Ну и истественно выскакивает ошибка. Скажите пожалуйста, может в PB какие нибудь спейиальные кавычки предусмотрены специально для таких случиев?
Поделиться49006.05.2011 05:28:30
Appolon
Замени кавычки на Chr(34).
peremennay$=" a$="+Chr(34)+"ppp"+Chr(34)+" "
Отредактировано lakomet (06.05.2011 05:31:01)
Поделиться49108.05.2011 13:05:26
Здравствуйте, у меня вопрос про shared, не понимаю, как она работает. Вот, к примеру, у меня есть процедура АА, внутри неё объявляю переменные, которые должны быть видимы только в этой процедуре и внутри тех процедур, которые используются внутри АА, shared предоставляет доступ к переменной, как будто она глобальная, или же делает её глобальной? Поскольку когда я делаю так, то эти переменные становятся видимы и во вне процедуры AA.
Поделиться49208.05.2011 13:32:37
вопрос про shared,
shared - значит общий, т.е. общая ( как глобальная) переменная, но объявленная внутри процедуры.
Для глобализации внутри прoцедуры подойдет Static
Поделиться49308.05.2011 13:53:54
ВиниПур, вот использую static и не помогает, в чём ошибка?
Procedure a() Static proc1.l=20 EndProcedure Procedure b() Static proc2.l ;Static proc1.l proc2=proc1+20 Debug proc2 EndProcedure Procedure obwaia(); общая процедура a(); здесь proc1 = 20 b(); здесь proc2 = 40 Debug proc2 EndProcedure obwaia()
global мне здесь не подойдёт.
Отредактировано goodwen (08.05.2011 14:03:19)
Поделиться49408.05.2011 14:10:49
Procedure a() Static proc1.l=20 ProcedureReturn proc1 EndProcedure Procedure b(*proc1) Static proc2.l ;Static proc1.l proc2=PeekL(*proc1)+20 ;Debug proc2 ProcedureReturn proc2 EndProcedure Procedure obwaia(); общая процедура proc1=a(); здесь proc1 = 20 proc2=b(@proc1); здесь proc2 = 40 Debug proc1 Debug proc2 EndProcedure obwaia()
Поделиться49508.05.2011 15:00:32
Пётр, спасибо.
Поделиться49616.05.2011 15:26:45
ребята как сделать нечто подобное!?!?
Поделиться49817.05.2011 08:35:29
Петр спасибо за ссылку =) но дело в том что именно там я и увидел эту тему, пытался зарегистрироваться на этом форуме(два раза) не получилось. Из-за этого не могу скачать исходник. Петр если можешь выложи код =) очень нужно
Поделиться49917.05.2011 10:19:15
; Программа написанна на языке PureBasic
Global Font.l ; Глобальная переменная (доступная в процедуре)
; В этой процедуре отрисовывается график.
; Она запущена в параллельном потоке
Procedure Draw_Image()
Static Sinus ; Статическая перемена, данные в котрой не теряются при завершении работы процедуры
Y_Number=40 ; Это для выводимого текст в графике
X_Number=0
If StartDrawing(ImageOutput(1)) ; Приступаем к рисованиию по рисунку
DrawingFont(Font) ; Шрифт для отобрадения текста
Box(0,0,430,430,$FFFFFF) ; Стираем всё в рисунке
DrawingMode(#PB_2DDrawing_Transparent)
For x = 10 To 387 Step 43 ; Создание горизонтальных линий
LineXY(40,x,384,x,$7BD055) ; Линия
If X_Number=20 ; Жиная линия в центре
LineXY(40,x-1,384,x-1,$7BD055)
LineXY(40,x+1,384,x+1,$7BD055)
EndIf
DrawText(x+30, 360, Str(X_Number), $82057D) ; Текст скраю графика
X_Number+5
Next x
For y = 40 To 387 Step 43 ; Создание вертикальных линий
LineXY(y,10,y,353,$7BD055) ; Линия
DrawText(16, y-38, Str(Y_Number), $F60209) ; Текст скраю графика
Y_Number-10
Next y
For x = 40 To 383 ; Создание синусоиды
theta = x + Sinus
y=((383-4)/2-10)-Sin(theta/58)*(383/2-10)*(Cos(theta/58)) ; Вычисление оси Y
Box(x,y,4,4, $4A02B5) ; Точка
Next x
Sinus+2 ; Сдиг синусоиды
StopDrawing() ; Конец рисования
SetGadgetState(1, ImageID(1)) ; Отображение результата в окне
EndIf
EndProcedure
Image=CreateImage(1,410,390) ; Создание рисунка для графика
; Создание невидимого окна
OpenWindow(0,0,0,420,400,"Ослциллограф",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
ImageGadget(1,5,5,390,390, Image) ; Здесь будет отображаться рисунок графиком
CompilerIf #PB_Compiler_OS = #PB_OS_Linux ; Это для Linux
Font=LoadFont(1,"Liberation Mono ",8) ; Шрифт для Linux
Procedure LinuxTim(*p)
Draw_Image()
g_timeout_add_(20, @LinuxTim(), WindowID(0));
EndProcedure
g_timeout_add_(20, @LinuxTim(), WindowID(0))
CompilerElse ; Это для Windows
Font=LoadFont(2,"Arial",8) ; Шрифт для Windows
SetTimer_(WindowID(0), 1, 20, @Draw_Image())
CompilerEndIf
Draw_Image()
HideWindow(0,0)
Repeat ; Главный цикл программы Repeat - Until
Event=WaitWindowEvent() ; Узнаём ID события программы
Until Event=#PB_Event_CloseWindow ; Прерывание цикла при закрытии окнаПоделиться50017.05.2011 12:28:30
Большое спасибо Петр.
Поделиться50119.05.2011 16:38:00
Доброго времени суток. Появилась кое какая идея, и тут же встал вопрос: воспроизвести потоковый звук довольно просто, с помощью библиотек bass.dll или fmod.dll, а как собственно его передать?
Поделиться50219.05.2011 16:55:09
воспроизвести потоковый звук довольно просто, с помощью библиотек bass.dll или fmod.dll, а как собственно его передать?
Можно и средствами пурика это сделать Интернет-радио
Если интересуют именно bass.dll или fmod.dll, то вот примеры:
Рисованный интерфейс FM (bass.dll)
http://purebasic.info/phpBB2/viewtopic.php?t=1204 (fmod.dll)
http://purebasic.info/phpBB2/viewtopic.php?t=947 (bass.dll)
http://purebasic.info/phpBB2/viewtopic.php?t=1581 (Bass.dll)
Поделиться50419.05.2011 21:59:20
Петр , Мирашик! Вы, наверное, меня не так поняли. С воспроизведением потокового звука проблем нет, об этом куча инфы и примеров. А как передать поток звука на клиентскую часть через TCP/IP ну а на клиентской стороны уже воспроизвести уже известным способом. Нужно СОЗДАТЬ ПОТОК =)
Поделиться50519.05.2011 23:30:10
Тут определенно нужно создавать сервер (скорее всего многопоточный, если клиентов будет много), который будет передавать данные клиенту со строго заданной скоростью, скажем, 256 кб/с.
Поделиться50619.05.2011 23:48:35
Сервер будет расчитан на 2 клиента, тут без проблем! То есть можно просто мп3 файл передавать клиенту и он будет в режиме реального времени воспроизводить предположим испольуя фмод.длл!?!? или обычной передачей файла не обойтись!?!?
Поделиться50720.05.2011 00:17:17
Можно файл передавать, должно получится, но нужно пробовать.
Поделиться50820.05.2011 15:26:35
"...который будет
передавать данные клиенту со строго заданной скоростью, скажем,
256 кб/с." как собственно установить заданную скорость. Мне это не требуется, но для общего развития пригодится.
Поделиться50920.05.2011 15:50:55
как собственно установить заданную скорость
В простейшем случае, просто передавать требуемое число байт за определенный промежуток времени, скажем за секунду.
Если было передано больше байт - прекращать передачу до окончания текущей секунды.
Поделиться51026.05.2011 00:06:33
Здравствуйте, у меня возникла проблема с написанием простенькой программы по передачи сообщений от одного потока другому. Там идея такая, есть 4 потока отсылающие друг другу сообщения и принимающие это и в Debug отображается кому и от кого прищло сообщение, сначала с помощью рандома узнаем, поток отправит сообщение, или примет. Если 1, то отправляем сообщение с помощью процедуры send, а если принять сообщения, тогда используется процедура receive. Ниже приведён код программы. Вроде всё работает, но в определённый момент отчёт перестаёт выводится на экран будто ничего не происходит, но программы не завершается, в чём может быть проблема? Если я переношу использование Мьютекса и Семафора из кода потока в код процедур send и receive и тоже самое происходит.
Global true.b = 1 ; переменная для вычного цикла
Global semaphore = CreateSemaphore() ; объявление переменной semaphore, которая является семафором
Global mutex = CreateMutex() ; объявление переменной mutex, которая является мьютексом
Structure messagebox
sender.l ; номер потока, который отправляет сообщение
recipient.l ; номер потока, которому нужно отпарвить сообщение
message_body.s ; само сообщение
EndStructure
Global NewList queue.messagebox() ; объявление списка queue, в который записываются сообщения
Procedure send(sender_thread.l, recipient_thread.l, message.s)
; send - посылает сообщение заданному потоку
; sender_thread - какой поток отсылает сообщение
; recipient_thread - какому потоку отослать сообщение
; message - само сообщение
LastElement(queue()) ; переходим к последнему элементу в списке
AddElement(queue()) ; добавить новый элемент в список
queue()\sender = sender_thread ; пишем какой поток хочет отослать
queue()\recipient = recipient_thread ; пишем какому потоку хотим отправить сообщение
queue()\message_body = message ; само сообщение
EndProcedure
Procedure.s receive(recipient_message.l)
; receive - получет сообщение от другого потока
; recipient_message - номер потока, который хочет получить сообщение
message.s = "" ; переменная для записи всех сообщений, которые пришли данному потоку
ForEach queue() ; смотрим какие у нас данные в списке
If queue()\recipient = recipient_message ; если это сообщение направлено данному потоку
; записываем все сообщения, которые были отосланы этому потоку
message = message + "поток " + Str(recipient_message) + " принял: " + queue()\message_body + " от потока " + Str(queue()\sender) + "; "
DeleteElement(queue()) ; Удаление текущего элемента в списке
EndIf
Next
ProcedureReturn message.s
EndProcedure
Procedure Thread(*number)
counter.i = 0 ; переменная для данных (их отображение)
While true = 1
Delay(1000)
send_of_receive.l = Random(1) ; здесь случаенно определяется, поток хочет послать, или принять сообщение
If send_of_receive = 1 ; если 1, значит отослать
LockMutex(mutex) ; входим в критическую секцию, с помощью мьютекса
send_thread.l = Random(3) ; узнаём какому потоку послать сообщение
data_message.s = "message" + Str(counter) ; присвоить этому элементу значение
counter = counter + 1 ; увеличиваем значение переменной, чтобы различать данные
send(send_thread.l, *number, data_message.s) ; отправить сообщение указанному потоку
UnlockMutex(mutex) ; выходим из критической секции, с помощью мьютекса
SignalSemaphore(semaphore) ; увеличиваем значение семафора
Else ; иначе получаем сообщение
LockMutex(mutex) ; входим в критическую секцию, с помощью мьютекса
received_message.s = receive(*number) ; получаем сообщения
If Not received_message = "" ; если этому потоку ни кто сообщения не посылал, то ничего и не выводим
Debug received_message
EndIf
UnlockMutex(mutex) ; выходим из критической секции, с помощью мьютекса
WaitSemaphore(semaphore) ; уменьшаем значение семафора
EndIf
Wend
EndProcedure
thread0 = CreateThread(@Thread(), 0) ; создать поток thread1
thread1 = CreateThread(@Thread(), 1) ; создать поток thread2
thread2 = CreateThread(@Thread(), 2) ; создать поток thread3
thread3 = CreateThread(@Thread(), 3) ; создать поток thread2
WaitThread(thread0)
WaitThread(thread1)
WaitThread(thread2)
WaitThread(thread3)Отредактировано goodwen (26.05.2011 00:12:59)
Похожие темы
| Какая версия? | OffTop | 03.10.2021 |
| Мне постоянно пищет вот это | Вопросы по PureBasic | 14.10.2011 |
| Размер экрана в пикселях | Вопросы по PureBasic | 13.02.2011 |
| консоль | Вопросы по PureBasic | 19.03.2015 |
| Полноэкранные приложения на purebasic | Вопросы по PureBasic | 08.03.2011 |