Спасибо, Дмитрий
Вопросы новичка (продолжение…)
Сообщений 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 |