Metall | Дата: Понедельник, 15.08.2011, 20:05 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Offline
| Доброго времени суток, подскажите пожалуйста как можно *прикрутить* в одном окне консоль?! Т.е примерно как тут http://web.newsguy.com/lmgava/ip2c/ (первый скриншот). Только там 2 а мне нужна одна. Не получается создать такое окно Я пытаюсь написать 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) А где взять эти функции и как их ставить? В полной версии все уже есть. Возможно она была установлена поверх демонстрационной, поэтому возникла подобная ошибка. Попробуйте переустановить предварительно удалив текущую.
|
|
| |