Автор | Сообщение |
|
| |
Пост N: 108
Зарегистрирован: 22.04.15
|
|
Отправлено: 22.03.22 23:49. Заголовок: Элемент TAB (группа вкладок)
Использую элемент вкладок TAB с кучей вкладок, в каждой вкладке куча прочих элементов При переключении по вкладкам происходит мелькание фона, элементов, прорисовки и прочей всякого... Кто как избавляется ?
|
|
|
Ответов - 16
[только новые]
|
|
|
| |
Пост N: 109
Зарегистрирован: 22.04.15
|
|
Отправлено: 22.03.22 23:55. Заголовок: *(Разрабу) Может в и..
*(Разрабу) Может в исходниках, сперва формировать образы вкладок, и при переходе по вкладкам отображать образы, и потом только прорисовка элементов... (мысли вслух)
|
|
|
|
| постоянный участник
|
Пост N: 7241
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.03.22 12:06. Заголовок: Новичок пишет: При ..
Новичок пишет: цитата: | При переключении по вкладкам происходит мелькание фона, элементов, прорисовки и прочей всякого... |
| Смотря как делаешь создание Tab Пиши код своего примера.
|
|
|
|
| постоянный участник
|
Пост N: 4104
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.03.22 15:56. Заголовок: Новичок пишет Кто ка..
Новичок пишет Практически не использую, т.к. Mdi позволяет делать аналог на Mdi Child окнах. Пару примеров от инициатора Andrey (в примере _Tab_1c вложенный TAB реализован на ButtonEx) Тут https://TransFiles.ru/p0yhr
|
|
|
|
| |
Пост N: 1840
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.03.22 11:15. Заголовок: SergKis пишет: TAB ..
SergKis пишет: цитата: | TAB реализован на ButtonEx) |
| Проще вместо кнопок использовать tsb по массиву ( без хедеров и футеров). В разы более гибкий элемент Давно так делаю
|
|
|
|
| постоянный участник
|
Пост N: 4106
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.03.22 11:47. Заголовок: Haz пишет Проще вмес..
Haz пишет цитата: | Проще вместо кнопок использовать tsb по массиву |
| Для встроенного TAB в ТАБ (как в примере, понадобилось Андрею, не знаю, применил или нет в реале) ButtonEx проще и лучше в дизайне, можно раздвинуть на 2 pixel и обвести DrawRect(...), сложность упр. контролами на этих вкладках, если их много и не важно какой элемент исп. тсб или кнопки. На кнопках, по мне проще организовать имитацию TAB, где вместо FRAME использовать модал окна без заголовков. Практически единственные варианты, где я исп. ТАБ, это с использованием тсб по массиву (с header, footer), где на каждой ТАБ page заполняю тсб своими данными. Например работа с секциями ini файла или тек. запись dbf разбивается на части по полям и на ТАБ тсб заполняется разным списком полей. Строки тсб не обладают возможностью имитации нажатия кнопки, а Header имеет такую возможность. Я пробовал делать ряд кнопок из Header тсб, добавляя сверху SuperHeader, а снизу одну строку ячеек, их делал высотой 2-4 pixel и красил в один цвет. В таком виде тсб вместо кнопок нормально работает, надо только кликнутую колонку Header красить в какой то цвет выделения, типа "в фокусе". Др варианты дают "плоский" вид кнопок. В целом такой вариант не прижился, ToolBar+MdiChild окно дает тот же результат, но проще
|
|
|
|
| |
Пост N: 1841
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.03.22 13:48. Заголовок: SergKis пишет: В це..
SergKis пишет: цитата: | В целом такой вариант не прижился, ToolBar+MdiChild окно дает тоже, но проще |
| На вкус все фломастеры ... Объемный вид легко делается градиентом ( также любую морду можно в виде картинки натянуть ), а вот когда табуляторов много и не влезают все в окно , то встроенный механизм скролла у tsb очень в тему.
|
|
|
|
| постоянный участник
|
Пост N: 4107
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.03.22 14:03. Заголовок: Haz пишет На вкус вс..
Haz пишет цитата: | На вкус все фломастеры ... |
| Это да ..., но ТАБ подразумевает под каждой кнопкой наличие page ... какую то реализацию окна или frame со всеми вытекающими обработками и контролами на них. Т.е. при скролле что делать ? Менять frame\окно с контролами или нет ? Если не менять, то расплываемся на не понятку, на кнопках одно, по содержимому другое. Опять возникают "лишние" алгоритмы цитата: | Объемный вид легко делается градиентом ( также любую морду можно в виде картинки натянуть ) |
| Этого мало, надо дополнять обработчики на нажатие Click, DblClick и отпускание для смены градиентов или картинок. С картинками целая коллекция будет для вариантов "нормального" состояния и "нажатого" (возможно, картинка на disable так же нужна). Не говорю, что это не возможно сделать, но это трудозатраты, причем во времени, требуют сопровождения. Если есть, кто платит за "банкет", то ...
|
|
|
|
| |
Пост N: 1842
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.03.22 14:53. Заголовок: SergKis пишет: Этог..
SergKis пишет: цитата: | Этого мало, надо дополнять обработчики на нажатие Click, DblClick |
|
мы же про замену TAB говорим ... TAB этого всего не умеет
|
|
|
|
| |
Пост N: 1843
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.03.22 17:21. Заголовок: примерчик на скорую ..
примерчик на скорую руку, без наведения эстетики #include "minigui.ch" #include "common.ch" #include "i_winuser.ch" #include "hbthread.ch" #include "tsbrowse.ch" #include "hmg.ch" *--------------------------------------------------------* Procedure Main() *--------------------------------------------------------* LOCAL oWnd LOCAL aArray := {} LOCAL aFont := {} LOCAL i := 0 set oop on aArray := {{"Sheet 1", "Sheet 2", "Sheet 3", "Sheet 4" }} cTitle := "" DEFINE WINDOW Form_0 ; AT 0,0 ; WIDTH 400 HEIGHT 300 ; TITLE cTitle ; MAIN ; oWnd := ThisWindow.Object END WINDOW DEFINE FONT Font_1 FONTNAME "Times New Roman" SIZE 11 DEFINE FONT Font_2 FONTNAME "Times New Roman" SIZE 13 BOLD AAdd( aFont, GetFontHandle( "Font_1" ) ) AAdd( aFont, GetFontHandle( "Font_2" ) ) DEFINE TBROWSE oBrw AT 5, 2 OF Form_0 ; WIDTH oWnd:ClientWidth() - 4; HEIGHT 25; GRID END TSBROWSE with object oBrw :SetArray( aArray , .T. ) :nWheelLines := 0.1 :nClrLine := COLOR_GRID :lNoChangeOrd := TRUE :lCellBrw := TRUE :lNoKeyChar := TRUE :lNoVScroll := TRUE :lNoHScroll := TRUE :nClrLine := COLOR_GRID :nHeightCell := 25 :nHeightHead := 0 :bChange := {|| nil } :bLDblClick := {|| nil } :SetColor( { 1 }, { { || RGB(0,0,0) } }, ) :SetColor( { 5 }, { { || RGB(0,0,0) } }, ) :SetColor( { 11 }, { { || RGB(0,0,0) } }, ) :SetColor( { 6 }, { {|a, b, c| IF( c:nCell == b, { RGB( 255, 255, 255 ), RGB( 220, 220, 220 ) }, ; { RGB( 255, 255, 255 ), RGB( 220, 220, 220 ) } ) } } ) :SetColor( { 12 }, { {|a, b, c| IF( c:nCell == b, { RGB( 255, 255, 255 ), RGB( 220, 220, 220 ) }, ; { RGB( 255, 255, 255 ), RGB( 220, 220, 220 ) } ) } } ) :ChangeFont( {|| IF( oBrw:nCell == 1, aFont[ 2 ], aFont[ 1 ] ) }, 1, 1 ) :ChangeFont( {|| IF( oBrw:nCell == 2, aFont[ 2 ], aFont[ 1 ] ) }, 2, 1 ) :ChangeFont( {|| IF( oBrw:nCell == 3, aFont[ 2 ], aFont[ 1 ] ) }, 3, 1 ) :ChangeFont( {|| IF( oBrw:nCell == 4, aFont[ 2 ], aFont[ 1 ] ) }, 4, 1 ) :bTSDrawCell := { |a,b,c| if( b:nCell == oBrw:nCell, b:nClrLine := CLR_GRAY , b:nClrLine := COLOR_GRID )} :bOnDraw := {|| DrawPage(oBrw, oBrw:nCell) } end SetWindowLong(oBrw:hWnd, GWL_EXSTYLE, WS_EX_STATICEDGE ) //define pages for i := 1 To oBrw:nColCount() DEFINE WINDOW &("P" + hb_ntoc(i)) AT 30 , 2 ; PARENT Form_0 ; WIDTH oWnd:ClientWidth() - 4; HEIGHT oWnd:ClientHeight() - 30; PANEL; BACKCOLOR {220,220,220}; NOSHOW DEFINE LABEL &("L" + hb_ntoc(i)) ROW 100 COL 10 WIDTH oWnd:ClientWidth() - 4 - 20 HEIGHT 30 FONTNAME 'Arial' FONTSIZE 18 FONTBOLD .T. VALUE "Page " + hb_ntoc(i) BACKCOLOR {220,220,220} CENTERALIGN .T. END LABEL END WINDOW end //DoMethod( "p1", "show") drawPage(oBrw, 1) Form_0.Center Form_0.Activate Return func drawPage(oBrw, i) static nPage := 0 if nPage <> 0 doMethod( "P" + hb_ntoc(nPage), "hide" ) end nPage := i doMethod( "P" + hb_ntoc(nPage), "show" ) return nil
|
|
|
|
| постоянный участник
|
Пост N: 4108
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.03.22 19:11. Заголовок: Haz пишет примерчик ..
Haz пишет цитата: | примерчик на скорую руку, без наведения эстетики |
| На тек. версии hmg все отлично Но на моей версии hmg 2.07 (тсб 7.0 мах совмещен, в рамках разумного с тсб 9.0) не работает такой вариант. Тсб не отрисовывается, при пробных кликах на том месте, где строка с тсб он появляется, но Page не соответствует позиции в тсб (фонт фокуса). Только после следующего клика все приходит в норму.
|
|
|
|
| |
Пост N: 1844
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.03.22 21:28. Заголовок: SergKis пишет: Толь..
SergKis пишет: цитата: | Только после следующего клика все приходит в норму |
| Сергей, так это больше демка самой возможности. Просто по-быстрому набросал как пример. Кому нужно допилит и красоту наведет.
|
|
|
|
|
| |
Пост N: 7635
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.03.22 22:12. Заголовок: Haz пишет: Кому ну..
Haz пишет: цитата: | Кому нужно допилит и красоту наведет. |
| +1
|
|
|
|
| постоянный участник
|
Пост N: 7242
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.03.22 07:43. Заголовок: Классный пример !..
Классный пример !
|
|
|
|
| |
Пост N: 110
Зарегистрирован: 22.04.15
|
|
Отправлено: 26.03.22 23:49. Заголовок: Конечно, спс... Спер..
Конечно, спс... Сперва написал свое мнение... получилось статья про ООП, психологию, философию, логистику и ... Потом стер, и пишу переформулировав вопрос: " Есть прога, используемый фон к примеру - синий, есть элемент TAB - используемый фон - белый, При перемещении по вкладкам элемента TAB происходит мерцание фонов (белый-синий-белый) с явной прорисовкой элементов (FRAME, TEXTBOX и т.д.) *хотя очень быстро Вопрос - как избавиться от мерцания ? Какие есть идеи ?" Заранее спасибо за идеи...
|
|
|
|
| |
Пост N: 111
Зарегистрирован: 22.04.15
|
|
Отправлено: 27.03.22 00:13. Заголовок: Пока сделал костыль ..
Пока сделал костыль - вытащил на отдельное окно и сделал фон окна и TAB одним и тем же, мерцание исчезло... Прорисовка элементов уже не наблюдается(но заметно что моргает), но допускаю что на слабых компах появится прорисовка...
|
|
|
|
| постоянный участник
|
Пост N: 7243
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.03.22 07:32. Заголовок: Новичок пишет: Вопр..
Новичок пишет: цитата: | Вопрос - как избавиться от мерцания ? Какие есть идеи ?" |
| Никак. Просто использовать то что есть.
|
|
|
|