Форум » 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

SergKis: Vlad04 SergKis пишет crazy пример, перебор всех контролов всех окон Выбрать контролы одного окна, тоже надо перебрать _HMG_aControlHandles и по handle окна это сделать.

Andrey: SergKis пишет: по текстам так выглядит Мне очень понравился стиль написания программы. Жалко что не было такого раньше.

Andrey: gfilatov2002 пишет: Если есть еще пожелания/предложения для следующей сборки, то они с удовольствием будут приняты... У меня возник вопрос: А как можно задать фонт для титула таблицы для Excel2() ? Мне ответили - пока никак, надо развивать Exel2. Есть пожелание для небольшого развития METHOD Excel2( cFile, lActivate, hProgress, cTitle, lSave, bPrintRow ) CLASS TSBrowse 1) Добавить возможность задания фонта для титула таблицы, это то что над шапкой таблицы. А то выходит очень маленьким фонтом. А в идеале бы хотелось чтобы туда можно было передавать хотя бы 3 фонта в массиве (титул,шапка,ячейки), для независимого построения листа экселя ! Таким образом можно будет подобрать приличный вид листа экселя. Всё равно же при задании большого фонта в таблице высота ячейки не меняется. 2) Да и еще бы использовать то что предложил SergKis в Пост N: 1706.


SergKis: С пожеланием Ардрея, получилось так :[pre2] METHOD Excel2( cFile, lActivate, hProgress, xTitle, lSave ) CLASS TSBrowse ... nOldCol := ::nCell Local nCntCols := ::nColCount(), oCol, ; aFntLine := array(nCntCols), ; aFntHead := array(nCntCols), ; aFntFoot := array(nCntCols), ; hFntTitl, cTitle Default nInstance := 0 If HB_ISARRAY(xTitle) .and. Len(xTitle) > 1 cTitle := xTitle[1] hFntTitl := xTitle[2] EndIf Default cFile := "Book1.xls", ; lActivate := .T., ; lSave := .F., ; cTitle := "", ; hFntTitl := hFont CursorWait() For i := 1 To nCntCols oCol := ::aColumns[ i ] aFntLine[ i ] := oCol:hFont aFntHead[ i ] := oCol:hFontHead aFntFoot[ i ] := oCol:hFontFoot If HB_ISBLOCK(oCol:hFont) oCol:hFont := hFont EndIf If HB_ISBLOCK(oCol:hFontHead) oCol:hFontHead := hFont EndIf If HB_ISBLOCK(oCol:hFontFoot) oCol:hFontFoot := hFont EndIf Next ::lNoPaint := .F. ... For nCol := 1 To Len( ::aColumns ) If Empty( ::aColumns[ nCol ]:hFont ) .and. Empty( ::aColumns[ nCol ]:hFontHead ) Loop EndIf hFont := ::aColumns[ nCol ]:hFont If hFont != Nil aFontTmp := GetFontParam(hFont) IF AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ; e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ; e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } ) == 0 AAdd( aFont, aFontTmp ) endif EndIf If hFont != Nil .and. hFntTitl != hFont hFont := hFntTitl aFontTmp := GetFontParam(hFont) IF AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ; e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ; e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } ) == 0 AAdd( aFont, aFontTmp ) endif EndIf hFont := ::aColumns[ nCol ]:hFontHead If hFont != Nil aFontTmp := GetFontParam(hFont) IF AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ; e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ; e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } ) == 0 AAdd( aFont, aFontTmp ) endif EndIf hFont := ::aColumns[ nCol ]:hFontFoot If hFont != Nil aFontTmp := GetFontParam(hFont) IF AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ; e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ; e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } ) == 0 AAdd( aFont, aFontTmp ) endif EndIf Next If Len( aFont ) > 4 ASize( aFont, 4 ) EndIf ... For nRow := 1 To ( ::nLen ) If nRow == 1 If ! Empty( cTitle ) cTitle := StrTran( cTitle, CRLF, Chr( 10 ) ) nAlign := If( Chr( 10 ) $ cTitle, 5, 1 ) hFont := hFntTitl aFontTmp := GetFontParam( hFont ) nFont := AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ; e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ; e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } ) FWrite( nHandle, BiffRec( 4, cTitle, 0, 0,, nAlign,, Max( 0, nFont - 1 ) ) ) nLine := 3 EndIf For nCol := 1 To Len( ::aColumns ) uData := If( ValType( ::aColumns[ nCol ]:cHeading ) == "B", ; Eval( ::aColumns[ nCol ]:cHeading, nCol, Self ), ; ::aColumns[ nCol ]:cHeading ) ... Next If ::lDrawFooters For nCol := 1 To Len( ::aColumns ) uData := If( ValType( ::aColumns[ nCol ]:cFooting ) == "B", ; Eval( ::aColumns[ nCol ]:cFooting, nCol, Self ), ; ::aColumns[ nCol ]:cFooting ) If ValType( uData ) != "C" uData := " " EndIf uData := Trim( StrTran( uData, CRLF, Chr( 10 ) ) ) nAlign := Min( LoWord( ::aColumns[ nCol ]:nFAlign ), 2 ) nAlign := If( Chr( 10 ) $ uData, 4, nAlign ) hFont := ::aColumns[ nCol ]:hFontFoot aFontTmp := GetFontParam( hFont ) nFont := AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ; e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ; e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } ) FWrite( nHandle, BiffRec( 4, uData, nLine - 1, nCol - 1, .T., nAlign + 1,, ; Max( 0, nFont - 1 ) ) ) If hProgress != Nil If nCount % nEvery == 0 SendMessage(hProgress, PBM_SETPOS, nCount, 0) EndIf nCount ++ EndIf Next ++nLine EndIf FWrite( nHandle, BiffRec( 10 ) ) FClose( nHandle ) For i := 1 To nCntCols oCol := ::aColumns[ i ] oCol:hFont := aFntLine [ i ] oCol:hFontHead := aFntHead [ i ] oCol:hFontFoot := aFntFoot [ i ] Next If hProgress != Nil SendMessage(hProgress, PBM_SETPOS, nTotal, 0) EndIf ... [/pre2] т.е. титул задавать массивом {"TEST TITLE EXCEL.", GetFontHandle('Font_5') }

Andrey: SergKis пишет: METHOD Excel2( cFile, lActivate, hProgress, xTitle, lSave ) 1) Чтобы у всех не свалились программы, наверное нужно сделать проверку на массив. Если не массив, то работать нужно по старому, а если массив то по новому ! 2) И как сделать показ своей функции ? Допустим показа простого кол-ва: nCol / Len( ::aColSizes ) Блин, на старых компах так медленно идёт загрузка 5 тыс. записей...

SergKis: Andrey пишет Если не массив, то работать нужно по старому, а если массив то по новому ! Ты прав, пропустил[pre2] If HB_ISARRAY(xTitle) .and. Len(xTitle) > 1 cTitle := xTitle[1] hFntTitl := xTitle[2] Else cTitle := xTitle EndIf [/pre2] убрал у себя cTitle := AllTrim(cTitle) это всегда можно сделать снаружи

Andrey: SergKis пишет: это всегда можно сделать снаружи Нет не всегда. Я очень не люблю когда рабочии системы - пересобираешь новой версией и они начинают валиться ! А как сделать показ своей функции ? Допустим показа простого кол-ва: nCol / Len( ::aColSizes ) Я вызываю свою фоновую функцию WaitThreadSay(cVal) // вывод доп.информации Если это сложно, то фиг с ним, не надо.

gfilatov2002: SergKis пишет: С пожеланием Ардрея, получилось так Добавил эти правки в RC 2 новой сборки. Благодарю за помощь P.S. В связи с необходимостью лечения позвоночника (остеохондроз и прочее) вынужден сократить время посещения форума и работы над новой сборкой, которая запланирована к выходу на следующей неделе...

SergKis: gfilatov2002 еще немного правок в excel2[pre2] ... For nCol := 1 To Len( ::aColumns ) If ::aColumns[ nCol ]:lBitMap Loop ElseIf Empty( ::aColumns[ nCol ]:hFont ) .and. Empty( ::aColumns[ nCol ]:hFontHead ) Loop EndIf hFont := ::aColumns[ nCol ]:hFont ... For nRow := 1 To ( ::nLen ) If nRow == 1 ... For nCol := 1 To Len( ::aColumns ) If ::aColumns[ nCol ]:lBitMap Loop EndIf uData := If( ValType( ::aColumns[ nCol ]:cHeading ) == "B", ; ... EndIf ... [/pre2]

gfilatov2002: SergKis пишет: еще немного правок в excel2 OK, спасибо

SergKis: gfilatov2002 еще правки[pre2] METHOD LButtonDown( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse ... oCol, ix If ! ::lEnabled Return 0 EndIf Default ::lDontChange := .F. ... METHOD LButtonUp( nRowPix, nColPix, nFlags ) CLASS TSBrowse Local nClickRow, nDestCol If ! ::lEnabled Return 0 EndIf If nKeyPressed != Nil ::DrawPressed( nKeyPressed, .F. ) EndIf ... [/pre2]

gfilatov2002: SergKis пишет: еще правки Сделал Благодарю за помощь

gfilatov2002: Завершена подготовка очередной сборки 18.01, которая будет опубликована послезавтра. В связи с необходимостью длительного лечения позвоночника (год и более) выпуск новых сборок будет приостановлен...

Alw Spencer: gfilatov2002 Но мы Вас ещё ведь услышим? Или лечение не позволит попасть на форум?

Vlad04: длительного лечения позвоночника Будьте осторожны ! Никаких операций! Будьте здоровы.

SergKis: Мой опыт борьбы (более 15 лет) с неисправностью позвоночника (без травм, из за сдвига дисков, от сидения - работа такая), одна нога почти на 10 см. была короче другой. По каким только врачам, институтам не ходил, толку 0. Пока 3 женщины с лечебной физкультуры не стали делать растяжку мышц, сухожилий, дело чуть сдвинулось и по их наводке, попал к мануалисту, занимающемуся со спортсменами, кикбоксеры, бойцы без правил, ... Год ходил каждую неделю, потом раз в 2, месяц (мышцы, сухожилия обладают памятью). Он поставил меня на ноги. Сейчас продолжаю ходить по самочувствию. А с операциями, Vlad04 прав, надо очень осторожно. Насмотрелся я в реабилитационных центрах на людей после них .... Удачи в лечении.

gfilatov2002: SergKis пишет: Удачи в лечении Благодарю за добрые слова! Пока прописали "скорую помощь" - занятия на профилакторе Евминова Alw Spencer пишет: мы Вас ещё ведь услышим? Обязательно Просто сокращаетя до минимума время сидения перед монитором...

gfilatov2002: Опубликована новая сборка 18.01 для BCC 5.51 для компиляторов Harbour и xHarbour Базовый дистрибутив-инсталлятор находится по адресу http://hmgextended.com/files/CONTRIB/hmg-18.01-setup.exe Имеются в наличии также готовые сборки для следующих пар (Си-компилятор+Харбор): - MinGW 7.2.0 32-bit для Harbour 3.2.0dev; - MinGW 7.2.0 64-bit для Harbour 3.4.0dev; - MS VisualC 2017 32-bit для Harbour 3.2.0dev; - Borland/Embarcadero C++ 7.3 (32-bit) для Harbour 3.2.0dev. ссылки на которые будут доступны по Вашему запросу До новых встреч!

Andrey: Собрал на новой версии несколько своих проектов ! Полёт нормальный !!! Ждем новых встреч !!! Обратите внимание на новый пример: MiniGUI\SAMPLES\Advanced\Tsb_array_3

SergKis: gfilatov2002 Немного правок[pre2] CLASS TWndData ... METHOD Release() INLINE iif( ::IsWindow, iif( ::lAction, PostMessage(::nHandle, WM_CLOSE, 0, 0), Nil ), Nil ) METHOD Restore() INLINE ShowWindow( ::nHandle, SW_RESTORE ) METHOD Show() INLINE _ShowWindow( ::cName ) METHOD Hide() INLINE _HideWindow( ::cName ) _METHOD DoEvent( Key, nHandle ) ... CLASS TCnlData INHERIT TWndData ... METHOD PostMsg( nKey ) INLINE iif( ::oWin:Action, PostMessage( ::oWin:nHandle, ::WM_nMsgC, nKey, ::nHandle ), ) METHOD SendMsg( nKey ) INLINE iif( ::oWin:Action, SendMessage( ::oWin:nHandle, ::WM_nMsgC, nKey, ::nHandle ), ) ... ... METHOD Restore() INLINE ::Show() METHOD Show() INLINE _ShowControl( ::cName, ::oWin:cName ) ... [/pre2]



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