Если намутить такую запись:
Icon_25 = Tool:Templates Action_25 = Menu:Templates
То панель появляется, осталось иконку привязать
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка
Если намутить такую запись:
Icon_25 = Tool:Templates Action_25 = Menu:Templates
То панель появляется, осталось иконку привязать
Ребят так объяснять долго , вот :
InitNetwork() Enumeration #Window_0 #Text_1 #Button_0 EndEnumeration If Open_Window_0() OpenWindow(#Window_0, 5, 5, 190, 270, "", #PB_Window_SystemMenu |#PB_Window_ScreenCentered) SetWindowColor(#Window_0,$717171) TextGadget(#Text_0, 0, 30, 190, 190, "") ButtonGadget(#Button_0, 50, 230, 70, 30, "load") Endif Repeat Event.l = WaitWindowEvent() Select Event Case #PB_Event_Gadget Select EventGadget() Case #Button_0 SetGadgetText(#Text_0,"CraSocer...") ReceiveHTTPFile("http://www.bashorg.org/casual","file.html") ReadFile(0, "file.html") Size=Lof(0) Text.s=Space(Size) ReadData(0, @Text, Size) CloseFile(0) SetGadgetText(#Text_0,Text) EndSelect EndSelect Until Event = #PB_Event_CloseWindow End
Запустите! И поймете что я хочу!
Icon_25 = Menu:Templates
Action_25 = Menu:Templates
Оказывается все не так и сложно , а вот через настройки редактора никак.
И поймете что я хочу
??? код не запускается или что ?
Дмитрий, это надо ?
InitNetwork() Enumeration #Window_0 #Text_1 #Button_0 #Text_0 EndEnumeration OpenWindow(#Window_0, 5, 5, 190, 270, "", #PB_Window_SystemMenu |#PB_Window_ScreenCentered) SetWindowColor(#Window_0,$717171) TextGadget(#Text_0, 0, 30, 190, 190, "") ButtonGadget(#Button_0, 50, 230, 70, 30, "load") Repeat Event.l = WaitWindowEvent() Select Event Case #PB_Event_Gadget Select EventGadget() Case #Button_0 SetGadgetText(#Text_0,"CraSocer...") ReceiveHTTPFile("http://www.bashorg.org/casual","file.html") ;------------------------------- If ReadFile(0, "file.html") While Eof(0) = #False string.s= ReadString(0) rez.s=Between(string, "<div><div id='news-id-", "</div> </div>") If rez.s <> "" ;Debug rez SetGadgetText(#Text_0,rez) EndIf Wend CloseFile(0) EndIf ;---------------------------------- EndSelect EndSelect Until Event = #PB_Event_CloseWindow End
Отредактировано mirashic (08.10.2010 12:47:20)
Подскажите пожалуйста, почему при загрузке файла, SetTimer не работает? Или это только у меня такой глюк, или в исходнике что не так?
InitNetwork() If OpenWindow(0,0,0,150,30,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) EndIf Procedure Proc() If vik=1 Debug 11 EndIf EndProcedure SetTimer_(WindowID(0),1,100,@Proc()) If OpenFTP(0, "mneniya.ucoz.ru", "логин", "пароль") If ExamineFTPDirectory(0) SetFTPDirectory(0, "NewFiles") file.s=OpenFileRequester("Выбрать файл", "", "*.*", 0) If file VIK=1 Result = SendFTPFile(0,file , GetFilePart(file)) EndIf Repeat event=WaitWindowEvent() Until event=#PB_Event_CloseWindow EndIf EndIf
по сути у тебя выполняется такой код :
InitNetwork() If OpenWindow(0,0,0,150,30,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) EndIf If OpenFTP(0, "mneniya.ucoz.ru", "логин", "пароль") EndIf
соединения нет и не выполняется код
Repeat event=WaitWindowEvent() Until event=#PB_Event_CloseWindow
окно сразу не преподает из за попытки соединения
(вынеси его за условие IF)
Отредактировано mirashic (11.10.2010 20:48:51)
Олег! Понятное дело, истинный логин и пароль я убрал из листинга. Подключение есть, я бывает конечно туплю, но не на столько же... Файл отправляется, но процедура при отправке не работает.
Чтобы было все натурально нашел в справке FTP:
Вот листинг:
InitNetwork() If OpenWindow(0,0,0,150,30,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) EndIf Procedure Proc() If vik=1 Debug 11 EndIf EndProcedure SetTimer_(WindowID(0),1,100,@Proc()) If OpenFTP(0, "ftp.free.fr", "anonymous", "") If ExamineFTPDirectory(0) ;SetFTPDirectory(0, "NewFiles") file.s=OpenFileRequester("Выбрать файл", "", "*.*", 0) If file VIK=1 Result = SendFTPFile(0,file , GetFilePart(file)) EndIf Repeat event=WaitWindowEvent() Until event=#PB_Event_CloseWindow EndIf EndIf
Отредактировано haav (11.10.2010 21:07:00)
Да забыл в этом листинге указать переменной VIK значение ГЛОБАЛ, в реальном у меня указано, но все равно не работает
Отредактировано haav (11.10.2010 21:14:51)
Похоже для нормальной работы таймера, нужно регулярно вызывать функцию WaitWindowEvent()
Ест два пути решения проблемы. Или юзать потоки или использовать ассинхронный режим передачи файла на FTP сервер.
Да только хотел написать про глобал, у меня работает...
указываю свой логин и пароль
InitNetwork() If OpenWindow(0,0,0,150,30,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) EndIf Global vik Procedure Proc() If vik=1 Debug 11 EndIf EndProcedure SetTimer_(WindowID(0),1,100,@Proc()) If OpenFTP(0, "ftp.narod.ru", "логин", "пароль") If ExamineFTPDirectory(0) ;SetFTPDirectory(0, "NewFiles") file.s=OpenFileRequester("Выбрать файл", "", "*.*", 0) If file VIK=1 ;Result = SendFTPFile(0,file , GetFilePart(file)) EndIf Repeat event=WaitWindowEvent() Until event=#PB_Event_CloseWindow EndIf EndIf
может всё таки нет соединения...
Отредактировано mirashic (11.10.2010 21:23:20)
;Result = SendFTPFile(0,file , GetFilePart(file))
Если эту строку закомментить, то и меня работает. Если убрать в процедуре If vik=1, то перед отправкой работает, после тоже, а во время отправки встает.
Да я отправлял малые текстовые файлы и не увидел.
Я с этим уже сталкивался... склероз...
Result = SendFTPFile(0,file , GetFilePart(file),#True)
функция может работать в потоке...
Отредактировано mirashic (11.10.2010 21:39:51)
Похоже для нормальной работы таймера, нужно регулярно вызывать функцию WaitWindowEvent()Ест два пути решения проблемы. Или юзать потоки или использовать ассинхронный режим передачи файла на FTP сервер.
Вчера сразу не въехал. Надо всегда делать так: не получается, оставь на другой день. И Петр подсказку правильную сделал.... Действительно все дело в асинхронной передаче файлов:
Result = SendFTPFile(0,file , GetFilePart(file),1)
Благодарю!
Допустим я запустил программу с нужным мне параметром, который буду выводить в редакторе:
RunProgram("prog.exe","aaa","")
А теперь мне нужно послать ей еще один параметр, который в редакторе будет ниже строчкой. Возможно ли это?
RunProgram("prog.exe","aaa "+"bbb","")
Я наверно не так выразился
Вот код принимающий:
a.s= ProgramParameter() Enumeration #Window_0 EndEnumeration Procedure Open_Window_0() If OpenWindow(#Window_0, 429, 376, 375, 300, "Окно", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered ) EditorGadget(0,10,10,200,200) EndIf EndProcedure Open_Window_0() SetGadgetText(0,a) Repeat event=WaitWindowEvent() Until event=#PB_Event_CloseWindow
А это отправляющий(другой файл):
RunProgram("prog.exe","aaa","") Delay(5000) RunProgram("prog.exe","aaa"+"bbb","")
В результате открываются два файла. А мне надо, чтобы в первом открывшемся файле в редакторе просто к строке ааа прибавилось bbb. Конечно можно намутить с помощью PostMessage , но может через консоль тоже можно попроще...
Отредактировано haav (18.10.2010 21:31:23)
Сравни мой вариант "aaa "+"bbb" и твой "aaa"+"bbb"
Найди одно отличие.
Сравни мой вариант "aaa "+"bbb" и твой "aaa"+"bbb"
В пробеле? Так все равно два файла открываются и в обоих ааа.
А bbb вообще не приходит как параметр...
По моему, моя твоя не понимать.
Вот код
a.s= ProgramParameter(0) b.s= ProgramParameter(1) Enumeration #Window_0 EndEnumeration Procedure Open_Window_0() If OpenWindow(#Window_0, 429, 376, 375, 300, "Окно", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered ) EditorGadget(0,10,10,200,200) EndIf EndProcedure Open_Window_0() AddGadgetItem(0,-1,a) AddGadgetItem(0,-1,b) Repeat event=WaitWindowEvent() Until event=#PB_Event_CloseWindow
Вот командная строка aa bb
По моему, моя твоя не понимать.
Извини дружище Видно не умею правильно задавать вопросы. Работает не так. Мне нужен принцип Purebasic Debug. То есть доходит программа до макроса Debug arg, вместо слова DEBUG компилятор вставляет вызов моей проги с окошком, которое выводит arg. Если вызов один, то все нормально, а если 20-30 , то столько же окон откроется, да в параметры компилятора ведь не будешь вписывать 100 или 200 параметров... В общем как это проще реализовать скажем на примере пуриковского редактора. Я наверно тебя уже задергал..
Отредактировано haav (19.10.2010 17:58:36)
вызов один, то все нормально, а если 20-30 , то столько же окон откроется
То есть проге через командную строку будут переданы несколько параметров и каджый параметр должен быть открыт в новом окне?
да в параметры компилятора ведь не будешь вписывать 100 или 200 параметров
Это всего лишь симуляция передачи данных через командуную строку для отладки.
То есть проге через командную строку будут переданы несколько параметров и каджый параметр должен быть открыт в новом окне?
Как раз в одном окне все параметры должны быть выведены. Но параметры передаются не одновременно и их кол-во заранее не определено.
Я написал выше прототип debug(пуриковский)
Например:
a=5
debug a (debug является макросом, вместо его вставляем Runprogram)
b=6
debug b
куча инструкций
--
--
debug c
Или runprogram всегда будет открывать копию проги?
Но параметры передаются не одновременно
Параметры передаются через командную строку только при запуске проги!
PS.
Что требуется запускать только одну копию проги и открывать все файлы в ней?
Что требуется запускать только одну копию проги и открывать все файлы в ней?
Да, только не файлы а результаты работы функций(обыкновенные строки). Но раз ты говоришь, что параметры можно только при запуске, а во время работы нет, тогда наверно надо смотреть в сторону sendMessage или PostMessage. Я думал, что работающей программе можно отправлять как нибудь параметры через командную строку, так чтобы не запускать еще одну копию приложения Ладно в любом случае спасибо.
тогда наверно надо смотреть в сторону sendMessage или PostMessage.
Да, это будет хороший вариант.
Доброго времени.
haav
Я не знаю смысла вашей задачи, но может поможет WriteProgramString(Program, String$)
, при условии, что RunProgram() запущен с флагом #PB_Program_Open и #PB_Program_Write
Спасибо lakomet за отклик, но данная функция, насколько я понял, работает в консольных приложениях, так что мне не подойдет. Ладно я уже определился, буду использовать PostMessage
haav
будь добр, выложи как завершишь, для примера, общение двух программ с помощью PostMessage... Просто я когда-то применял Pipe для данной цели, но что-то мне подсказывает, что "sendMessage или PostMessage" будет по "трудозатратам" выгоднее применять.....
Зачем ждать? Pablov на другом форуме выложил простой пример работы PostMessage:
Открой блокнот, сделай его неактивным и выполни этот код
hwin.l hwin = FindWindow_("Notepad", NULL) If hwin <> 0 SetWindowPos_(hwin, #HWND_BOTTOM, 1, 1, 500, 500, 0) ; Меняем позицию и размеры окна SetWindowText_(hwin, "Хе-хе... ") ; Меняем заголовок окна hedit=FindWindowEx_(hwin,0,"Edit",0) ; PostMessage_(hedit,#WM_KEYDOWN, #VK_S,1) ; пишем в Блокноте PostMessage_(hedit,#WM_KEYDOWN, #VK_E,1) PostMessage_(hedit,#WM_KEYDOWN, #VK_R,1) PostMessage_(hedit,#WM_KEYDOWN, #VK_E,1) PostMessage_(hedit,#WM_KEYDOWN, #VK_Z,1) PostMessage_(hedit,#WM_KEYDOWN, #VK_A,1) Sleep_(5000) PostMessage_(hwin, #WM_QUIT, 0, 0) ; Киляем Блокнот EndIf
В принципе этот код с заменой отправляемого MSG и названия моего окна вполне пригоден.
P.S.
Kvitaly целую кучу примеров навыкладывал по работе с функциями SendMessage и PostMessage. Достаточно забить в поиске по форуму: http://purebasic.info/phpBB2/index.php
Вопросы новичка (продолжение…) | Вопросы по PureBasic | 29.06.2024 |
Скорее, это теоретический вопрос о правах в директории. | OffTop | 16.09.2022 |
Вопрос по отладке | Вопросы по PureBasic | 26.01.2017 |
Три вопроса по созданию браузера. | Вопросы по PureBasic | 01.11.2010 |
вопрос о точности типов данных | Вопросы по PureBasic | 20.05.2021 |
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка