Автор | Сообщение |
|
| |
Пост N: 54
Зарегистрирован: 23.06.08
|
|
Отправлено: 04.12.09 22:36. Заголовок: Цветной ProgressBar
Здравствуйте ! У меня возник вопрос: как сделать цветной ProgressBar ? Наткнулся на статью по Delphi. Но ничего не пойму, как это реализовать в MiniGUI...
| |
|
Ответов - 9
[только новые]
|
|
|
| |
Пост N: 56
Зарегистрирован: 23.06.08
|
|
Отправлено: 07.12.09 23:16. Заголовок: Подскажите тогда ссы..
Подскажите тогда ссылку на английский форум, может там ответят...
| |
|
|
| постоянный участник
|
Пост N: 771
Зарегистрирован: 09.10.06
|
|
Отправлено: 07.12.09 23:58. Заголовок: Посмотрите в исходни..
Посмотрите в исходники - это уже давно реализовано
| |
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 08.12.09 00:08. Заголовок: может пригодится при..
может пригодится примерчик на FWH ?
| |
|
|
| постоянный участник
|
Пост N: 773
Зарегистрирован: 09.10.06
|
|
Отправлено: 08.12.09 00:20. Заголовок: fil пишет: может пр..
fil пишет: цитата: | может пригодится примерчик на FWH ? |
| Так пример в MiniGUI тоже имеется, так кто ж туда смотреть хочет..
| |
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 08.12.09 00:54. Заголовок: Нет пророка.....
Нет пророка...
| |
|
|
| |
Пост N: 57
Зарегистрирован: 23.06.08
|
|
Отправлено: 08.12.09 10:42. Заголовок: Петр пишет: Посмотр..
Петр пишет: цитата: | Посмотрите в исходники - это уже давно реализовано |
| А какие исходники смотреть ? Подскажите пожалуйста.
| |
|
|
| модератор
|
Пост N: 1119
Зарегистрирован: 25.05.05
|
|
Отправлено: 08.12.09 13:16. Заголовок: SkyNET пишет: У мен..
SkyNET пишет: цитата: | У меня возник вопрос: как сделать цветной ProgressBar ? |
| Я догадываюсь, чем вызван этот вопрос Дело в том, что использовать цветной ProgressBar на WinXP и выше не получится, если включена поддержка тем. Решение было предложено на официальном форуме HMG - надо использовать пользовательский "нарисованный" ProgressBar. Рабочий пример см. ниже: Скрытый текст #include "minigui.ch" function main define window sample at 0,0 width 1000 height 600 title "Custom progressbar test" main define button pressme row 10 col 10 width 80 caption "Press Me!" action (sample.t1.value := 2) end button define tab t1 at 50,5 width 900 height 520 on change checkgraph() define page "Page 1" define button b1 row 40 col 20 caption "Test!" action msgbox("Click!") end button define button b2 row 40 col 140 caption "Test 2!" action msgbox("Click 2!") end button end page define page "Page 2" end page end tab end window sample.center sample.activate return nil function docustomprogressbars if sample.t1.value == 2 custom_progress_bar("sample",100,100,300,25,{255,0,0},10,100) custom_progress_bar("sample",150,100,300,25,{255,255,0},40,100) custom_progress_bar("sample",200,100,300,25,{0,255,0},60,100) custom_progress_bar("sample",250,100,300,25,{0,0,255},80,100) custom_progress_bar("sample",300,150,25,250,{255,0,0},10,100) custom_progress_bar("sample",300,200,25,250,{255,255,0},40,100) custom_progress_bar("sample",300,250,25,250,{0,255,0},60,100) custom_progress_bar("sample",300,300,25,250,{0,0,255},80,100) endif return nil function checkgraph if sample.t1.value == 2 do events docustomprogressbars() else erase window sample endif return nil function custom_progress_bar(cWindowName,nRow,nCol,nWidth,nHeight,aColor,nValue,nMax) local nStartRow, nStartCol, nFinishRow, nFinishCol := 0 // borders DRAW RECTANGLE IN WINDOW &cWindowName AT nRow,nCol TO nRow+nHeight,nCol+nWidth PENCOLOR {255,255,255} FILLCOLOR {255,255,255} DRAW LINE IN WINDOW &cWindowName At nRow,nCol to nRow+nHeight,nCol PENCOLOR {0,0,0} PENWIDTH 1 DRAW LINE IN WINDOW &cWindowName At nRow,nCol to nRow,nCol+nWidth PENCOLOR {0,0,0} PENWIDTH 1 // progress bar if nWidth > nHeight // Horizontal Progress Bar nStartRow := nRow + 1 nStartCol := nCol + 1 nFinishRow := nRow + nHeight - 1 nFinishCol := nCol + 1 + ((nWidth - 2) * nValue / nMax) else // Vertical Progress Bar nStartRow := nRow + nHeight - 1 nStartCol := nCol + 1 nFinishRow := nStartRow - ((nHeight - 2) * nValue / nMax) nFinishCol := nCol + nWidth - 1 endif DRAW RECTANGLE IN WINDOW &cWindowName AT nStartRow,nStartCol TO nFinishRow,nFinishCol PENCOLOR aColor FILLCOLOR aColor return nil
|
| |
|
|
| |
Пост N: 58
Зарегистрирован: 23.06.08
|
|
Отправлено: 08.12.09 23:22. Заголовок: работает
Спасибо большое, всё работает Но есть ещё один вопрос - как убрать мелькание ? Счётчик большой, проблему пока решил с помощью условия IF MOD(nI,17)==0. Но мелькание при прорисовке остаётся...
| |
|
|
| модератор
|
Пост N: 1120
Зарегистрирован: 25.05.05
|
|
Отправлено: 09.12.09 18:03. Заголовок: SkyNET пишет: как у..
SkyNET пишет: Попробуйте использовать идеи из следующего примера: Скрытый текст #include "minigui.ch" function main define window sample at 0,0 width 500 height 200 title "Custom progressbar test" main ; on init docustomprogressbars() define button pressme row 10 col 10 width 80 caption "Press Me!" action runprogressbars() end button end window sample.center sample.activate return nil function docustomprogressbars custom_progress_bar("sample",100,100,300,25,{255,0,0},0,100) return nil function runprogressbars local i for i:=0 to 100 step 10 erase window sample custom_progress_bar("sample",100,100,300,25,{255,0,0},i,100) inkey(.2) next return nil function custom_progress_bar(cWindowName,nRow,nCol,nWidth,nHeight,aColor,nValue,nMax) local nStartRow, nStartCol, nFinishRow, nFinishCol := 0 // borders DRAW RECTANGLE IN WINDOW &cWindowName AT nRow,nCol TO nRow+nHeight,nCol+nWidth PENCOLOR {128,128,128} FILLCOLOR {255,255,255} DRAW LINE IN WINDOW &cWindowName At nRow,nCol to nRow+nHeight,nCol PENCOLOR {64,64,64} PENWIDTH 1 DRAW LINE IN WINDOW &cWindowName At nRow,nCol to nRow,nCol+nWidth PENCOLOR {64,64,64} PENWIDTH 1 // progress bar if nWidth > nHeight // Horizontal Progress Bar nStartRow := nRow + 1 nStartCol := nCol + 1 nFinishRow := nRow + nHeight - 1 nFinishCol := nCol + 1 + ((nWidth - 2) * nValue / nMax) else // Vertical Progress Bar nStartRow := nRow + nHeight - 1 nStartCol := nCol + 1 nFinishRow := nStartRow - ((nHeight - 2) * nValue / nMax) nFinishCol := nCol + nWidth - 1 endif DRAW RECTANGLE IN WINDOW &cWindowName AT nStartRow,nStartCol TO nFinishRow,nFinishCol PENCOLOR aColor FILLCOLOR aColor DRAW TEXT IN WINDOW &cWindowName AT nRow+5,nCol+nWidth/2-10 ; VALUE ltrim(str(int(nValue/nMax*100)))+"%" ; FONT "MS Sans Serif" SIZE 9 ; FONTCOLOR if(nValue<50,BLACK,WHITE) TRANSPARENT return nil
|
| |
|
|
|