Четверг, 08.12.2022, 10:42
PureBasic - кроссплатформенный язык программирования
Главная Форум Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
PureBasic - форум » Вопросы по PureBasic (Windows) » Вопросы новичков » Прикручивание консоли
Прикручивание консоли
MetallДата: Понедельник, 15.08.2011, 20:05 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Offline
Доброго времени суток, подскажите пожалуйста как можно *прикрутить* в одном окне консоль?! Т.е примерно как тут http://web.newsguy.com/lmgava/ip2c/ (первый скриншот). Только там 2 а мне нужна одна. Не получается создать такое окно sad
Я пытаюсь написать Gui к консольной проге. И представляю, чтобы при ходе работы в этой консоле отображался ход работы проги!


Сообщение отредактировал Metall - Понедельник, 15.08.2011, 20:06
 
filsДата: Вторник, 16.08.2011, 14:02 | Сообщение # 2
Сержант
Группа: Администраторы
Сообщений: 24
Статус: Offline
Там не консоль в окне, а текстовый редактор.
Что-то типа этого.
Code
  If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
      EditorGadget(0, 8, 8, 306, 133, #PB_Editor_ReadOnly)
      SetGadgetColor(0, #PB_Gadget_FrontColor, $FFFFFF) ; Цвет текста.
      SetGadgetColor(0, #PB_Gadget_BackColor, 0) ; Цвет фона.
      SetGadgetFont(0, LoadFont(0, "Lucida Console", 10)) ; Шрифт как в консоли.
      For a = 0 To 5
        AddGadgetItem(0, a, "Line "+Str(a))
      Next
      Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
    EndIf


Quote (Metall)
чтобы при ходе работы в этой консоле отображался ход работы проги!

Вот похожий код на примере выполнения команды dir в cmd.exe.
Code
Procedure GetConsole(*bool)
Prog = RunProgram("cmd.exe","","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write|#PB_Program_Hide)   
   If Prog   
     WriteProgramStringN(Prog, "dir")   
     Delay(100)   
     While AvailableProgramOutput(Prog)>1
       String.s = ReadProgramString(Prog)
       If String<>""
        OemToChar_(String, String)
        AddGadgetItem(0, -1, String)
       EndIf
     Wend
     KillProgram(Prog)
     CloseProgram(Prog)
       
   EndIf
     
EndProcedure
     
     If OpenWindow(0, 0, 0, 722, 550, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
      EditorGadget(0, 8, 8, 706, 533, #PB_Editor_ReadOnly)
      SetGadgetColor(0, #PB_Gadget_FrontColor, $FFFFFF) ; Цвет текста.
      SetGadgetColor(0, #PB_Gadget_BackColor, 0) ; Цвет фона.
      SetGadgetFont(0, LoadFont(0, "Lucida Console", 10)) ; Шрифт как в консоли.
      CreateThread(@GetConsole(), 0)
      Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
    EndIf

В настройках компилятора нужно отметить пункт "Создать приложение с безопасным потоком".
А в выпадающем списке "Формат исполняемого файла", выбрать пункт "Console".
 
MetallДата: Вторник, 16.08.2011, 21:07 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Offline
fils, т.е в текстовый редакторе будет отображаться выполнение какого-нибудь действия!? А есть какие-нибудь исходники что показывает мониторинг исходящей скорости интернета?!
 
filsДата: Среда, 17.08.2011, 01:09 | Сообщение # 4
Сержант
Группа: Администраторы
Сообщений: 24
Статус: Offline
Quote (Metall)
А есть какие-нибудь исходники что показывает мониторинг исходящей скорости интернета?!
Есть.
Например этот.
 
MetallДата: Пятница, 19.08.2011, 18:14 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Offline
fils, Спасибо, но нет ли чего-нибудь другого!? Просто чтобы показывало какова отдающая скорость на данный момент времени, и ничего больше!

Сообщение отредактировал Metall - Пятница, 19.08.2011, 18:14
 
filsДата: Пятница, 19.08.2011, 20:57 | Сообщение # 6
Сержант
Группа: Администраторы
Сообщений: 24
Статус: Offline
Упрощенный вариант.
В окно отладки выводится текущая исходящая скорость в КБ.
Code
Structure WideChar  
   Hi.c  
   Lo.c  
EndStructure  

Structure TMibIfRow  
   wszName.WideChar[256]  
   dwIndex.l  
   dwType.l  
   dwMtu.l  
   dwSpeed.l  
   dwPhysAddrLen.l  
   bPhysAddr.c[8]  
   dwAdminStatus.l  
   dwOperStatus.l  
   dwLastChange.l  
   dwInOctets.l  
   dwInUcastPkts.l  
   dwInNUCastPkts.l  
   dwInDiscards.l  
   dwInErrors.l  
   dwInUnknownProtos.l  
   dwOutOctets.l  
   dwOutUCastPkts.l  
   dwOutNUCastPkts.l  
   dwOutDiscards.l  
   dwOutErrors.l  
   dwOutQLen.l  
   dwDescrLen.l  
   bDescr.c[256]  
EndStructure  

Structure TMibIfArray  
   Array.TMibIfRow[513]  
EndStructure  

Structure TMibIfTable  
   dwNumEntries.l  
   Table.TMibIfArray  
EndStructure

Structure TMac  
   Array.c[8]  
EndStructure  

Procedure$ GetMAC(*Value.TMac, Length.l)  
   Protected Result$  
   Static i.l  
   If Length  
     For i = 0 To Length-2  
       Result$ + RSet(Hex(*Value\Array[i]),2,"0") + "-"  
     Next  
     Result$ + RSet(Hex(*Value\Array[Length-1]),2,"0")  
   Else  
     Result$ = "00-00-00-00-00-00"  
   EndIf  
   ProcedureReturn Result$  
EndProcedure  

Procedure.q Traffic()  
   Protected Table.TMibIfTable, Result.q, Size
    
   Size = SizeOf(TMibIfTable)
   If GetIfTable_(@Table, @Size, #False) = 0  
     For i = 0 To (Table\dwNumEntries - 1)  
       If  GetMAC(@Table\Table\Array[i]\bPhysAddr, Table\Table\Array[i]\dwPhysAddrLen) <> "00-00-00-00-00-00"
         Result = Table\Table\Array[i]\dwOutOctets   
         Break
       EndIf  
     Next  
   EndIf  
    
   ProcedureReturn Result  
EndProcedure  

x.q=0 : y.q=Traffic()
Repeat
   x=Traffic()  
   Debug (x-y)/1024
   y=x
   Delay(1000)
ForEver
 
MetallДата: Суббота, 20.08.2011, 09:19 | Сообщение # 7
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Offline
fils, у меня ругается на 64 строчке...
http://s60.radikal.ru/i170/1108/ac/847d12fcd465.jpg
 
filsДата: Суббота, 20.08.2011, 12:29 | Сообщение # 8
Сержант
Группа: Администраторы
Сообщений: 24
Статус: Offline
Quote (Metall)
ругается на 64 строчке
Использовалась демо версия PureBasic?
В ней по умолчанию не объявлены WinAPI функции.
Их нужно или самому объявить или использовать полную версию.
 
MetallДата: Суббота, 20.08.2011, 12:54 | Сообщение # 9
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Offline
fils, Скачал и установил что вы давали в этой теме http://purebasic.ucoz.ru/forum/5-5-1
Но у меня больше не выскакивало окошко, что у меня *демо* версия и тд... А где взять эти функции и как их ставить?!
 
filsДата: Суббота, 20.08.2011, 14:54 | Сообщение # 10
Сержант
Группа: Администраторы
Сообщений: 24
Статус: Offline
Quote (Metall)
А где взять эти функции и как их ставить?
В полной версии все уже есть.
Возможно она была установлена поверх демонстрационной, поэтому возникла подобная ошибка. Попробуйте переустановить предварительно удалив текущую.
 
PureBasic - форум » Вопросы по PureBasic (Windows) » Вопросы новичков » Прикручивание консоли
  • Страница 1 из 1
  • 1
Поиск:

Копировать материалы сайта без разрешения автора, ЗАПРЕЩЕНО!

Сделать бесплатный сайт с uCoz