PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка


Вопросы новичка

Сообщений 751 страница 780 из 1000

751

Если намутить такую запись:

Код:
Icon_25 = Tool:Templates
Action_25 = Menu:Templates

То панель появляется, осталось иконку привязать   :hobo:

0

752

Ребят так объяснять долго , вот :

Код:
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

Запустите! И поймете что я хочу! :-)

0

753

Icon_25 = Menu:Templates
Action_25 = Menu:Templates

Оказывается все не так и сложно  :D , а вот через настройки редактора никак.

0

754

Дмитрий написал(а):

И поймете что я хочу

??? код не запускается или что ?

0

755

Дмитрий, это надо ?

Код:
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)

0

756

Подскажите пожалуйста, почему при загрузке файла, 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

0

757

по сути у тебя выполняется такой код :

Код:
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)

0

758

Олег! Понятное дело, истинный логин и пароль я убрал из листинга. Подключение есть, я бывает конечно туплю, но не на столько же...  :D  Файл отправляется, но процедура при отправке не работает.

Чтобы было все натурально нашел в справке 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)

0

759

Да забыл в этом листинге указать переменной VIK значение ГЛОБАЛ, в реальном у меня указано, но все равно не работает  o.O

Отредактировано haav (11.10.2010 21:14:51)

0

760

Похоже для нормальной работы таймера, нужно регулярно вызывать функцию WaitWindowEvent()
Ест два пути решения проблемы. Или юзать потоки или использовать ассинхронный режим передачи файла на FTP сервер.

0

761

Да только хотел написать про глобал, у меня работает...

указываю свой логин и пароль

Код:
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)

0

762

mirashic написал(а):

;Result = SendFTPFile(0,file , GetFilePart(file))

Если эту строку закомментить, то и меня работает. Если убрать в процедуре If vik=1, то перед отправкой работает, после тоже, а во время отправки встает.

0

763

Да я отправлял малые текстовые файлы и не увидел.

Я с этим уже сталкивался... склероз...

Result = SendFTPFile(0,file , GetFilePart(file),#True)

функция может работать в потоке...

Отредактировано mirashic (11.10.2010 21:39:51)

0

764

Пётр написал(а):

Похоже для нормальной работы таймера, нужно регулярно вызывать функцию WaitWindowEvent()Ест два пути решения проблемы. Или юзать потоки или использовать ассинхронный режим передачи файла на FTP сервер.

Вчера сразу не въехал. Надо всегда делать так: не получается, оставь на другой день. И Петр подсказку правильную сделал.... Действительно все дело в асинхронной передаче файлов:

Result = SendFTPFile(0,file , GetFilePart(file),1)

Благодарю!

0

765

Допустим я запустил программу с нужным мне параметром, который буду выводить в редакторе:

Код:
RunProgram("prog.exe","aaa","")

А теперь мне нужно послать ей еще один параметр, который в редакторе будет ниже строчкой. Возможно ли это?

0

766

Код:
RunProgram("prog.exe","aaa "+"bbb","")

0

767

Я наверно не так выразился  :blush:
Вот код принимающий:

Код:
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)

0

768

Сравни мой вариант "aaa "+"bbb" и твой "aaa"+"bbb"
Найди одно отличие.

0

769

Пётр написал(а):

Сравни мой вариант "aaa "+"bbb" и твой "aaa"+"bbb"

В пробеле?  Так все равно два файла открываются и в обоих ааа. 
А bbb вообще не приходит как параметр...

0

770

По моему, моя твоя не понимать.
Вот код

Код:
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

http://s43.radikal.ru/i102/1010/5a/a3b3c034e5c5.png

0

771

Пётр написал(а):

По моему, моя твоя не понимать.

Извини дружище  :blush:  Видно не умею правильно задавать вопросы. Работает не так. Мне нужен принцип Purebasic Debug.  То есть доходит программа до макроса Debug arg,  вместо слова DEBUG компилятор вставляет вызов моей проги с окошком, которое выводит  arg. Если вызов один, то все нормально, а если 20-30 , то столько же окон откроется, да в параметры компилятора ведь не будешь вписывать 100 или 200 параметров...   В общем как это проще реализовать скажем на примере пуриковского редактора. Я наверно тебя уже задергал..

Отредактировано haav (19.10.2010 17:58:36)

0

772

haav написал(а):

вызов один, то все нормально, а если 20-30 , то столько же окон откроется

То есть проге через командную строку будут переданы несколько параметров и каджый параметр должен быть открыт в новом окне?

haav написал(а):

да в параметры компилятора ведь не будешь вписывать 100 или 200 параметров

Это всего лишь симуляция передачи данных через командуную строку для отладки.

0

773

Пётр написал(а):

То есть проге через командную строку будут переданы несколько параметров и каджый параметр должен быть открыт в новом окне?

Как раз в одном окне все параметры должны быть выведены. Но параметры передаются не одновременно и их кол-во заранее не определено.
Я написал выше прототип debug(пуриковский)

Например:

a=5
debug a (debug является макросом, вместо его вставляем Runprogram)
b=6
debug b
куча инструкций
--
--
debug c

Или runprogram всегда будет открывать копию проги?

0

774

haav написал(а):

Но параметры передаются не одновременно

Параметры передаются через командную строку только при запуске проги!

PS.
Что требуется запускать только одну копию проги и открывать все файлы в ней?

0

775

Пётр написал(а):

Что требуется запускать только одну копию проги и открывать все файлы в ней?

Да, только не файлы а результаты работы функций(обыкновенные строки). Но раз ты говоришь, что параметры можно только при запуске, а во время работы нет, тогда наверно надо смотреть в сторону sendMessage или PostMessage. Я думал, что работающей программе можно отправлять как нибудь параметры через командную строку, так чтобы не запускать еще одну копию приложения  :(  Ладно в любом случае спасибо.

0

776

haav написал(а):

тогда наверно надо смотреть в сторону sendMessage или PostMessage.

Да, это будет хороший вариант.

0

777

Доброго времени.
haav
Я не знаю смысла вашей задачи, но может поможет WriteProgramString(Program, String$)
, при условии, что RunProgram() запущен с флагом #PB_Program_Open и #PB_Program_Write

0

778

Спасибо lakomet за отклик, но данная функция, насколько я понял, работает в консольных приложениях, так что мне не подойдет. Ладно я уже определился, буду использовать PostMessage

0

779

haav написал(а):

haav

будь добр, выложи как завершишь, для примера, общение двух программ с помощью PostMessage...  Просто я когда-то применял Pipe для данной цели, но что-то мне подсказывает, что "sendMessage или PostMessage" будет по "трудозатратам"  :stupor:  выгоднее применять.....

0

780

Зачем ждать? 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

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка