AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
ChkDskGui (PureBasic)
Исходник + EXE, v4.2 (x86, x64)Скачать yadi.sk upload.eeвременная версия
Последний раз редактировалось: AZJIO (2024-11-07 09:05), всего редактировалось 44 раз(а)
|
Joker-2013
- Стаж: 9 лет 5 месяцев
- Сообщений: 2053
- Репутация:120[+] [-]
- Откуда: из прошлого
|
53736nikzzzz, Добавил возможность изменения размера окна: Подправил код в данном сообщении, теперь у окна примера имеется иконка и появляется запрос на закрытии окна, если выполняется сканирование диска. Добавил ещё и авто прокрутку текста. AZJIO, Вроде всё круто... Осталось тебе, всё в кучу собрать... Во вложении, "тяжелое" решение от Bluecon (как пример фейса)
|
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
А если сделать листвью высотой в 4 пункта с галками выбора, а снизу консоль результатов?
|
Joker-2013
- Стаж: 9 лет 5 месяцев
- Сообщений: 2053
- Репутация:120[+] [-]
- Откуда: из прошлого
|
AZJIO, По мне, так лучше двух оконных мастер. В первом как в блуконе выбор дисков ListIconGadget, с чек боксами (ты же хотел множественный выбор) А во втором, вывод консоли... Или ты хочешь по типу, моей утилиты по сбросу паролей? В принципе и в одно оконном варианте, будет всё клёво и удобно. Можно и статус бар прикрутить и вывод текущего времени... + время выполнения Дерзай, что знаю, тем помогу...
|
Joker-2013
- Стаж: 9 лет 5 месяцев
- Сообщений: 2053
- Репутация:120[+] [-]
- Откуда: из прошлого
|
Вот ещё нашел... Можно не использовать горизонтальную прокрутку и переносить текст, если ширина окна меньше... Сразу после создания гаджета EditorGadget пишем строку:SendMessage_(GadgetID(0),#EM_SETTARGETDEVICE, #Null, 0) В итоге, даже в таком окне, умещается вся информация:
Дополнительная информацияImport "user32.lib" OemToCharBuffA(*Buff,*Buff1,SizeBuff) EndImport Procedure.s ReadProgramStringOem(iPid) Protected Ret$="" Protected SizeBuff=AvailableProgramOutput(iPid) If SizeBuff>0 Protected *Buff=AllocateMemory(SizeBuff) ReadProgramData(iPid,*Buff,SizeBuff) OemToCharBuffA(*Buff,*Buff,SizeBuff) Ret$=PeekS(*Buff,SizeBuff,#PB_Ascii) FreeMemory(*Buff) EndIf ProcedureReturn Ret$ EndProcedure Procedure.s Cn(Str$) Protected i,j=1,Ret$="",Sym$,Str1$="",Flag=0 Str$=ReplaceString(Str$,Chr(13)+Chr(10),Chr(12)) For i=1 To Len(Str$) Sym$=Mid(Str$,i,1) Select Sym$ Case Chr(12) Ret$+Str1$+Chr(13)+Chr(10) Str1$="" Case Chr(13) Flag=1 Default If Flag:Str1$="":Flag=0:EndIf Str1$+Sym$ EndSelect Next Ret$+Str1$ ProcedureReturn Ret$ EndProcedure Procedure EditorEndLine(Gadget) Protected sel.CHARRANGE, GadgetID, LineEnd GadgetID=GadgetID(Gadget) LineEnd = SendMessage_(GadgetID, #EM_GETLINECOUNT, 0, 0)-1 sel\cpMin=SendMessage_(GadgetID, #EM_LINEINDEX, LineEnd, 0) sel\cpMax=sel\cpMin SendMessage_(GadgetID, #EM_EXSETSEL, 0, @sel) EndProcedure Procedure Chkdsk() ; Protected iPid = RunProgram("cmd.exe", "/c tracert usbtor.ru", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide) ; Protected iPid = RunProgram("cmd.exe", "/c chkdsk d: /f /x", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide) Protected iPid = RunProgram("cmd.exe", "/c chkdsk c: ", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide) Protected Str$,Text$="" If iPid While ProgramRunning(iPid) If WaitWindowEvent(100) = #PB_Event_CloseWindow If MessageRequester("Внимание!", "Идет сканирование диска..."+Chr(10)+"Закрыть программу?", #PB_MessageRequester_YesNo | #MB_ICONQUESTION)=6 CloseProgram(iPid) End EndIf EndIf Str$=ReadProgramStringOem(iPid) If Str$ Text$+Str$ SetGadgetText(0,Cn(Text$)+Chr(13)+Chr(10)) EditorEndLine(0) EndIf Wend CloseProgram(iPid) ; Close the connection to the program EndIf EndProcedure Procedure SizeWindowHandler() ResizeGadget(0,0,0,WindowWidth(0),WindowHeight(0)) EndProcedure OpenWindow(0, 44, 16, 700, 300, "CHKDSK GUI", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget) SendMessage_(WindowID(0),#WM_SETICON,0,ExtractIcon_(0,"Shell32.dll",270)) BindEvent(#PB_Event_SizeWindow, @SizeWindowHandler()) SmartWindowRefresh(0, #True) WindowBounds(0, 500, 200, #PB_Ignore, #PB_Ignore) EditorGadget(0, 0, 0, 700, 300, #PB_Editor_ReadOnly) SendMessage_(GadgetID(0),#EM_SETTARGETDEVICE, #Null, 0) LoadFont(0, "Courier New", 10) SetGadgetFont(0, FontID(0)) Chkdsk() Repeat Until WaitWindowEvent() = #PB_Event_CloseWindow
|
Joker-2013
- Стаж: 9 лет 5 месяцев
- Сообщений: 2053
- Репутация:120[+] [-]
- Откуда: из прошлого
|
Если по простому (и быстро), то можно сделать такое окно:
Или так:
По умолчанию показывать справку к утилите (гую или вывод справки консольной утилиты)]
|
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
Joker-2013, можно изначально не отображать консоль, а выдвинуть в момент старта. Кстати в убунту при обновлении такой же фейс, снизу кнопка "Подробно", нажал, вылезла консоль, а у нас при нажатии "Старт" она выдвигается. Я уже делал такое в своём калькуляторе и TextReplace
|
Joker-2013
- Стаж: 9 лет 5 месяцев
- Сообщений: 2053
- Репутация:120[+] [-]
- Откуда: из прошлого
|
AZJIO, Так у меня в SFX конструкторе так же... Тебе, как автору решать, какой фейс будет у утилиты... мне лично, не нравятся окна с "выездом" Но я так понял, что тема совсем не о утилите... Она лишь как тестовый образец для изучения кода и решений...
|
cartmenezz
- Стаж: 9 лет 2 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
так это ж надо чтоб сам CheckDisk это умел) а он разве умеет?
|
Joker-2013
- Стаж: 9 лет 5 месяцев
- Сообщений: 2053
- Репутация:120[+] [-]
- Откуда: из прошлого
|
cartmenezz, А зачем ему уметь то? в проге ставим в очередь и вперед... Дело не сложное, код уже почти весь имеется. Нужно только всё в кучу собрать, да фейс придумать и реализовать... Мне вот, например утиль не интересна... Только решения.
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
53752возможность программы сканировать сразу несколько дисков параллельно Это имеет смысл только при сканировании разделов, находящихся на разных физических дисках , если одновременно сканировать разделы на одном диске, это приведет к сильной потери скорости по сравнению с последовательным сканированием, особого смысла не вижу.
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
Joker-2013,А к стати, не попадалась ли информация, как уменьшить мерцания при обновлении окна ? Можно, конечно на графику перейти, но не хочется все усложнять.
|
Отправлено: 13-Май-2018 15:14
(спустя 1 час 18 минут)
Joker-2013
- Стаж: 9 лет 5 месяцев
- Сообщений: 2053
- Репутация:120[+] [-]
- Откуда: из прошлого
|
nikzzzz, так в коде, что я выкладывал, есть команда пьюрика SmartWindowRefresh(1, #True) ... Есть еще у меня код API (пару строчек), отключает и включает перерисовку объектов...SendMessage_(GadgetID(40),#WM_SETREDRAW,#False,0) ; заполнение списка SendMessage_(GadgetID(40),#WM_SETREDRAW,#True,0) RedrawWindow_(GadgetID(40), #Null, #Null, #RDW_ERASE | #RDW_FRAME | #RDW_INVALIDATE | #RDW_ALLCHILDREN) Второе, очень убыстряет процесс заполнения списков в гаджете.как уменьшить мерцания при обновлении окна Смотря как обновляешь... В моей программе, есть окно: информация о пользователи, так мерцание можно и совсем убрать, но тогда пользователь не поймет что оно обновилось. Сейчас, вполне приемлемо...
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
Joker-2013, Я имел ввиду общее решение, вот пример.Procedure SizeWindowHandler() ResizeGadget(0,0,0,WindowWidth(0),WindowHeight(0)) EndProcedure OpenWindow(0, 44, 16, 700, 300, "CHKDSK GUI", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget) SendMessage_(WindowID(0),#WM_SETICON,0,ExtractIcon_(0,"Shell32.dll",270)) BindEvent(#PB_Event_SizeWindow, @SizeWindowHandler()) SmartWindowRefresh(0, #True) WindowBounds(0, 500, 200, #PB_Ignore, #PB_Ignore) EditorGadget(0, 0, 0, 700, 300, #PB_Editor_ReadOnly) SendMessage_(GadgetID(0),#EM_SETTARGETDEVICE, #Null, 0) Courier_New=LoadFont(0, "Courier New", 10) SetGadgetFont(0, Courier_New) Text$="Тип файловой системы: NTFS." +Chr(13)+Chr(10) Text$ +"Тип файловой системы: NTFS." +Chr(13)+Chr(10) Text$ + "Тип файловой системы: NTFS." +Chr(13)+Chr(10) Text$ + "Тип файловой системы: NTFS." SetGadgetFont(0, LoadFont(0, "Courier New", 10)) Repeat SetGadgetText(0,Text$+Chr(13)+Chr(10)) Until WaitWindowEvent(1) = #PB_Event_CloseWindow
|
Страница 4 из 34
Текущее время: 24-Ноя 19:13
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|