Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение) » Ответить

Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)

gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Vlad04: Тест идет, а реальная то же вываливается с ошибкой Error BASE/1132 Bound error: array access, но в других местах. Я её и раньше проверял - никогда она нормально не работала.

Andrey: Печально...

rvu: gfilatov2002 пишет: Добавил также архив для бесплатного Embarcadero C++ 10.2 'Tokyo' compiler http://hmgextended.com/files/CONTRIB/hmg2003_bcc102.exe Видимо, ссылка неправильная. Скорее всего должно быть http://hmgextended.com/files/CONTRIB/hmg2006_bcc102.exe


gfilatov2002: Выложил обновление для сборки 20.06 (Update 2) с учетом последних наработок Базовый дистрибутив для BCC 5.8.2 находится по адресу http://hmgextended.com/files/CONTRIB/hmg-20.06-setup.exe Благодарю за ваше внимание

SergKis: gfilatov2002 Правка небольшая[pre2] METHOD Enabled( lEnab ) CLASS TSBrowse ... If ::lDrawSuperHd AEval( ::aSuperHead, {|as| AAdd( ::aOldEnabled[4], { as[4], as[5], as[11] } ) } ) EndIf If !Empty(::oPhant) ::oPhant:SaveColor() ::oPhant:nClrHeadBack := ::nCLR_HGRAY ::oPhant:nClrFootBack := ::nCLR_HGRAY EndIf ENDIF ... ELSE IF ! ::lEnabled For nI := 1 TO Len( ::aColumns ) ::aColumns[ nI ]:RestColor() SetColor( , ::aColumns[ nI ]:aColors, nI ) Next If !Empty(::oPhant) ::oPhant:RestColor() EndIf ... [/pre2]

gfilatov2002: SergKis пишет: Правка небольшая OK

Andrey: SergKis пишет: Правка небольшая METHOD Enabled( lEnab ) CLASS TSBrowse А курсор активный серым цветом можно сразу сделать в этом методе ? Было бы удобней так.

Haz: Andrey пишет: А курсор активный серым цветом можно сразу сделать в этом методе ? Было бы удобней так. курсор разный бывает. Я использую только рамочный, чтоб не терять подсветку ячеек ( обязательные поля и пр). И переключение с рамки на серый лайтбар будет не эстетично 😎

SergKis: Haz пишет Я использую только рамочный, чтоб не терять подсветку ячеек ( обязательные поля и пр). И переключение с рамки на серый лайтбар будет не эстетично Не только не эстетично, но главное теряется фокус, с какой строкой тсб идет манипуляция (заблокировав тсб), что визуально важно. А сменить цвет для выбранной строки, поставь нужный всем колонкам (старый ты знаешь или сохрани), сделай :DrawSelect() :Enabled(.F.) потом :Enabled(.T.) Старый цвет restore :DrawSelect()

Haz: SergKis пишет: Не только не эстетично, Сергей, я о том же. В остальном привык все установки делать руками, включая управление цветом. Иметь базовое стандартное решение это хорошо, но только до тех пор, пока свое писать дольше чем исправлять базу. Мне пока проще вместо :enabled() использовать :lEnable и свои игры с цветом.

SergKis: Haz пишет я о том же ... Мне пока проще вместо :enabled() Полностью с тобой согласен, а :Enabled() совсем не использую, окно модал, не закрывая тсб с вертушкой\градусником достаточно в районе StatusBar. Часто надо что бы тсб "шевелилось" в это время, а :Enabled() отрубает некоторые методы.

Haz: SergKis пишет: а :Enabled() совсем не использую Сергей, подумал есть вариант быстро затенять весь бровс , не заботясь о сохранении изначального цвета. Суть в следующем: Весь объект рисуется через TSDrawCell(), цвета передаются параметрами. Можно задать флаг lGreyScale в переменных бровса , а цвета переопределять в зависимости от флага. к примеру nClrBack завернуть как if( ::lGrayScale, RgbToGray(nClrBack), nClrBack ) и так везде. Сама RgbToGray() - простое преобразование цвета в градации серого [pre2] Static function RgbToGray(RGBColor) local nGray nGray := Round((0.30*GetRgb(RGBColor)[1])+(0.59*GetRgb(RGBColor)[2])+(0.11*GetRgb(RGBColor)[3]),0) Return RGB(nGray, nGray, nGray) Static Function GetRGB(nColor) LOCAL nR := 0 LOCAL nG := 0 LOCAL nB := 0 LOCAL cColor := NTOC(nColor, 16) nR := CTON(SUBSTR( cColor, 5, 2 ), 16) nG := CTON(SUBSTR( cColor, 3, 2 ), 16) nB := CTON(SUBSTR( cColor, 1, 2 ), 16) RETURN {nR, nG, nB } [/pre2] В теории должно работать , вырубил флаг и бровс опять цветной. PS возможны нюансы с отрицательным знечением цвета, но уверен легко устранимые . Зато нет нужды сохранять и восстанавливать , а для скорости и простоты все делать через обертку для TSDrawCell() , которая и заменяет цвет перед подачей в оригинальную TSDrawCell() ЗЗЫ проверил - криво работает преобразование в грей, нужен алгоритм другой

Haz: Haz пишет: ЗЗЫ проверил - криво работает преобразование в грей, нужен алгоритм другой Все работает , цвета в серый преобразовываются поменял в базовом примере ColorsTable функцию GetColumnBackColor() на это [pre2] Function GetColumnBackColor( n ) Local cColor Local nGray cColor := aColors [ n ] [ 2 ] nGray := Round(0.3*Val( Token( cColor, " ", 1 ) ) + 0.59*Val( Token( cColor, " ", 2 ) ) + 0.11*Val( Token( cColor, " ", 3 ) ),0 ) Return { nGray, nGray, nGray } [/pre2] и получил все серенькое , значит идея жива

SergKis: Haz пишет есть вариант быстро затенять весь бровс , не заботясь о сохранении изначального цвета. Может не врубаюсь, вариантов покрасить тсб много, от ф-й в блоках кода на колонку, "Enabled(.T.\.F.) и то что предлагаешь, а еще можно переменные иметь (вдруг не серый свет надо, а зеленый и .т.д.) и от них плясать. В чем смысл и цель ? То что есть, хватает, а усложнять ... и так приходится, то в кусок кода лезть, то в сам h_tbrowse.prg, что бы вспомнить детали. Есть еще oCol:Cargo, доп. к oBrw:Cargo можно для каждой колонки определить все что хочешь и отрабатывать. На мой взгляд, то что есть достаточно, а красить в серый, зеленый, синий, ... это уже как кому хочется, варианты есть. Все работает , цвета в серый преобразовываются поменял в базовом примере ColorsTable функцию GetColumnBackColor() на это Что то не нашел такую ф-ю в примерах. О каком примере речь ?

Haz: SergKis пишет: На мой взгляд, то что есть достаточно, а красить в серый, зеленый, синий, ... это уже как кому хочется, варианты есть. Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов. Попробовал функцию конвертации цвета в серый- работает. Тренировался тут MiniGUI\SAMPLES\BASIC\ColorsTable\demo.prg GetColumnBackColor() живет там.

SergKis: Haz пишет Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов. Большой разницы не вижу, делать как в :Enabled() с сохранением и восстановлением или через переменную предложенную, т.к. это надо проделывать в :DrawSuper(), :DrawHeader() (внутри нее :lDarawSpcHd, :lDrawFooter), :DrawLine(), DrawSelect() и учесть в последнем отрицательные цвета Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов. Попробовал функцию конвертации цвета в серый- работает. Ф-я работает А пример искал в Advanced

Andrey: Haz пишет: Сергей, подумал есть вариант быстро затенять весь бровс , не заботясь о сохранении изначального цвета. Я уже давно использую свою функцию ОТДЕЛЬНУЮ для этого. Выкладывал уже исходник. Эта функция интересна ещё тем, что блокирует автоматом все дальнейшие нажатия на форме. И картинки на форме четко затеняет. Т.е. из Си вызывается окно с размерами формы и затеняет своё окно заданным цветом. После того как нужно убрать затенение вызываем другую функцию. Параметр - хендл затеняющего окна. Вот примерно так: [pre2] :aColumns[nI]:bPrevEdit := {|| Darken2Open(hWin) ,; // Затенение на форме myColorEditTsb(oBrw) ,; Darken2Close(hWin) ,; // Убрать затенение на форме oBrw:Setfocus(), FALSE }[/pre2]

Haz: Andrey пишет: давно использую свою функцию ОТДЕЛЬНУЮ для этого. Речь не об этом. Андрей , то что ты предлагаешь, это поверх окна бровса открывать полупрозрачное в размер, как делают скринлокеры. Несколько лет назад с Димой попробовали это делать. Я делал тень окна, открывал полупрозрачное под окном и со смещением. Минусов больше чем плюсов. Во первых не на всех операционках корректно работало ( на каком-то вин сервере не сработала). Во вторых , по кнопкам альт-тав и пр идёт переключение . Или твой пример не об этом этом?

SergKis: Andrey пишет Выкладывал уже исходник. Может выложишь, т.к. в примерах hmg ее нет. Будет понятнее. Haz пишет Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов. Если вынести вызов TSDrawCell() в метод :TSDrawCell(), заменив локальные переменные на переменные объекта TSBcell и вызывать метод после заполнения объекта oColumn:oCell во всех местах, заменив вызов ф-ии, то можно проделывать разное в блоке кода :bTSDrawCell, примерно так new method[pre2] METHOD TSDrawCell( oColumn, nColumn ) LOCAL lDraw := .F. LOCAL oCell := oColumn:oCell IF ISBLOCK( ::bTSDrawCell ) IF ! empty( EVal( ::bTSDrawCell, nColumn, oColumn, Self ) ) RETURN lDraw ENDIF ENDIF lDraw := TSDrawCell( oCell:hWnd, ; // 1 oCell:hDC, ; // 2 oCell:nRowPos, ; // 3 oCell:nStartCol, ; // 4 ... RETURN lDraw [/pre2] Вопрос надо ли ?

Andrey: SergKis пишет: Может выложишь, т.к. в примерах hmg ее нет. Будет понятнее. Вот - https://cloud.mail.ru/public/2PS7/4oMjm4KTR



полная версия страницы