On-line: Andrey, гостей 0. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 108
Зарегистрирован: 22.04.15
ссылка на сообщение  Отправлено: 22.03.22 23:49. Заголовок: Элемент TAB (группа вкладок)


Использую элемент вкладок TAB с кучей вкладок, в каждой вкладке куча прочих элементов

При переключении по вкладкам происходит мелькание фона, элементов, прорисовки и прочей всякого...

Кто как избавляется ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 16 [только новые]





Пост N: 109
Зарегистрирован: 22.04.15
ссылка на сообщение  Отправлено: 22.03.22 23:55. Заголовок: *(Разрабу) Может в и..


*(Разрабу) Может в исходниках, сперва формировать образы вкладок,
и при переходе по вкладкам отображать образы, и потом только прорисовка элементов...
(мысли вслух)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7241
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.03.22 12:06. Заголовок: Новичок пишет: При ..


Новичок пишет:

 цитата:
При переключении по вкладкам происходит мелькание фона, элементов, прорисовки и прочей всякого...


Смотря как делаешь создание Tab
Пиши код своего примера.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4104
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.03.22 15:56. Заголовок: Новичок пишет Кто ка..


Новичок пишет
 цитата:
Кто как избавляется ?


Практически не использую, т.к. Mdi позволяет делать аналог на Mdi Child окнах.
Пару примеров от инициатора Andrey (в примере _Tab_1c вложенный TAB реализован на ButtonEx)
Тут https://TransFiles.ru/p0yhr

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1840
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.03.22 11:15. Заголовок: SergKis пишет: TAB ..


SergKis пишет:

 цитата:
TAB реализован на ButtonEx)


Проще вместо кнопок использовать tsb по массиву ( без хедеров и футеров). В разы более гибкий элемент Давно так делаю

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 окно дает тот же результат, но проще

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1841
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.03.22 13:48. Заголовок: SergKis пишет: В це..


SergKis пишет:

 цитата:
В целом такой вариант не прижился, ToolBar+MdiChild окно дает тоже, но проще


На вкус все фломастеры ...
Объемный вид легко делается градиентом ( также любую морду можно в виде картинки натянуть ), а вот когда табуляторов много и не влезают все в окно , то встроенный механизм скролла у tsb очень в тему.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4107
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.03.22 14:03. Заголовок: Haz пишет На вкус вс..


Haz пишет
 цитата:
На вкус все фломастеры ...


Это да ..., но ТАБ подразумевает под каждой кнопкой наличие page ... какую то реализацию окна или frame со всеми вытекающими обработками и контролами на них. Т.е. при скролле что делать ? Менять frame\окно с контролами или нет ? Если не менять, то расплываемся на не понятку, на кнопках одно, по содержимому другое. Опять возникают "лишние" алгоритмы

 цитата:
Объемный вид легко делается градиентом ( также любую морду можно в виде картинки натянуть )


Этого мало, надо дополнять обработчики на нажатие Click, DblClick и отпускание для смены градиентов или картинок. С картинками целая коллекция будет для вариантов "нормального" состояния и "нажатого" (возможно, картинка на disable так же нужна). Не говорю, что это не возможно сделать, но это трудозатраты, причем во времени, требуют сопровождения. Если есть, кто платит за "банкет", то ...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1842
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.03.22 14:53. Заголовок: SergKis пишет: Этог..


SergKis пишет:

 цитата:
Этого мало, надо дополнять обработчики на нажатие Click, DblClick

мы же про замену TAB говорим ... TAB этого всего не умеет

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4108
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.03.22 19:11. Заголовок: Haz пишет примерчик ..


Haz пишет
 цитата:
примерчик на скорую руку, без наведения эстетики


На тек. версии hmg все отлично
Но на моей версии hmg 2.07 (тсб 7.0 мах совмещен, в рамках разумного с тсб 9.0) не работает такой вариант.
Тсб не отрисовывается, при пробных кликах на том месте, где строка с тсб он появляется, но Page не соответствует позиции в тсб (фонт фокуса).
Только после следующего клика все приходит в норму.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1844
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.03.22 21:28. Заголовок: SergKis пишет: Толь..


SergKis пишет:

 цитата:
Только после следующего клика все приходит в норму


Сергей, так это больше демка самой возможности. Просто по-быстрому набросал как пример. Кому нужно допилит и красоту наведет.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7635
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.03.22 22:12. Заголовок: Haz пишет: Кому ну..


Haz пишет:

 цитата:
Кому нужно допилит и красоту наведет.


+1

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7242
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.03.22 07:43. Заголовок: Классный пример !..


Классный пример !

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 110
Зарегистрирован: 22.04.15
ссылка на сообщение  Отправлено: 26.03.22 23:49. Заголовок: Конечно, спс... Спер..


Конечно, спс...
Сперва написал свое мнение... получилось статья про ООП, психологию, философию, логистику и ...
Потом стер, и пишу переформулировав вопрос:

" Есть прога, используемый фон к примеру - синий,
есть элемент TAB - используемый фон - белый,
При перемещении по вкладкам элемента TAB происходит мерцание фонов (белый-синий-белый)
с явной прорисовкой элементов (FRAME, TEXTBOX и т.д.) *хотя очень быстро
Вопрос - как избавиться от мерцания ? Какие есть идеи ?"

Заранее спасибо за идеи...

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 111
Зарегистрирован: 22.04.15
ссылка на сообщение  Отправлено: 27.03.22 00:13. Заголовок: Пока сделал костыль ..


Пока сделал костыль - вытащил на отдельное окно и сделал фон окна и TAB одним и тем же, мерцание исчезло...
Прорисовка элементов уже не наблюдается(но заметно что моргает),
но допускаю что на слабых компах появится прорисовка...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7243
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.03.22 07:32. Заголовок: Новичок пишет: Вопр..


Новичок пишет:

 цитата:
Вопрос - как избавиться от мерцания ? Какие есть идеи ?"


Никак. Просто использовать то что есть.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 51
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет