Если намутить такую запись:
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 » Вопросы новичка