Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №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
[только новые]
|
|
Andrey
|
| постоянный участник
|
Пост N: 6593
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.02.20 13:00. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Андрею должно понравится такое изменение: |
| Мне понравилось ! Спасибо ! SergKis пишет: цитата: | что бы не делать доп. переменных, а использовать :cargo колонки, например (от Андрея): |
| Да, это очень удобно получается. Загружаешь в массив короткий справочник типа: {1, "В офисе "} {2, "отданы лично в руки "} {3, "отданы Посыльному "} А потом бровс сам показывает вместо кодов нужные наименования через функцию: FUNCTION Select2Array(xVal,aDim) LOCAL nI, cRet := "none Dim" FOR nI := 1 TO LEN(aDim) IF xVal == aDim[nI,1] cRet := aDim[nI,2] ENDIF NEXT RETURN cRet Ну а в oCol:bPrevEdit - показ выбора из этого массива SelectWho(ob, oc:Cargo) и потом запись в базу WriteColum4(ob). Что-то форум потерял предыдущую тему. Не понятно будет о чем речь идёт...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3075
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.02.20 15:08. Заголовок: Andrey пишет Ну а в ..
Andrey пишет цитата: | Ну а в oCol:bPrevEdit - показ выбора из этого массива SelectWho(ob, oc:Cargo) |
| Можно упростить oCol := oBrw:GetColumn("Name_4") oCol:Cargo := oKeyData() // Get2DimCol4() // получить массив для колонки 4 oCol:bDecode := {|val,ob,nc,oc| nc:=ob, oc:Cargo:Get(val, val) } // если для кода нет наименования, будет сам код oCol:nAlign := DT_CENTER oCol:cPicture := REPL("x",25) oCol:lEdit := .T. oCol:bPrevEdit := {|val,ob,nc,oc| SelectWho(ob, oc:Cargo), WriteColum4(ob), ob:Setfocus(), FALSE } // заполним из dbf коды и названия для колонки USE ... ALIAS SPR NEW SHARED dbEval({|| oCol:Cargo:Set(FIELD->KOD, FIELD->NAME) }) USE dbSelectArea(oBrw:cAlias) ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3076
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.02.20 15:58. Заголовок: PS массив получить т..
PS массив получить так oCol:CargoGetAll(.T.) // массив наименований для combobox например oCol:CargoGetAll(.F.) // массив {{kod, name},..., {kodN, nameN}} т.е. oCol:bPrevEdit := {|val,ob,nc,oc| SelectWho(ob, oc:Cargo:GetAll(.F.)), WriteColum4(ob), ob:Setfocus(), FALSE }
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1660
Зарегистрирован: 11.02.10
|
|
Отправлено: 28.02.20 10:58. Заголовок: Всем кому это интересно
|
|
|
kkg
|
| |
Пост N: 21
Зарегистрирован: 29.11.19
|
|
Отправлено: 01.03.20 14:54. Заголовок: Из замеченного, если..
Из замеченного, если в версии bcc101 подменить библиотеки hblang.lib hbcpage.lib от BCC 5.8.2 то установка русского языка отрабатывает нормально, включая обработку ошибок. На некоторых версиях ОС проявляется ошибка ilink32, "лечение" описано тут click here может кому то пригодится.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1661
Зарегистрирован: 11.02.10
|
|
Отправлено: 26.03.20 11:42. Заголовок: Всем кому это интересно
Завершена подготовка новой сборки 20.03, которая будет опубликована на следующей неделе. Кратко, что нового: Скрытый текст
* New: Added the new useful C-function dbInsert( [nRecNo] [, nCount] ). Added the new commands for managing of the above function: - INSERT BEFORE; - INSERT BLANK. * Splitboxed TOOLBAR control supports the changing of a 'Caption' property at runtime. * Added a support of the 'Variant' fields type in a Browse control. * The Getbox control may manage a 'ValidMessage' property at runtime. * Synchronized Extended HMG for compatibility with Official HMG: - New: Added the following read/write properties for a Grid control: - ColumnJUSTIFY( nColIndex ), - ColumnONHEADCLICK( nColIndex ), - ColumnCONTROL( nColIndex ), - ColumnDYNAMICBACKCOLOR( nColIndex ), - ColumnDYNAMICFORECOLOR( nColIndex ), - ColumnVALID( nColIndex ), - ColumnWHEN( nColIndex ), - ColumnVALIDMESSAGE( nColIndex ). * Updated Harbour Compiler 3.2.0dev to a recent Git-version. * Updated HMGS-IDE v.1.4.4.0 and Sqlite3 library. * Updated the some Basic, Advanced and Applications samples.
|
Благодарю за ваше внимание
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6604
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.03.20 19:41. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | которая будет опубликована на следующей неделе. |
| Ждем с нетерпением !
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1662
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.03.20 20:35. Заголовок: Andrey пишет: Ждем ..
Andrey пишет: Завтра буду готовить финальную версию инсталлятора для этой сборки
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1663
Зарегистрирован: 11.02.10
|
|
Отправлено: 31.03.20 09:25. Заголовок: Всем кому это интересно
Опубликована новая сборка 20.03 для BCC 5.8.2 и компиляторов Harbour и xHarbour. Базовый дистрибутив находится по адресу http://hmgextended.com/files/CONTRIB/hmg-20.03-setup.exe Добавил также архив для бесплатного Embarcadero C++ 10.1 Berlin compiler http://hmgextended.com/files/CONTRIB/hmg2003_bcc101.exe В марте этого года исполнилось ровно 15 лет с момента начала разработки этой версии библиотеки Выпуск последующих обновлений будет зависеть от активности и поддержки со стороны пользователей ее разработки. Отдельная благодарность - Андрею Верченко, Диме (админу этого форума) и Саше Савову из Болгарии за их материальную поддержку
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1664
Зарегистрирован: 11.02.10
|
|
Отправлено: 01.04.20 09:56. Заголовок: Всем кому это интересно
Сделал "тихое" обновление сборки 20.03 после повторного исправления следующего изменения: цитата: | * Enhanced: Splitboxed TOOLBAR control supports the changing of a 'Caption' property at runtime. |
|
Проблема была указана на английском форуме библиотеки. Если вы не используете данную возможность в своей программе, то это обновление является необязательным.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1675
Зарегистрирован: 11.02.10
|
|
Отправлено: 16.04.20 14:54. Заголовок: Всем кому это интересно
Подготовил 1-й релиз-кандидат для новой сборки 20.04 со следующим списком изменений (кратко): Скрытый текст
* Fixed problem with assigning of the BKBRUSH clause at a form definition (introduced in the build 19.12). * A correction in the function _SetValue() for a conflict between the Timer and AniGif controls handling. * The Label, HyperLink, CheckBox and RadioGroup controls support changing the 'Transparent' property at runtime. * The EDIT controls family (TEXTBOX & EDITBOX) support changing the 'CaseConvert' property at runtime. It was a postponed user's request. * The MONTHCAL control supports the BackColor, FontColor and others color clauses in the THEMED Operating Systems. It was a postponed user's request. * Improved user type of control in INPLACE EDIT of GRID control. DYNAMIC type is defined as { cControlType, bCodeBlock [, bChange] } where cControlType = 'DYNAMIC' (Required) bCodeBlock = CodeBlock that return array with normal type control (Required) bChange = CodeBlock with ON CHANGE action (Optional) to above CodeBlock is passed one param - a current control value. Added a new control type 'CODEBLOCK' for using with 'DYNAMIC' type. * The ANIMATEBOX control supports now an optional INVISIBLE clause. * The FONT clause in the POPUP and MENUITEM commands supports a font name for the fonts which were defined by the command DEFINE FONT <font> FONTNAME <name>. * Limited the height of the dialog box in the function HMG_Alert() to be able to output more than 20 strings in the EditBox control. * The HMG Debugger resources were moved from the sample DBG_TEST to the application resources. * Updated TSBrowse and Sqlite3 libraries. * Updated the some Basic and Advanced samples.
| Благодарю за ваше внимание
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3129
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.04.20 16:42. Заголовок: gfilatov2002 Предло..
gfilatov2002 Предложение: TsBrowse.ch #xcommand @ <row>,<col> TBROWSE <name> ; ... [ <cur: DBLCURSOR, DOUBLE CURSOR, FIXED> ] ; [ <emptyval: COLEMPTY,COLSEMPTY,EMPTYVALUE> ] ; =>; ... [ <number> ], [ <aBrush> ], [ <aEdit> ], [ <Adjust> ], [ <.ladjust.> ], ; [ <.emptyval.> ] ) #xcommand DEFINE TBROWSE <name> ; ... [ <emptyval: COLEMPTY,COLSEMPTY,EMPTYVALUE> ] ; =>; ... [ <number> ], [ <aBrush> ], [ <aEdit> ], [ <Adjust> ], [ <.ladjust.> ], ; [ <.emptyval.> ] ) ;; with object <name> ... #xcommand DEFINE TBROWSE <name> OBJ <obrw> ; ... [ <cur: DBLCURSOR, DOUBLE CURSOR, FIXED> ] ; [ <emptyval: COLEMPTY,COLSEMPTY,EMPTYVALUE> ] ; =>; ... [ <number> ], [ <aBrush> ], [ <aEdit> ], [ <Adjust> ], [ <.ladjust.> ], ; [ <.emptyval.> ] ) ;; with object <obrw> ... TsBrowse.prg FUNCTION _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ; ... lLoad, lDblCursor, aNames, aFooters, nColNumber, aBrush, aEdit, Adjust, ; lAdjust, lEmptyValToChar ) ... ELSE // BK IF HB_ISARRAY( uAlias ) aArray := uAlias uAlias := NIL ENDIF IF HB_ISLOGICAL(aEdit) ... // BK IF HB_ISARRAY(aArray) oBrw:SetArrayTo( aArray, {hFontHead, hFontFoot} , aHeaders, aWidths, aFooters, aPicture, aJust, aNames ) ELSE If ! empty(hFontHead) ; oBrw:hFontHead := hFontHead EndIf If ! empty(hFontFoot) ; oBrw:hFontFoot := hFontFoot EndIf ENDIF IF HB_ISARRAY(aBrush) .and. Len(aBrush) > 2 ... IF ( nColums := Len( oBrw:aColumns ) ) > 0 /* BK 18.05.2015 */ ... // BK n := nColums IF ! HB_ISARRAY( aArray ) IF HB_ISARRAY(aNames) j := Min(Len(aNames), n) FOR t := 1 TO j IF ! Empty(aNames[ t ]) .and. HB_ISCHAR(aNames[ t ]) oBrw:aColumns[ t ]:cName := aNames[ t ] ENDIF NEXT ENDIF IF HB_ISLOGICAL(aFooters) .and. aFooters aFooters := Array( n ) aFill( aFooters, " " ) ENDIF IF HB_ISARRAY(aFooters) j := Min( Len(aFooters), n ) FOR t := 1 TO j IF aFooters[ t ] != NIL If HB_ISCHAR( aFooters[ t ] ) .and. ";" $ aFooters[ t ] aFooters[ t ] := StrTran( aFooters[ t ], ";", Chr(13) ) EndIf oBrw:aColumns[ t ]:cFooting := aFooters[ t ] ENDIF NEXT oBrw:lDrawFooters := .T. oBrw:lFooting := .T. oBrw:nHeightFoot := oBrw:nHeightCell ENDIF ENDIF IF HB_ISARRAY(aEdit) ... IF ! Empty(lDblCursor) AEval( oBrw:aColumns, {|oCol| oCol:lFixLite := .T. } ) ENDIF IF ! empty(lEmptyValToChar) AEval( oBrw:aColumns, {| oCol| oCol:lEmptyValToChar := .T. } ) ENDIF nW := 0 IF nColNumber != NIL IF HB_ISLOGICAL(nColNumber) nColNumber := iif( nColNumber, 1, NIL ) ELSEIF HB_ISARRAY(nColNumber) IF Len(nColNumber) > 1 nW := nColNumber[2] nColNumber := nColNumber[1] ELSE nColNumber := 1 ENDIF ENDIF ENDIF IF HB_ISNUMERIC(nColNumber) nColNumber := iif( nColNumber > 0 .and. nColNumber <= n, nColNumber, 1 ) IF oBrw:lIsDbf DEFINE COLUMN oCol DATA 'hb_ntos(iif( IndexOrd() > 0, ORDKEYNO(), RecNo() ))' ; HEADER '#' ; FOOTER ' ' ; ALIGN 1, 1, 1 ; WIDTH 80 ; PICTURE '9999999' ; MOVE 0 ; DBLCURSOR ; NAME ORDKEYNO oCol:lEdit := .F. oCol:cAlias := oBrw:cAlias oCol:cFooting := { |nc,ob| nc := ob:nLen, iif( Empty(nc), '', hb_ntos(nc) ) } #ifndef __XHARBOUR__ oCol:cData := 'hb_macroblock("'+oCol:cField+'")' oCol:bData := hb_macroblock( oCol:cField ) #else oCol:cData := '{|| '+oCol:cField+'}' oCol:bData := &( '{|| '+oCol:cField+'}' ) #endif ELSEIF oBrw:lIsArr DEFINE COLUMN oCol DATA {|| NIL } ; HEADER '#' ; FOOTER ' ' ; ALIGN 1, 1, 1 ; WIDTH 80 ; PICTURE '99999' ; MOVE 0 ; DBLCURSOR ; NAME ARRAYNO oCol:cFooting := { |nc,ob| nc := ob:nLen, iif( Empty(nc), '', hb_ntos(nc) ) } oCol:bValue := { |xx,ob| xx := ob, hb_ntos( ob:nAt ) } ENDIF oCol:lEmptyValToChar := .T. oCol:cFieldTyp := 'N' oCol:nFieldLen := 10 oCol:nFieldDec := 0 oBrw:InsColumn( nColNumber, oCol ) oBrw:nCell := nColNumber + 1 oBrw:nFreeze := nColNumber oBrw:lLockFreeze := .T. IF HB_ISNUMERIC(nW) .and. nW > 0 ... Пример ADVANCED\Tsb_Array_2\demo3.prg Скрытый текст
#include "minigui.ch" #include "TSBrowse.ch" PROCEDURE MAIN LOCAL oBrw, aDatos, aArray, aHead, aSize, aFoot, aPict, aAlign, aName LOCAL nY, nX, nW, nH SET DECIMALS TO 4 SET DATE TO GERMAN SET EPOCH TO 2000 SET CENTURY ON SET EXACT ON SET FONT TO 'Arial', 11 DEFINE FONT Norm FONTNAME _HMG_DefaultFontName SIZE _HMG_DefaultFontSize DEFINE FONT Bold FONTNAME _HMG_DefaultFontName SIZE _HMG_DefaultFontSize BOLD DEFINE WINDOW test ; TITLE "SetArray For Report Demo" ; MAIN ; NOMAXIMIZE NOSIZE DEFINE STATUSBAR STATUSITEM "0" // WIDTH 0 FONTCOLOR BLACK STATUSITEM "Item 1" WIDTH 230 // FONTCOLOR BLACK STATUSITEM "Item 2" WIDTH 230 // FONTCOLOR BLACK STATUSITEM "Item 3" WIDTH 230 // FONTCOLOR BLACK END STATUSBAR nY := 1 + iif( IsVistaOrLater(), GetBorderWidth ()/2, 0 ) nX := 1 + iif( IsVistaOrLater(), GetBorderHeight()/2, 0 ) nW := test.WIDTH - 2 * GetBorderWidth() nH := test.HEIGHT - 2 * GetBorderHeight() - ; GetTitleHeight() - test.StatusBar.Height aDatos := CreateDatos() aArray := aDatos[ 1 ] aHead := aDatos[ 2 ] aSize := aDatos[ 3 ] aFoot := aDatos[ 4 ] aPict := aDatos[ 5 ] aAlign := aDatos[ 6 ] aName := aDatos[ 7 ] DEFINE TBROWSE oBrw ; AT nY, nX ALIAS aArray WIDTH nW HEIGHT nH CELL ; FONT { "Norm", "Bold", "Bold" } ; BRUSH { 255, 255, 240 } ; HEADERS aHead ; COLSIZES aSize ; PICTURE aPict ; JUSTIFY aAlign ; COLNAMES aName ; COLNUMBER { 1, 40 } ; FOOTERS aFoot ; FIXED ADJUST COLEMPTY ; ENUMERATOR mySetTsb( oBrw ) myColorTsb( oBrw ) END TBROWSE oBrw:SetNoHoles() END WINDOW DoMethod( "test", "Activate" ) RETURN FUNCTION mySetTsb( oBrw ) WITH OBJECT oBrw :nColOrder := 0 :lNoChangeOrd := .T. :nWheelLines := 1 :lNoGrayBar := .F. :lNoLiteBar := .F. :lNoResetPos := .F. :lNoHScroll := .T. :lNoPopUp := .T. END WITH RETURN Nil FUNCTION myColorTsb( oBrw ) WITH OBJECT oBrw :nClrLine := RGB(180,180,180) // COLOR_GRID :SetColor( { 11 }, { { || RGB(0,0,0) } } ) :SetColor( { 2 }, { { || RGB(255,255,240) } } ) :SetColor( { 5 }, { { || RGB(0,0,0) } } ) :SetColor( { 6 }, { { |a,b,c| iif( c:nCell == b, -CLR_HRED , -RGB(128,225,225) ) } } ) :SetColor( { 12 }, { { |a,b,c| iif( c:nCell == b, -RGB(128,225,225), -RGB(128,225,225) ) } } ) END WITH RETURN Nil * ====================================================================== STATIC FUNCTION CreateDatos() LOCAL i, k := 1000, aDatos, aHead, aSize, aFoot, aPict, aAlign, aName aDatos := Array( k ) FOR i := 1 TO k aDatos[ i ] := { " ", ; // 1 i, ; // 2 ntoc( i ) + "_123", ; // 3 Date() + i, ; // 4 PadR( "Test line - " + ntoc( i ), 20 ), ; // 5 Round( ( 10000 -i ) * i / 3, 2 ), ; // 6 100.00 * i, ; // 7 0.12, ; // 8 Round( 100.00 * i * 0.12, 2 ), ; // 9 Round( 1234567.00 / i, 3 ), ; // 10 PadR( "Line " + StrZero( i, 5 ), 20 ), ; // 11 Date(), ; // 12 Time(), ; // 13 i % 2 == 0 } // 14 NEXT aHead := AClone( aDatos[ 1 ] ) // AEval(aHead, {|x,n| aHead[ n ] := "Head_" + hb_ntos(n) }) AEval( aHead, {| x, n| aHead[ n ] := "Head" + hb_ntos( n ) + ; iif( n % 2 == 0, CRLF + "SubHead" + hb_ntos( n ), "" ) } ) aFoot := Array( Len( aDatos[ 1 ] ) ) AEval( aFoot, {| x, n| aFoot[ n ] := n } ) // aFoot := .T. // яюфэюцшх хёЄ№ ё яєёЄ√ьш чэрўхэш ьш aPict := Array( Len( aDatos[ 1 ] ) ) // ьюцэю эх чрфртрЄ№, ЇюЁьшЁє■Єё aPict[ 10 ] := "99999999999.999" // ртЄюьрЄюь фы C,N яю ьрї чэрўхэш■ aSize := Array( Len( aDatos[ 1 ] ) ) // ьюцэю эх чрфртрЄ№, ЇюЁьшЁє■Єё aSize[ 10 ] := aPict[ 10 ] // ртЄюьрЄюь яю ьрї чэрўхэш■ т ъюыюэъх aAlign := Array( Len( aDatos[ 1 ] ) ) // Єшя яюы C - DT_LEFT aAlign[ 2 ] := DT_CENTER // D,L - DT_CENTER // N - DT_RIGHT aName := Array( Len( aDatos[ 1 ] ) ) AEval( aName, {| x, n| aName[ n ] := "MyName_" + hb_ntos( n ) } ) RETURN { aDatos, aHead, aSize, aFoot, aPict, aAlign, aName }
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3130
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.04.20 16:49. Заголовок: PS Для колонки нумер..
PS Для колонки нумерации ARRAYNO надо поправить PICTURE '9999999' как у ORDKEYNO, забыл это сделать.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3131
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.04.20 16:52. Заголовок: PS Возможно, колонки..
PS Возможно, колонки нумерации надо назвать одинаково ? Названия колонок оставил, как использую сам.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3132
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.04.20 17:34. Заголовок: PS2 Еще можно добави..
PS2 Еще можно добавить TsBrowse.ch (в определения команд выше добавить) [ <emptyval: COLEMPTY,COLSEMPTY,EMPTYVALUE> ] ; [ <gotfocusel: GOTFOCUSSELECT,GOTFOCUSELECT> ] ; ... [ <.emptyval.> ], [ <.gotfocusel.> ] ) ... ... TsBrowse.prg FUNCTION _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ; ... lAdjust, lEmptyValToChar, lOnGotFocusSelect ) ... IF ! empty(lEmptyValToChar) AEval( oBrw:aColumns, {| oCol| oCol:lEmptyValToChar := .T. } ) ENDIF IF ! empty(lOnGotFocusSelect) AEval( oBrw:aColumns, {| oCol| oCol:lOnGotFocusSelect := .T. } ) ENDIF nW := 0 ... И в примере DEFINE TBROWSE oBrw ; AT nY, nX ALIAS aArray WIDTH nW HEIGHT nH CELL ; FONT { "Norm", "Bold", "Bold" } ; BRUSH { 255, 255, 240 } ; HEADERS aHead ; COLSIZES aSize ; PICTURE aPict ; JUSTIFY aAlign ; COLNAMES aName ; COLNUMBER { 1, 40 } ; FOOTERS aFoot ; FIXED ADJUST COLEMPTY ; ENUMERATOR EDIT ; GOTFOCUSSELECT
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1676
Зарегистрирован: 11.02.10
|
|
Отправлено: 16.04.20 20:25. Заголовок: SergKis пишет: Еще ..
SergKis пишет: Добавил все ваши предложения без изменений, пример работает нормально. Благодарю за помощь
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1678
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.04.20 10:48. Заголовок: Всем кому это интересно
Подготовил 2-й релиз-кандидат для новой сборки 20.04. Что нового: Скрытый текст
цитата: | * Fixed: A correction for the font attributes handling in SplitButton control. Contributed by Ivanil Marcelino <ivanil/at/linkbr.com.br> (see demo in folder \samples\Advanced\SplitButton) ... * Modified: PLAYER: the helpful functions were moved from the samples to MiniGUI core: - aSize := GetAviFileSize( <cFileName> ) ; - aSize := GetAviResSize( <cResName> ). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demos in the folders \samples\Basic\PLAYER_1 and \samples\Basic\ANIMATEDEMO_2) ... * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: ... Added the following optional clauses to DEFINE TBROWSE command: - New: COLSEMPTY clause means to assign oCol:lEmptyValToChar := .T. for all columns of a TBROWSE control. - New: GOTFOCUSSELECT clause means to assign oCol:lOnGotFocusSelect := .T. for all edited columns of a TBROWSE control. - Enhanced: LOADFIELDS clause allows to load an array with using of the method SetArrayTo() at startup of a TBROWSE control. Contributed by Sergej Kiselev. (see demo3.prg in folder \samples\Advanced\Tsb_Array_2) * Updated: Harbour Compiler 3.2.0dev (SVN 2020-04-19 16:32). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) ... * Updated: 'Cas_dbf' sample: added an enhanced demo with Tsbrowse search. Contributed by Pierpaolo Martinello <pier.martinello[at]alice.it> (see in folder \samples\Basic\Database) |
|
|
Благодарю за ваше внимание
|
|
|
alex_II
|
| |
Пост N: 149
Зарегистрирован: 12.07.06
|
|
Отправлено: 22.04.20 06:46. Заголовок: TBROWSE vs мышь
В TBrowse использую событие ON CHANGE, в котором некая функция выводит в STATUSBAR дополнительную информацию из текущей строки: ... DEFINE TBROWSE Br_omes AT h_tlbar,0 ALIAS (al) WIDTH w_br HEIGHT h_br ; BOLD CELLED ; ON CHANGE Form_oMes.StatusBar.Item(1) := f_corr(1,al) ... Если движение по строкам осуществляется клавиатурой, то все работает нормально, в STATUSBAR'е идет корректное отображение данных функцией f_corr(). Если перемещение производить мышью, указывая строку в TBrowse или использовать колесо прокрутки, то после отработки события ON CHANGE, данные в STATUSBAR'е исчезают, т.е поле очищается. В Browse в аналогичной ситуации все отрабатывает нормально.
|
|
|
Dima
|
| |
Пост N: 7181
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.04.20 08:05. Заголовок: alex_II Глянь приме..
alex_II Глянь пример C:\MiniGUI\SAMPLES\Advanced\Tsb_config\ и функцию FUNCTION MyChangeBrowse Вроде все работает и с мышкой
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3145
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.04.20 22:39. Заголовок: gfilatov2002 Можно ..
gfilatov2002 Можно чуть поправить ? h_objmisc.prg FUNCTION _wPost( nEvent, nIndex, xParam ) ... ENDIF ELSEIF HB_ISCHAR( nIndex ) oWnd := _WindowObj( nIndex ) nIndex := NIL ELSE oWnd := _WindowObj( _HMG_THISFORMNAME ) ENDIF ... FUNCTION _wSend( nEvent, nIndex, xParam ) ... ENDIF ELSEIF HB_ISCHAR( nIndex ) oWnd := _WindowObj( nIndex ) nIndex := NIL ELSE oWnd := _WindowObj( _HMG_THISFORMNAME ) ENDIF ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1682
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.04.20 09:57. Заголовок: SergKis пишет: чуть..
SergKis пишет: цитата: | чуть поправить ? h_objmisc.prg |
| OK
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3146
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.04.20 12:42. Заголовок: gfilatov2002 Может ..
gfilatov2002 Может есть смысл добавить, что то такое ? *-----------------------------------------------------------------------------* FUNCTION _SetWindowThis ( i ) *-----------------------------------------------------------------------------* IF Empty( i ) _PushEventInfo() ELSE IF HB_ISCHAR( i ) i := GetFormIndex( i ) ELSEIF HB_ISOBJECT( i ) i := iif( i:ClassName == 'TSBROWSE', GetFormIndex( i:cParentWnd ), i:Index ) ENDIF _PushEventInfo() _HMG_ThisFormIndex := i _HMG_ThisEventType := '' _HMG_ThisType := 'W' _HMG_ThisIndex := i _HMG_ThisFormName := _HMG_aFormNames [ _HMG_ThisFormIndex ] _HMG_ThisControlName := "" ENDIF RETURN NIL Использовать например так ... IF !IsWindowActive( Form_Client ) DEFINE WINDOW Form_Client ; ... ELSE // !!! так сейчас пишем Form_Client.WIDTH := nWinWidth Form_Client.HEIGHT := nWinHeight Form_Client.Label_0.Value := cVal CENTER WINDOW Form_Client // !!! можем так делать ( это маленький кусочек ) _SetWindowThis( "Form_Client" ) This.WIDTH := nWinWidth This.HEIGHT := nWinHeight This.Label_0.Value := cVal This.CENTER _SetWindowThis() ENDIF Можно DEFINE сделать на ф-ю или команды аналогично IsWindowActive( Form_Client )
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1683
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.04.20 12:53. Заголовок: SergKis пишет: Може..
SergKis пишет: цитата: | Может есть смысл добавить |
| Благодарю за предложение Это уже идея для новой сборки... А подготовка апрельской сборки уже завершена, и она будет опубликована завтра
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3147
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.04.20 12:56. Заголовок: PS Ошибся. Надо ..
PS Ошибся. Надо IF Empty( i ) _PopEventInfo() ELSE
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3148
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.04.20 21:19. Заголовок: gfilatov2002 пишет Э..
gfilatov2002 пишет цитата: | Это уже идея для новой сборки... |
| Есть ф-я _SetThisFormInfo (у меня давно исправлена) можно ее использовать FUNCTION _SetThisFormInfo ( i ) // стек значений переменных _HMG_This... LOCAL l := .T. // BK 18.05.2015 IF empty( i ) _PopEventInfo() ELSE IF HB_ISCHAR( i ) i := GetFormIndex( i ) l := .F. ELSEIF HB_ISOBJECT( i ) i := iif( i:ClassName == 'TSBROWSE', GetFormIndex( i:cParentWnd ), i:Index ) l := .F. ENDIF _PushEventInfo() _HMG_ThisEventType := iif( l, 'DEFINE_WINDOW', '' ) _HMG_ThisFormIndex := i _HMG_ThisType := _HMG_aFormType [ i ] _HMG_ThisIndex := i _HMG_ThisFormName := _HMG_aFormNames [ i ] _HMG_ThisControlName := "" ENDIF RETURN NIL
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1684
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.04.20 22:21. Заголовок: SergKis пишет: Есть..
SergKis пишет: цитата: | Есть ф-я _SetThisFormInfo (у меня давно исправлена) можно ее использовать |
| Да, использовать/доработать уже существующую функцию, конечно, предпочтительнее. Выполнил предложенные изменения в текущей сборке, контрольный пример отработал правильно. цитата: | _SetThisFormInfo(Form_1.Index) This.Browse_1.ColumnsAutoFitH() This.CENTER This.ACTIVATE _SetThisFormInfo() |
| Благодарю за помощь
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1685
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.04.20 09:54. Заголовок: Опубликована новая с..
Опубликована новая сборка 20.04 для BCC 5.8.2 и компиляторов Harbour и xHarbour. Базовый дистрибутив находится по адресу http://hmgextended.com/files/CONTRIB/hmg-20.04-setup.exe Добавил также архив для бесплатного Embarcadero C++ 10.2 'Tokyo' compiler http://hmgextended.com/files/CONTRIB/hmg2004_bcc102.exe Для частного использования подготовлены еще два дистрибутива: цитата: | Harbour MiniGUI Extended Edition 20.04 (Release) Harbour 3.2.0dev (r2004201301) Harbour Make (hbmk2) 3.2.0dev (r2020-04-20 13:01) gcc (MinGW-W64 i686-posix-sjlj, built by Brecht Sanders) 9.3.0 |
|
и цитата: | Harbour MiniGUI Extended Edition 20.04 (Release) (64-bit) Harbour 3.4.0dev (64-bit) (2017-12-20 13:40) Harbour Make (hbmk2) 3.4.0dev (64-bit) (2017-12-20 13:40) gcc (GCC) 9.2.0 (64-bit) |
|
доступ к которым открыт для всех, кто поддержал выпуск этой сборки материально.
|
|
|
Dima
|
| |
Пост N: 7184
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.04.20 10:14. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | доступ к которым открыт для всех, кто поддержал выпуск этой сборки материально. |
| Там Forbidden.......подождем пока отвалится ЗЫ Социнжиниринг помог добраться куда надо :)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6640
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.04.20 11:39. Заголовок: Отличная новость ! ..
Отличная новость ! А Микрософтный компилятор где ? Я уже с ним вожусь потихоньку. Мигрировать на него собираюсь.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3149
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.04.20 12:59. Заголовок: gfilatov2002 пишет В..
gfilatov2002 пишет цитата: | Выполнил предложенные изменения в текущей сборке, |
| Вариант _SetThisFormInfo() остался старый в последней сборке
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1686
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.04.20 13:03. Заголовок: SergKis пишет: оста..
SergKis пишет: цитата: | остался старый в последней сборке |
| Да, решил, что это подождет до следующего релиза Добавил также новую команду: цитата: | #xtranslate SET WINDOW THIS TO [<w>] => _SetThisFormInfo( [<w>] ) |
|
Еще раз благодарю за Ваши идеи
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3150
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.04.20 15:58. Заголовок: gfilatov2002 пишет Д..
gfilatov2002 пишет цитата: | Да, решил, что это подождет до следующего релиза Добавил также новую команду: |
| Сделал эти изменения в MiniGuiBcc58, MiniGuiBcc102. Проверил сборку lib. Все либы собрались. Примеры Tsb_array_2 все отработали в обоих bcc. Пример с командой то же ... LOCAL oThis, cForm := "Form_Client" ... IF !_IsWindowActive( cForm ) DEFINE WINDOW &cForm ; ... ELSE SET WINDOW THIS TO cForm oThis := This.Object This.WIDTH := nWinWidth This.HEIGHT := nWinHeight This.Label_0.Value := cVal This.CENTER SET WINDOW THIS TO ENDIF ... Спасибо все работает
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1687
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.04.20 20:17. Заголовок: SergKis пишет: все ..
SergKis пишет: Благодарю за подтверждение
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1688
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.04.20 21:43. Заголовок: Andrey пишет: Микро..
Andrey пишет: цитата: | Микрософтный компилятор где ? |
|
Свежий архив для этого компилятора положил в папку PRIVATE на сайте библиотеки (имя архива не изменял). цитата: | Harbour Build Info --------------------------- Version: Harbour 3.2.0dev (r2002101434) Compiler: Microsoft Visual C++ 19.24.28319 (32-bit) Platform: Windows 10 10.0 PCode version: 0.3 ChangeLog last entry: 2020-02-10 15:34 UTC+0100 Aleksander Czajczynski (hb fki.pl) ChangeLog ID: 123475ab11ba031e8b9c88138f2f0b24e4327e54 Built on: Mar 12 2020 10:55:14 Extra Harbour compiler options: -gc0 Extra C compiler options: -DHB_GC_AUTO -DHB_GUI -DHB_NO_TRACE Build options: (C++ mode) (Clipper 5.3b) (Clipper 5.x undoc) |
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6641
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.05.20 16:45. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Свежий архив для этого компилятора положил в папку PRIVATE на сайте библиотеки (имя архива не изменял). |
| Спасибо БОЛЬШОЕ, но не могу найти где брать. Предыдущие ссылки не работают. Если не трудно, прошу отправить ссылки мне на почту.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1689
Зарегистрирован: 11.02.10
|
|
Отправлено: 01.05.20 18:03. Заголовок: Andrey пишет: прошу..
Andrey пишет: цитата: | прошу отправить ссылки мне на почту |
| Отправил ссылку по почте
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6642
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.05.20 18:23. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Спасибо БОЛЬШОЕ !
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3158
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.05.20 13:49. Заголовок: gfilatov2002 Правка..
gfilatov2002 Правка (в первой колонке oCol:nWidth всегда NIL получается) METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse ... cBlock := 'FieldWBlock("' + aStru[ nE, 1 ] + '",Select("' + cAlias + '"))' ::AddColumn( TSColumn():New( cHeading, FieldWBlock( aStru[ nE, 1 ], Select( cAlias ) ),cPicture, ; { ::nClrText, ::nClrPane }, { nAlign, DT_CENTER }, nSize,, lEditable,,, cOrder,,,, ; 5,,,, Self, cBlock ) ) IF ATail( ::aColSizes ) == NIL ::aColSizes[ Len( ::aColSizes ) ] := nSize ENDIF cName := ( cAlias )->( FieldName( nE ) ) ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3159
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.05.20 14:24. Заголовок: PS Изменение лучше с..
PS Изменение лучше сделать тут METHOD AddColumn( oColumn ) CLASS TSBrowse ... If Len( ::aColSizes ) < Len( ::aColumns ) AAdd( ::aColSizes, oColumn:nWidth ) EndIf If ATail( ::aColSizes ) == NIL ::aColSizes[ Len( ::aColSizes ) ] := oColumn:nWidth ENDIF If ::aPostList != Nil // from ComboWBlock function ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1690
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.05.20 14:30. Заголовок: SergKis пишет: лучш..
SergKis пишет: Добавил, конечно. Благодарю за помощь
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6644
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.05.20 14:43. Заголовок: И вот эту ошибку тож..
И вот эту ошибку тоже бы убрать: Error BASE/2017 Argument error: AEVAL Args: [1] = U [2] = B {|| ... } --------------------------------- Stack Trace --------------------------------- Called from AEVAL(0) Called from MAIN(53) in module: demo5.prg Делаю так: aHead := NIL ?v aHead Пускай NIL возвращает, а то прога валится.
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3160
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.05.20 14:57. Заголовок: Можно так поправить ..
Можно так поправить i_ini.ch #command ?a [<arr>] => If( <arr> == NIL, , aEval( <arr>, { |xv, ne| _LogFile( (ne==1), ne, xv ), _LogFile() } ) ) #command ?v [<arr>] => If( <arr> == NIL, , aEval( <arr>, { |xv, ne| _LogFile( (ne==1), ne, iif( Valtype(xv) == "A", hb_valtoexp(xv), xv ) ), _LogFile() } ) )
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6645
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.05.20 15:13. Заголовок: SergKis пишет: Можн..
SergKis пишет: цитата: | Можно так поправить i_ini.ch |
| Поправил, теперь ошибки нет и результата в _MsgLog.txt нет. Будешь гадать почему нет ?v aHead
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3161
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.05.20 15:34. Заголовок: Andrey пишет теперь ..
Andrey пишет цитата: | теперь ошибки нет и результата в _MsgLog.txt нет. |
| Так применяй правильно ? "aSize =", aSize ?v aSize Ошибки нет и занятого места тоже в лог файле aSize = NIL
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6646
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.05.20 16:13. Заголовок: SergKis пишет: Так ..
SergKis пишет: Понял !
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3164
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.05.20 11:08. Заголовок: gfilatov2002 Может ..
gfilatov2002 Может чуток подправим ? METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse ... Local cTmp, cHead, hFontH ... hFont := iif( ::hFont != Nil, ::hFont, 0 ) hFontH := iif( ::hFontHead != Nil, ::hFontHead, ::hFont ) If cType == "C" ... nSize := Max( GetTextWidth( 0, Replicate( "B", Len( cHeading )+1 ), hFontH ), nSize ) nSize += iif( ! Empty( cOrder ), 14, 0 ) ElseIf ValType( ::aColSizes ) == "A" .and. ! Empty( ::aColSizes ) .and. n <= Len( ::aColSizes ) ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1691
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.05.20 12:27. Заголовок: SergKis пишет: чуто..
SergKis пишет: Поправил, конечно. Благодарю за помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3167
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.05.20 21:09. Заголовок: gfilatov2002 Предло..
gfilatov2002 Предложение по ENUMERATOR для нумерации только видимых колонок. :lEnum := .F. меняет цвет, align. Словом не подошел. Простое решение при :lEnum := .T. METHOD DrawHeaders( lFooters ) CLASS TSBrowse ... Local nDeltaLen, uTmp ... IF ::lDrawSpecHd ... if ::lEnum cHeading := hb_ntos( nJ - iif( ::lSelector, 1, 0 ) ) IF ! empty( oColumn:cSpcHeading ) uTmp := iif( Valtype( oColumn:cSpcHeading ) == "B", Eval( oColumn:cSpcHeading, nJ, Self ), oColumn:cSpcHeading ) IF HB_ISNUMERIC ( uTmp ) ; cHeading := hb_ntos( uTmp ) ELSEIF HB_ISCHAR( uTmp ) ; cHeading := uTmp ENDIF ENDIF if nI == nBegin .and. ::lSelector .or. nI == nLastCol cHeading := "" endif else ... Применение ... mySetTsb( oBrw ) myColorTsb( oBrw ) // цвета на таблицу myColorTsbElect( oBrw ) // цвета избранные myDbfDelColTsb( oBrw ) myEnumTsb( oBrw ) mySet2Tsb( oBrw ) :bOnEscape := {|ob| DoMethod(ob:cParentWnd, "Release") } // выход по ESC END TBROWSE ON END {|ob| ob:SetNoHoles(), ob:SetFocus() } ... STATIC FUNCTION myEnumTsb( oBrw ) LOCAL oCol, nCnt := 0 FOR EACH oCol IN oBrw:aColumns oCol:cSpcHeading := NIL IF oCol:lVisible oCol:cSpcHeading := hb_ntos( ++nCnt ) ENDIF NEXT RETURN NIL ... Т.е. если убрать myDbfDelColTsb( oBrw ) // myEnumTsb( oBrw ) mySet2Tsb( oBrw ) будет первоначальный алгоритм При отработке ф-ии будет нумерация только видимых колонок У Андрея есть пример, если что ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1692
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.05.20 21:30. Заголовок: SergKis пишет: Пред..
SergKis пишет: цитата: | Предложение по ENUMERATOR для нумерации только видимых колонок. |
| Принято, конечно.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3168
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 12:35. Заголовок: gfilatov2002 Сделал..
gfilatov2002 Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg) Скрытый текст
CLASS TSColumn DATA oCell // TSBcell object ... это только места обозначены CLASS TSBcell ... CLASS TSBrowse FROM TControl DATA lDrawLine AS LOGICAL INIT .T. // flag for cells row drawing ... METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse ... If ::bOnDrawLine != Nil Eval( ::bOnDrawLine, Self ) EndIf IF ! ::lDrawLine nBegin := 1 nLastCol := ::nColCount() ENDIF For nI := nBegin To nLastCol If nStartCol >= nMaxWidth .and. ::lDrawLine Exit EndIf ... IF ::lDrawLine oColumn:oCell := NIL TSDrawCell( hWnd, ; // 1 ... ELSE oColumn:oCell := TSBcell():New() ... ENDIF ... METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse ... nBegin := Min( iif( ::nColPos <= ::nFreeze, ( ::nColPos := ::nFreeze + 1, ::nColPos - ::nFreeze ), ; ::nColPos - ::nFreeze ), nLastCol ) IF ! ::lDrawLine nBegin := 1 nLastCol := ::nColCount() ENDIF For nI := nBegin To nLastCol If nStartCol >= nMaxWidth .and. ::lDrawLine Exit EndIf ... If lDrawCell .and. ::lDrawLine lDraw := TSDrawCell( hWnd, ; // 1 ... Else lDraw := .T. IF ! ::lDrawLine oColumn:oCell := TSBcell():New() ... ENDIF ...
| Суть изменений получить все данные, которые получаются в :DrawLine() и :DrawSelect() для передачи в ф-ю TSDrawCell(...) рисования строки. Не стал сокращать список параметров для класса TSBcell оставил все параметры. Применение (в примерах прилагаются, нажатие кнопки F8 формирует _MsgLog.txt) такое STATIC FUNCTION my0( oBrw ) LOCAL nAt, nCol, oCol, oCel WITH OBJECT oBrw :GoTop() :DrawSelect() ? "-", :lDrawLine, :nRowPos, :aColumns[2]:oCell, :aDrawCols :lDrawLine := .F. :GoTop() :DrawSelect() ? "#", :lDrawLine, :nRowPos, :aColumns[2]:oCell, :aDrawCols :DrawLine() FOR nAt := 1 TO :nLen ? nAt, :aColumns[2]:oCell FOR nCol := 1 TO :nColCount() oCol := :aColumns[ nCol ] oCel := oCol:oCell ? ".", oCol:lVisible, nCol, oCel:nStartCol, oCol:cName, oCel:nAlign, oCel:nClrFore, oCel:nClrBack, oCel:uData NEXT :GoDown() NEXT ? :lDrawLine := .T. :Reset() END WITH RETURN Nil Запуск demo5.exe // работа с массивом demo5.exe * // работа с emploee.dbf demo7.exe // работа с AbonItogo.dbf (файл и раскраска от Андрея) Должно облегчить работу с Excel, наверное PS В h_tbrowse.prg есть изменения связанные с отступами слева, справа, которые мы обсуждали с Игорем в теме "Курсы ЦБ на дату" это prg моей версии. В примере demo5 есть установка :nCellMarginLR := 1 Примеры и h_tbrowse.prg тут https://TransFiles.ru/eicsv
|
|
|
Haz
|
| |
Пост N: 1549
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.05.20 12:41. Заголовок: Эти изменения отключ..
Эти изменения отключают или включают прорисовку?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3169
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 12:44. Заголовок: Отключают, т.е. при ..
Отключают, т.е. при :lDrawLine == .F. нет вывода на экран
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3170
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 12:48. Заголовок: PS :aDrawCols - это ..
PS :aDrawCols - это массив номеров колонок, которые на рисовались окне, формируется массив в :DrawLine()
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3171
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 12:50. Заголовок: PSформируется массив..
PS цитата: | формируется массив в :DrawLine() |
| Пальцы на автомате, набрали, надо не :DrawLine(), а DrawSelect()
|
|
|
Haz
|
| |
Пост N: 1550
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.05.20 12:56. Заголовок: Если практическое ис..
Если практическое использование - пробежаться по бровсу не тратя время на экранный вывод, то в случае с dbf можно проще nRec := (oBrw:cAlias)->(RecNo()) while !(oBrw:cAlias)->( Eof()) for n := 1 To Len( oBrw:aColumns ) Eval( oBrw:aColumns[n]:bData) end (oBrw:cAlias)->(dbSkip(1)) end (oBrw:cAlias)->(dbGoTo(nRec)) пробежимся по всем строкам и столбцам и прописовки не будет
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3172
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 13:13. Заголовок: Haz пишет пробежимся..
Haz пишет цитата: | пробежимся по всем строкам и столбцам и прописовки не будет |
| В таком варианте 1. Eval( oBrw:aColumns[n]:bData) не учитывает oBrw:aColumns[n]:bValue и особенно :bDecode, использую широко, т.е. надо Brw:GetValue( n ) или oBrw:bDataEval(oCol ,[xVal], nCol) 2. нет цветов фона и текста в такой реализации (получаются из блоков кода от значения данных в cell), для Excel это может быть важно 3. для массива и dbf надо писать разный код Можно, конечно писать, повторив часть кода из метода :DrawLine(), как сейчас и делали. В моем предложении все данные на ячейку в TSBcell объкте по адресу oBrw:aColumns[ n ]:oCell, т.е. надо используем, нет то как раньше
|
|
|
Haz
|
| |
Пост N: 1551
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.05.20 13:51. Заголовок: SergKis пишет: В мо..
SergKis пишет: цитата: | В моем предложении все данные на ячейку в TSBcell объкте по адресу oBrw:aColumns[ n ]:oCell, т.е. надо используем, нет то как раньше |
| Сергей , да я не против твоей доработки. В простых задачах она пригодиться. Я же в проектах не смогу ее использовать по следующим причинам. 1. Редко когда использую простой бровс, как правило есть несколько подчиненных обновляемых по bChange (есть и bOnDraw ) и тупить прогон по бровсу будет не из-за прорисовки Можно отключать bChange при прогоне, а потом включать , но зачем ( см п 3 ) 2. Выгрузку в Excel через OLE не делаю совсем т.к. много отчетов объемных более 1000 строк и 50 и более колонок и через олю на отчеты тратится неприемлемое время Все отчеты только через XMLXLS . по скорости 20 минут это оля и 15 секунд xml Цвета и текст задаю заранее для xml 3. Как уже писал ранее ,при помощи Андрею в его TSB_экспортах - считаю такие экспорты (средствами бровса) красивыми, но бесперспективными с точки зрения временных затрат Бровс умеет работать только с текущей записью , зачем мне тормозной перебор если я могу взять весь массив данных сразу и делать с ним что хочу (aEval, dbEval, SQLExecute() и пр) . В целом , для демонстрашки экспорта доработка хорошая, практически не знаю зачем
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1693
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.05.20 14:17. Заголовок: SergKis пишет: Сдел..
SergKis пишет: цитата: | Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg) |
| Обязательно проанализирую и включу эти изменения в новую сборку (с учетом Вашего мнения и мнения Игоря, как главных разработчиков дополнений к TSBrowse). Благодарю за Вашу помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3173
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 14:19. Заголовок: Haz пишет практическ..
Haz пишет цитата: | практически не знаю зачем |
| Согласен, много случаев, особенно старых кодов, где это не применить, да и не нужно. А вывести в Excel таблицу (широкую, но простую), с цветными колонками, для которой печати нет (морока организации листов в разрезе горизонтали) есть передача в Excel и если захотят, будут распечатки делать из него. Условие сохранение цветности. С применением hbxmlxls.lib чтобы передать цветность это тоже пригодится. цитата: | Бровс умеет работать только с текущей записью , зачем мне тормозной перебор |
| Можно не перебирать, а выполнить :DrawLine( , .F. ) и для тек. записи будет в колонках oCol:oCell заполнен
|
|
|
Haz
|
| |
Пост N: 1552
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.05.20 14:32. Заголовок: SergKis пишет: Можн..
SergKis пишет: цитата: | Можно не перебирать, а выполнить :DrawLine( , .F. ) и для тек. записи будет в колонках oCol:oCell заполнен |
| Как дальнейшее развитие oCell имеет смысл
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3174
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 15:03. Заголовок: SergKis пишет Можно ..
SergKis пишет цитата: | Можно не перебирать, а выполнить :DrawLine( , .F. ) |
| Игорь, хорошо, что спросил. Начал еще раз проверять, параметр ввел, а исправить перенос из :DrawSelect() на эту переменную забыл gfilatov2002 Правочка небольшая с выше сказанным на мой текст METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse ... Default xRow := iif( ::lDrawHeaders, Max( 1, nRowPos ), nRowPos ), lDrawCell := ::lDrawLine ... If ::bOnDrawLine != Nil Eval( ::bOnDrawLine, Self ) EndIf IF ! lDrawCell nBegin := 1 nLastCol := ::nColCount() ENDIF For nI := nBegin To nLastCol If nStartCol >= nMaxWidth .and. lDrawCell Exit EndIf ... IF nAlign != DT_CENTER .and. ::nCellMarginLR != NIL uData := ::CellMarginLeftRight( nJ, uData, oColumn, nAlign, lMultiLine, 0 ) ENDIF IF lDrawCell oColumn:oCell := NIL TSDrawCell( hWnd, ; // 1 ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1694
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.05.20 15:07. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | включу эти изменения в новую сборку |
| Выполнил все предложенные изменения кода, пересобрал пример demo5 - экспорт по клавише F8 работает аналогично готовому экзешнику
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3175
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 15:22. Заголовок: gfilatov2002 Если б..
gfilatov2002 Если брали целиком мой файл h_tsbrowse.prg в нем надо убрать строки (была проба и не убрал) FUNCTION _DefineTBrowse( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ; ... oBrw:InsColumn( nColNumber, oCol ) IF oBrw:lDrawFooters oBrw:aColumns[ nColNumber ]:cFooting := "" ENDIF oBrw:nCell := nColNumber + 1 oBrw:nFreeze := nColNumber oBrw:lLockFreeze := .T. ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1695
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.05.20 15:39. Заголовок: SergKis пишет: надо..
SergKis пишет: Убрал, конечно
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6651
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.05.20 16:11. Заголовок: Haz пишет: 3. Как у..
Haz пишет: цитата: | 3. Как уже писал ранее ,при помощи Андрею в его TSB_экспортах - считаю такие экспорты (средствами бровса) красивыми, но бесперспективными с точки зрения временных затрат Бровс умеет работать только с текущей записью , зачем мне тормозной перебор если я могу взять весь массив данных сразу и делать с ним что хочу (aEval, dbEval, SQLExecute() и пр) . В целом , для демонстрашки экспорта доработка хорошая, практически не знаю зачем |
| Если бы такие красивые отчеты нужны были каждый день, то согласен, делал бы НЕ через ОЛЮ. А так раз в месяц, а то и три нужен красивый отчёт начальству. Не буду я тратить время на это, пускай 20 минут ждут, хотя у меня быстрей проходит. Есть готовая фишка в МиниГуи - красивый экспорт, пускай работает.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1696
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.05.20 17:07. Заголовок: Всем кому это интересно
Подготовил 2-ю бету для новой сборки 20.05. Что нового Скрытый текст
* New: Added a new command for managing of the 'This' property at runtime: SET WINDOW THIS TO [<w>] where <w> may be a Form Name or a Form Index. Sample code: DEFINE WINDOW Form_1 ... @ 10,10 BROWSE Browse_1 ... END WINDOW ... Set Window This To "Form_1" // set a new 'This' property This.Browse_1.ColumnsAutoFit() This.Center() This.Activate() Set Window This To // restore a previous 'This' property Suggested and contributed by Sergej Kiselev. * Enhanced: Added support of the PICTURE option to format the columns in the Browse control. Contributed by Jan Szczepanik <jan-szczepanik/at/wp.pl> (see demo in folder \samples\Basic\BROWSE_PICTURE) * Enhanced: The SplitButton control may be placed now in the TAB container. Requested by Ivanil Marcelino <ivanil/at/linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: PropGrid library v.2.0 (see source in folder \source\PropGrid): - Fixed: Bug in a Masked Float (double) item handling. Reported by Ivanil Marcelino <ivanil/at/linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo3.prg in folder \samples\Advanced\PropGrid) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - a minor correction in the method :AddColumn(); - added ENUMERATOR correction for numbering of the visible columns only. Usage: nCnt := 1 FOR EACH oCol IN oBrw:aColumns oCol:cSpcHeading := NIL IF oCol:lVisible oCol:cSpcHeading := hb_ntos( nCnt++ ) ENDIF NEXT - added the new variable :lDrawLine in the TSBrowse class and the new variable :oCell in the TSColumn class; - enhanced auxiliary class TSBcell for a quick export of a data; - added the new variable :nCellMarginLR and the new method CellMarginLeftRight() in the TSBrowse class. Contributed by Sergej Kiselev (see demo5.prg in folder \samples\Advanced\Tsb_Array_2) * Updated: HbSQLite3 library: - update for using SQLITE3 latest version 3.32.0dev. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * Updated: '7-Zip interaction' sample by Vladimir Chumachenko: - the russian comments were replaced with an english translation. Contributed by Anand K Gupta (see in folder \samples\Advanced\7-Zip)
|
Если заметили неточности в этом описании - пишите, исправлю...
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6652
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.05.20 18:13. Заголовок: А нельзя в новой вер..
А нельзя в новой версии сделать правильное отображение символьных полей при задании центровки DT_CENTER ? Не работает центровка сейчас ! Чтобы заработало, нужно шаманство делать, благо без бубна...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3176
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 18:35. Заголовок: Andrey пишет А нельз..
Andrey пишет цитата: | А нельзя в новой версии сделать правильное отображение символьных полей при задании центровки DT_CENTER ? Не работает центровка сейчас ! |
| Центровка работает, но мешает центровать, как ты хочешь правые пробелы. Если их убирать ( trim() или alltrim ? ), то "сломается" отображение старого алгоритма, т.е. значение "1 " в колонке 120 шириной отобразится по другому. Так же сломаться может отображение строк с CRLF. Сейчас решаю задавая oCol:bDecode := {|cval| Alltrim(cval) }
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6653
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.05.20 18:42. Заголовок: SergKis пишет: Сейч..
SergKis пишет: цитата: | Сейчас решаю задавая oCol:bDecode := {|cval| Alltrim(cval) } |
| Это я понял. Спасибо ! Не работает цвет в суперхидере. Делаю цвет в таблице: :Setcolor( { 3}, { CLR_WHITE } ) // 3 , текста шапки таблицы :SetColor( { 4}, { { || { CLR_BLACK, CLR_GRAY } } } ) // 4 , фона шапка таблицы :SetColor( {16}, { { || { CLR_BLACK, CLR_GRAY } } } ) // 16, фона спецхидер :SetColor( {17}, { { || CLR_YELLOW } } ) // 17, текста спецхидер Вот результат:
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3177
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.20 19:15. Заголовок: Andrey Как он может..
Andrey Как он может работать, если цвета ставишь на него, раньше, чем создаешь SuperHeader mySetTsb( oBrw ) // настройки таблицы myColorTsb( oBrw ) // цвета на таблицу myColorTsbElect( oBrw ) // цвета избранные mySumTsb ( oBrw ) // суммирование колонок таблицы myDbfDelColTsb( oBrw ) // убрать колонки из отображения mySupHdTsb( oBrw, aSupHd ) // SuperHeader myEnumTsb( oBrw ) // ENUMERATOR по порядку mySet2Tsb( oBrw ) // настройки таблицы
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6654
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.05.20 19:39. Заголовок: SergKis пишет: Как ..
SergKis пишет: цитата: | Как он может работать, если цвета ставишь на него, раньше, чем создаешь SuperHeader |
| Ну вот так и бывает...
|
|
|
Haz
|
| |
Пост N: 1553
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.05.20 23:51. Заголовок: Andrey пишет: Не бу..
Andrey пишет: цитата: | Не буду я тратить время на это |
| Каждому своё. Я лучше один раз потрачу тк мне неприемлемо когда отчёта нужно ожидать больше нескольких секунд. Что касается "пусть будет", то я и не говорил что эти доработки нужно убрать. Я говорил только о том, что для серьёзных объёмов есть другой инструмент, который в отличии от кривого Ole экспорта работает всегда и позволяет любые цвета и шрифт.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3179
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.05.20 08:59. Заголовок: gfilatov2002 Предло..
gfilatov2002 Предложение по hmg_alert(), AlertInfo() и др. - hmg_alert() значение nIcoSize сделать равным 0, тогда на окне нет DRAW ICO ... - в AlertInfo(), AlertExclamation(), AlertStop() добавить параметр lNoPlay, для отключения звук. сигнала Alert.prg Скрытый текст
... *-----------------------------------------------------------------------------* FUNCTION AlertExclamation ( Message, Title, Icon, nSize, aColors, lTopMost, bInit, lNoPlay ) *-----------------------------------------------------------------------------* LOCAL nWaitSec IF ISNUMERIC( Title ) nWaitSec := Title ENDIF IF Empty( lNoPlay ) ; PlayExclamation() ENDIF RETURN _Alert( Message, nWaitSec, hb_defaultValue( Title, _HMG_MESSAGE [10] ), , , Icon, nSize, aColors, lTopMost, bInit ) *-----------------------------------------------------------------------------* FUNCTION AlertInfo ( Message, Title, Icon, nSize, aColors, lTopMost, bInit, lNoPlay ) *-----------------------------------------------------------------------------* LOCAL nWaitSec IF ISNUMERIC( Title ) nWaitSec := Title ENDIF IF Empty( lNoPlay ) ; PlayAsterisk() ENDIF RETURN _Alert( Message, nWaitSec, hb_defaultValue( Title, _HMG_MESSAGE [11] ), ICON_INFORMATION, , Icon, nSize, aColors, lTopMost, bInit ) *-----------------------------------------------------------------------------* FUNCTION AlertStop ( Message, Title, Icon, nSize, aColors, lTopMost, bInit, lNoPlay ) *-----------------------------------------------------------------------------* LOCAL nWaitSec IF ISNUMERIC( Title ) nWaitSec := Title ENDIF IF Empty( lNoPlay ) ; PlayHand() ENDIF RETURN _Alert( Message, nWaitSec, hb_defaultValue( Title, _HMG_MESSAGE [12] ), ICON_STOP, , Icon, nSize, aColors, lTopMost, bInit ) ...
| По поводу цитата: | - added the new variable :lDrawLine in the TSBrowse class |
| Добавил "быстрого" доступа к элементам тсб, SuperHeader, Header, SpecHd, DrawLine и Footer. В TsColumn.prg добавил переменные DATA oCellHead // TSBcell object Header DATA oCellEnum // TSBcell object Enumerator DATA oCellFoot // TSBcell object Footer DATA oCell // TSBcell object В h_tbrowse.prg правил METHOD DrawSuper( lDrawCell ) CLASS TSBrowse METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse CLASS TSBcell Исходники и пример по использованию тут https://TransFiles.ru/vpnu8 в demo7 работают клавиши F8 - общий способ доступа для массива и dbf, использован "родной" вариант AlertInfo() F9 - только доступ для dbf, использован вариант AlertInfo() с nIcoSize := 0 и lNoPlay := .T.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1697
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.05.20 16:21. Заголовок: SergKis пишет: Пред..
SergKis пишет: цитата: | Предложение по hmg_alert(), AlertInfo() и др. ... Добавил "быстрого" доступа к элементам тсб, SuperHeader, Header, SpecHd, DrawLine и Footer. |
| Все правки приняты - хорошая работа. Благодарю за помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3180
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.05.20 20:26. Заголовок: gfilatov2002 Еще та..
gfilatov2002 Еще такая правка CLASS TSBrowse FROM TControl ... ACCESS IsEdit INLINE ! Empty( ::aColumns[ ::nCell ]:oEdit ) // SergKis addition ACCESS Tsb INLINE ::oWnd ... FUNCTION GetProperty ( Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 ) ... #ifdef _OBJECT_ CASE Arg3 == "OBJECT" IF _HMG_lOOPEnabled RetVal := _ControlObj ( Arg2 , Arg1 ) IF HB_ISOBJECT( RetVal ) .and. _HMG_aControlType[ RetVal:Index ] == "TBROWSE" RetVal := _HMG_aControlIds[ RetVal:Index ] ENDIF ELSEIF ( ix := GetControlIndex ( Arg2 , Arg1 ) ) > 0 IF _HMG_aControlType[ ix ] == "TBROWSE" RetVal := _HMG_aControlIds[ ix ] ENDIF ENDIF #endif ... Синим цветом, наверно, надо убрать Это даст возможность получать объект TSBROWSE, как SET OOP ON, так и SET OOP OFF ? (This.oBrw.Object):ClassName // SET OOP OFF ? (This.oBrw.Object):Tsb:ClassName // SET OOP ON\OFF
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1698
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.05.20 20:38. Заголовок: SergKis пишет: наве..
SergKis пишет: Предлагаю не убирать, но - передвинуть SergKis пишет: цитата: | CASE Arg3 == "OBJECT" IF _HMG_lOOPEnabled #ifdef _OBJECT_ RetVal := _ControlObj ( Arg2 , Arg1 ) IF HB_ISOBJECT( RetVal ) .and. _HMG_aControlType[ RetVal:Index ] == "TBROWSE" RetVal := _HMG_aControlIds[ RetVal:Index ] ENDIF #endif ELSEIF ( ix := GetControlIndex ( Arg2 , Arg1 ) ) > 0 IF _HMG_aControlType[ ix ] == "TBROWSE" RetVal := _HMG_aControlIds[ ix ] ENDIF ENDIF |
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3181
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.05.20 12:19. Заголовок: gfilatov2002 Добави..
gfilatov2002 Добавить в i_this.ch ... #xtranslate This . <c> . <p:Names> => HMG_GetFormControls ( _HMG_THISFORMNAME , <(c)> ) #xtranslate This . <c> . <p:ClientWidth> => _GetClientRect ( GetControlHandle ( <(c)> , _HMG_THISFORMNAME ) ) \[3] Использовать aAll := This.All.Names ? "All controls name =", aAll ?v aAll ? aTsb := This.TBrowse.Names ? "TBrowse =", aTsb ?v aTsb ? aBtn := This.Button.Names ? "Button =", aBtn ?v aBtn ? aBtn := This.ButtonEx.Names ? "ButtonEx =", aBtn ?v aBtn ? В функциях примера demo7 можно заменить переменную ao на ac AlertInfo( hb_memoread(_SetGetLogFile()), "INFO", , 0, , , ; {||ac,cn| // {|ao,cn| an := This.EditBox.Names // ao := (This.Object):GetObj4Type("EDITBOX") If HB_ISARRAY(an) .and. Len(an) == 1 // If HB_ISARRAY(ao) .and. Len(ao) == 1 cn := an[1] // ao[1]:Name This.Width := test.ClientWidth * 0.95 This.(cn).Row := 10 This.(cn).Col := 10 This.(cn).Width := This.ClientWidth - 10 * 2 This.(cn).Height := This.(cn).Height + 10 * 2 + 10 This.Center EndIf Return Nil } , .T. ) // .T. - lNoPlay
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3182
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.05.20 12:35. Заголовок: PS Добавить еще #xtr..
PS Добавить еще #xtranslate ThisWindow . <p:Names,Controls> => HMG_GetFormControls ( _HMG_THISFORMNAME , "ALL" ) ... #xtranslate This . <p:Names,Controls> => HMG_GetFormControls ( _HMG_THISFORMNAME , "ALL" ) ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3183
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.05.20 13:59. Заголовок: gfilatov2002 Правка..
gfilatov2002 Правка METHOD AddColumn( oColumn ) CLASS TSBrowse ... If ATail( ::aColSizes ) == NIL .and. Len( ::aColSizes ) > 0 ::aColSizes[ Len( ::aColSizes ) ] := oColumn:nWidth ENDIF If ::aPostList != Nil // from ComboWBlock function ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1699
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.05.20 14:13. Заголовок: SergKis пишет: Прав..
SergKis пишет: OK
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3185
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.05.20 17:16. Заголовок: gfilatov2002 По HMG..
gfilatov2002 По HMG_ALert(...), добавить static переменную для кол-сток, сейчас стоит константа 20 Скрытый текст
STATIC aBackColor, aFontColor STATIC s_nMaxLineas := 20 *-----------------------------------------------------------------------------* FUNCTION HMG_Alert_MaxLineas( nMaxLineas ) *-----------------------------------------------------------------------------* IF HB_ISNUMERIC(nMaxLineas ) .and. nMaxLineas > 0 s_nMaxLineas := nMaxLineas ENDIF RETURN s_nMaxLineas ... STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont ) ... LOCAL lExt LOCAL nMaxLineas := HMG_Alert_MaxLineas() ... nWidthDlg := nWidthCli + GetBorderWidth() + iif( nLineas > nMaxLineas, MARGIN * 1.5, 0 ) nHeightCli := ( ( Min( nMaxLineas, nLineas ) + iif( nLineas == 1, 4, 3 ) ) * nChrHeight ) + nVMARGIN_BUTTON + nHeightBtn + GetBorderHeight() ... IF nLineas > 1 IF nLineas > nMaxLineas n := 1 cLblName := "Say_" + StrZero( n, 2 ) @ nChrHeight + GetBorderHeight(), nCol ; EDITBOX (cLblName) VALUE AllTrim( cMsg ) OF (cForm) ; FONT cFont WIDTH nWidthCli - nCol + iif( nLineas < 25, 0.9, 1 ) * MARGIN ; HEIGHT nChrHeight * nMaxLineas + GetBorderHeight() ; FONTCOLOR aFontColor BACKCOLOR aBackColor READONLY NOHSCROLL ELSE ... FOR n := nLenaOp TO 1 STEP -1 This.( aBut[ n ] ).Row := nHeightCli + SEP_BUTTON + GetBorderHeight() / iif( lIsWin10, 2.5, .9 ) - nChrHeight - nHeightBtn This.( aBut[ n ] ).Col := nWidthCli + iif( nLineas > nMaxLineas, MARGIN * 1.5, 0 ) + iif( lIsWin10, 0, GetBorderWidth() / 2 ) - ( nMaxBoton + SEP_BUTTON ) * nOpc++ NEXT n ...
| Что бы управлять высотой окна
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1700
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.05.20 18:59. Заголовок: SergKis пишет: доба..
SergKis пишет: цитата: | добавить static переменную... Что бы управлять высотой окна |
| Добавил, конечно. Но переименовал функцию в HMG_Alert_MaxLines() Благодарю за помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3188
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.05.20 13:31. Заголовок: gfilatov2002 Немног..
gfilatov2002 Немного подкрутил h_alert.prg для контроля выхода за пределы экрана по width. Вот, что получилось. Пример и исходник тут https://TransFiles.ru/mowhr Можно поиграть размером фонта DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize + 1 DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize - 1 DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize - 2
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1701
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.05.20 15:00. Заголовок: SergKis пишет: подк..
SergKis пишет: цитата: | подкрутил h_alert.prg для контроля выхода за пределы экрана |
| Эти изменения не приняты по причине увеличения ширины окон Alert* в примере из папки samples\Basic\WALERT_2 Изменения в файле h_alert.prg не должны приводить к изменению вида обычных окон (совместимость снизу вверх)
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3189
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.05.20 15:28. Заголовок: gfilatov2002 пишет и..
gfilatov2002 пишет цитата: | изменения не приняты по причине увеличения ширины окон Alert* |
| Очень не хочется писать лишний блок кода bInit. Может такие поправки помогут STATIC s_nMaxLineas := 20 STATIC s_lMaxWidth := .F. *-----------------------------------------------------------------------------* FUNCTION HMG_Alert_MaxLines( nMaxLineas, lMaxWidth ) *-----------------------------------------------------------------------------* IF HB_ISNUMERIC(nMaxLineas ) .and. nMaxLineas > 0 s_nMaxLineas := nMaxLineas ENDIF IF HB_ISLOGICAL( lMaxWidth ) s_lMaxWidth := lMaxWidth ENDIF RETURN s_nMaxLineas ... STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... LOCAL nMaxLineas := HMG_Alert_MaxLines() LOCAL lMaxWidth := s_lMaxWidth LOCAL nMaxWidth := 0 ... nChrHeight := GetTextHeight( hDC, aOptions[ 1 ], hDlgFont ) + nVMARGIN_BUTTON / 2 // calculate the maximum width of the lines IF lMaxWidth nMaxWidth := GetFontWidth ( cFont, nMaxLen ) ENDIF FOR n := 1 TO nLineas ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3190
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.05.20 15:31. Заголовок: PS В примере demo7.p..
PS В примере demo7.prg ставим HMG_Alert_MaxLines(23, .T.)
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1702
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.05.20 15:59. Заголовок: SergKis пишет: таки..
SergKis пишет: Да, с этими изменениями примеры не отличаются
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3191
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.05.20 16:27. Заголовок: gfilatov2002 пишет Д..
gfilatov2002 пишет цитата: | Да, с этими изменениями примеры не отличаются |
| В примере BASIC\WALERT_2 надо, наверно, учесть вылезание списка ошибок за пределы descktop при фонте 16 на 14" мониторе (кнопку почти не видно), т.е. надо ставить ограничение по высоте DEFINE FONT DlgFont FONTNAME "DejaVu Sans Mono" SIZE 16 SET MSGALERT FONTCOLOR TO BLACK SET MSGALERT BACKCOLOR TO {248,209,211} cMsg := "" aButton := { "&Continue" } cTitle := "Multiline Error Message" cIcoRes := "Stop64.ico" nIcoSize := 64 aBtnColor := { {235,117,121} } FOR nI := 1 TO 99 cMsg += "Error: " + HB_NtoS( nI ) + " simple error message.;" NEXT HMG_Alert_MaxLines( 15 ) HMG_Alert( cMsg, aButton, cTitle, Nil, cIcoRes, nIcoSize, aBtnColor ) RELEASE FONT DlgFont
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3192
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.05.20 17:00. Заголовок: PS Возможно есть смы..
PS Возможно есть смысл добавить STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... // calculate the maximum width of the lines IF lMaxWidth nMaxWidth := GetFontWidth ( cFont, nMaxLen ) IF GetTextWidth( hDC, space(10), hDlgFont ) != GetTextWidth( hDC, replicate("B", 10), hDlgFont ) nMaxWidth *= 0.7 ENDIF ENDIF ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1703
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.05.20 17:09. Заголовок: SergKis пишет: есть..
SergKis пишет: Спасибо Да, я тоже вышел на этот коэффициент 0,7
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3193
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.05.20 17:47. Заголовок: gfilatov2002 пишет я..
gfilatov2002 пишет цитата: | я тоже вышел на этот коэффициент 0,7 |
| Ширины может не хватить, если исп. много заглавных букв типа W,B Можно игнорировать ситуацию или ввести static переменную для коэф. 0.7 или установленного в переменную
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1704
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.05.20 19:37. Заголовок: Убрал статик-перемен..
Убрал статик-переменную s_lMaxWidth, т.к. теперь в ней нет необходимости
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3194
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.05.20 11:45. Заголовок: gfilatov2002 Сделал..
gfilatov2002 Сделал контроль выхода за пределы экрана по height STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... LOCAL nMaxLineas := HMG_Alert_MaxLines() LOCAL nMaxWidth, nMaxHeight ... IF MSC_VER() > 0 .AND. _HMG_IsThemed nWidthDlg += 10 nHeightDlg += 10 ENDIF IF nHeightDlg > System.ClientHeight n := 0 WHILE ( nHeightDlg - ( nChrHeight * ( ++n ) ) ) > System.ClientHeight END nMaxHeight := nChrHeight * n nMaxLineas -= n nHeightDlg -= nMaxHeight nHeightCli -= nMaxHeight ENDIF This.Width := nWidthDlg ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3195
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.05.20 11:50. Заголовок: PS В примере BASIC..
PS В примере BASIC\WALERT_2 окно со списком не выходит за пределы окна при фонте SIZE 16 и больше В примере demo7 установка большего фонта или HMG_Alert_MaxLines(35) - все в пределах окна
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1705
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.05.20 13:10. Заголовок: SergKis пишет: конт..
SergKis пишет: цитата: | контроль выхода за пределы экрана по height |
| Добавил, контрольный пример отработал нормально. Благодарю за помощь
|
|
|
rvu
|
| |
Пост N: 250
Зарегистрирован: 05.11.05
|
|
Отправлено: 14.05.20 16:30. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Harbour MiniGUI Extended Edition 20.04 (Release) (64-bit) |
| А какие возможности эта версия дает по сравнению с 32-битными? Если не пользоваться большими числами в расчетах. Хотел ради интереса посмотреть примеры. Как я понимаю последняя общедоступная версия была 16.10? Скачал ее, но при сборке примеров почему-то вылезает ошибка с файлом minigui.ch, хотя все есть, вроде. Если кто помнит, там все файлы есть или надо еще что-то скачивать? Или просто пути там не так прописаны? Хочется вообще посмотреть на это, как на демо, понять нужность или не ненужность для себя. А с поддержкой увы, ранее хотел говорить с директором о развитии, а тут с этим вирусом самим бы выжить.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1706
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.05.20 19:58. Заголовок: rvu пишет: какие во..
rvu пишет: цитата: | какие возможности эта версия дает по сравнению с 32-битными? |
| Благодарю за вопрос! Если коротко, то это - относительно высокая скорость выполнения и возможность адресовать больший объем памяти, поскольку приложение становится нативным для 64-битной среды. Подробнее можно почитать статьи в Интернете. Приведу для справки список поддерживаемых Си-компиляторов: - MinGW GNU C 10.1 - самый свежий и самый быстрый из всех - BCC 64, основанный на LLVM/Clang C 3.3.1; - Visual C++ 19.24.28314; - PellesC 9.0.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3200
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.05.20 08:03. Заголовок: gfilatov2002 Правки..
gfilatov2002 Правки небольшие CLASS TSBrowse FROM TControl ... METHOD DrawFooters( lDrawCell ) INLINE ::DrawHeaders( .T., lDrawCell ) ... METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse ... oColumn:oCellEnum:nClrBack := nClrBackS // 9 ... oColumn:oCellEnum:nClrTo := nClrToS // 25 ... oColumn:oCellFoot:nVAlign := nVAlign // 23 oColumn:oCellFoot:nVertText := 0 // 24 ... METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse ... oColumn:oCell:nRow := xRow // ... oColumn:oCell:xRow := xRow // 3 ... oColumn:oCell:l3DLook := oColumn:l3DLook // 13 ... METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse ... IF ! ::lDrawLine IF empty( oColumn:oCell ) oColumn:oCell := TSBcell():New() ENDIF ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1707
Зарегистрирован: 11.02.10
|
|
Отправлено: 16.05.20 11:32. Заголовок: SergKis пишет: Прав..
SergKis пишет: Благодарю за помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3205
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.05.20 13:52. Заголовок: gfilatov2002 Добавь..
gfilatov2002 Добавьте ф-ю для получения hmg имени фонта от handle FUNCTION HMG_FontName( FontHandle ) LOCAL FontName, i IF ( i := AScan( _HMG_aControlHandles, FontHandle ) ) > 0 IF _HMG_aControlType [ i ] == "FONT" FontName := _HMG_aControlNames [ i ] ENDIF ENDIF RETURN FontName Использование ... cFntH := HMG_FontName( oHead:hFont ) cFntC := HMG_FontName( oCell:hFont ) cFntF := HMG_FontName( oFoot:hFont ) ... cN := cName+'_Head' @ nY, nX LABEL &cN VALUE cValH WIDTH oCell:nSize HEIGHT oHead:nHeightCell FONT cFntH ; BACKCOLOR aClrToH FONTCOLOR aForeH BORDER ON INIT {|| nY += This.Height + nGaps } cN := cName+'_Cell' @ nY, nX LABEL &cN VALUE cValC WIDTH oCell:nSize HEIGHT oCell:nHeightCell FONT cFntC ; BACKCOLOR aBackC FONTCOLOR aForeC BORDER ON INIT {|| nY += This.Height + nGaps } cN := cName+'_Foot' @ nY, nX LABEL &cN VALUE cValF WIDTH oCell:nSize HEIGHT oFoot:nHeightCell FONT cFntF ; BACKCOLOR aBackF FONTCOLOR aForeF BORDER ON INIT {|| nY += This.Height + nGaps }
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1708
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.05.20 14:41. Заголовок: SergKis пишет: Доба..
SergKis пишет: цитата: | Добавьте ф-ю для получения hmg имени фонта от handle |
| Отдельная функция не нужна, поскольку уже есть более общая функция GetFontParam() Например, можно записать так цитата: | #xtranslate HMG_FontName( <hFont> ) ; => ; GetFontParam( <hFont> )\[ 1 ] |
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3206
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.05.20 14:57. Заголовок: gfilatov2002 пишет О..
gfilatov2002 пишет цитата: | Отдельная функция не нужна, поскольку уже есть более общая функция GetFontParam() |
| К сожалению, в _HMG_aControlFontName [k] := fName это имя фонта в системе, к примеру "Arial", а надо имя фонта регистрации, т.е. из _HMG_aControlNames [k] := FontName, например "Norm", "Bold", "Itog", т.к. контрол на входе не понимает handle фонта, надо имя регистрации.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3207
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.05.20 15:01. Заголовок: PS или добавить в во..
PS или добавить в возврат GetFontParam( FontHandle ) имя регистрации и тогда можно сделать #xtranslate HMG_FontName( <hFont> )...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1709
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.05.20 15:08. Заголовок: SergKis пишет: доба..
SergKis пишет: цитата: | добавить в возврат GetFontParam( FontHandle ) имя регистрации |
| Именно это хотел предложить (добавить 10-й параметр). цитата: | #xtranslate HMG_FontName( <hFont> ) ; => ; GetFontParam( <hFont> )\[ 10 ] |
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3208
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.05.20 10:55. Заголовок: gfilatov2002 По ана..
gfilatov2002 По аналогии METHOD LButtonDown( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse ... nAtCol := Max( ::nAtColActual( nColPix ), 1 ) // JP 1.31 ... поменял (не срабатывал вызов) METHOD RButtonDown( nRowPix, nColPix, nFlags ) CLASS TSBrowse ... nRow := ::GetTxtRow( nRowPix ) nCol := ::nAtColActual( nColPix ) ... возможно, надо поменять и в METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse Local nClickRow := ::GetTxtRow( nRowPix ), ; nCol := ::nAtColActual( nColPix ) ; /*( nColPix, ::lSelector ), ;*/ uPar1 := nRowPix, ; uPar2 := nColPix ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3209
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.05.20 11:23. Заголовок: PS Надо менять тоже...
PS Надо менять тоже. Вот что получаю :bLDblClick := {|uPar1, uPar2, nFlags, oBr| myLDblClicked( oBr, uPar1, uPar2, nFlags ) } ... STATIC FUNCTION myLDblClicked( oBrw, nRowPix, nColPix, nFlags ) Local nRow := oBrw:GetTxtRow( nRowPix ) Local nOld := oBrw:nAtCol( nColPix, oBrw:lSelector ) Local nCol := oBrw:nAtColActual( nColPix ) ? procname(), oBrw, nRowPix, nColPix, nFlags, nRow, nCol, nOld RETURN Nil результат LDblClicked на колонке 4 на разных nRowPos как будто кликаю на 6-ой колонке MYLDBLCLICKED 'O' 121 302 1 1 4 6 MYLDBLCLICKED 'O' 146 302 1 2 4 6 MYLDBLCLICKED 'O' 187 302 1 4 4 6 ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3210
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.05.20 11:34. Заголовок: PS2 Почему то нет об..
PS2 Почему то нет обработки двойного клика на Footers, думаю надо добавить METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse ... ElseIf nClickRow == -1 .and. ! empty( ::lDrawFooters ) If ::bLDblClick != Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self ) EndIf ElseIf nClickRow == -2 .and. ::lDrawSpecHd .and. ::aColumns[ nCol ]:lEditSpec ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1710
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.05.20 11:44. Заголовок: SergKis пишет: Надо..
SergKis пишет: Добавил все предложенные правки. Благодарю за помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3211
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.05.20 11:57. Заголовок: gfilatov2002 пишет Д..
gfilatov2002 пишет цитата: | Добавил все предложенные правки. |
| Выяснил, наверно, почему не было Footers в METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse Если одновременно использовать с :LDblClick() :LButtonClick() или :RButtonClick(), то при нажатии LDblClick делая левый или правый клик "ложно" срабатывает после них LDblClick Это надо отметить для себя, что можно использовать или :LDblClick() или :LButtonClick(), :RButtonClick().
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1711
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.05.20 12:04. Заголовок: SergKis пишет: Это ..
SergKis пишет: цитата: | Это надо отметить для себя.. почему не было Footers |
| Да, это известная проблема, подобное поведение происходит и при двойном клике по иконке приложения в трее Убрал предложенную правку для METHOD LDblClick
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3213
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.05.20 11:04. Заголовок: gfilatov2002 Поправ..
gfilatov2002 Поправить надо, а то там NIL, вместо цифры METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse ... nSize := ::aColSizes[ n ] EndIf If empty( ::aColSizes[ n ] ) ::aColSizes[ n ] := nSize EndIf If ValType( ::aFormatPic ) == "A" .and. ! Empty( ::aFormatPic ) .and. n <= Len( ::aFormatPic )
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1712
Зарегистрирован: 11.02.10
|
|
Отправлено: 20.05.20 11:35. Заголовок: SergKis пишет: Попр..
SergKis пишет: Поправил, конечно ... If ValType( ::aColSizes ) == "A" .and. n <= Len( ::aColSizes ) .and. Empty( ::aColSizes[ n ] ) ::aColSizes[ n ] := nSize EndIf
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3214
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.05.20 12:11. Заголовок: gfilatov2002 Еще ME..
gfilatov2002 Еще METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse ... ElseIf cType == "M" nSize := iif( ::nMemoWV == Nil, 200, ::nMemoWV ) ElseIf cType $ "=@T" nSize := GetTextWidth( 0, Replicate("9", 20), hFont ) Else cData := cValToChar( cData )
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1713
Зарегистрирован: 11.02.10
|
|
Отправлено: 20.05.20 12:23. Заголовок: SergKis пишет: Еще ..
SergKis пишет: OK
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1714
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.05.20 10:49. Заголовок: Всем кому это интересно :)
Завершена подготовка новой сборки 20.05, которая будет опубликована на следующей неделе, со следующим списком изменений (кратко): Скрытый текст
* Added a command for managing of the 'This' property at runtime: SET WINDOW THIS TO [<w>] where <w> may be a Form Name or a Form Index. * Added support of the PICTURE option to format the columns value in the Browse control. * The 'Command Link' button and 'Split Button' may be placed now in the TAB container. * Added the lNoSound parameter to the new Alert* family functions to block an any sound effect at startup of the above functions. * Added the auxiliary function HMG_Alert_MaxLines() for managing of the height of the EditBox control in the function HMG_Alert(). The width and height of an Alert window cannot exceed now a visible desktop area. * Updated header file i_hmgcompat.ch for compatibility with Official HMG. * Updated HMGS-IDE v.1.4.4.1, HBPrinter, PropGrid, TSBrowse and Sqlite3 libraries. * Added the new interesting samples and updated the some Basic and Advanced samples.
| Также выполнена адаптация текущей сборки для свежих версий Си-компиляторов: - MinGW GNU C 10.1 32-bit и 64-bit; - Microsoft Visual C++ 19.25.28614 32-bit и 64-bit; - BCC64, основанный на LLVM/Clang C 3.3.1 (35759.1709ea1.58602a0) (64-bit). Благодарю за ваше внимание
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6707
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.05.20 14:10. Заголовок: А можно в HMG_Alert(..
А можно в HMG_Alert() при выводе даже помещаемых данных, сразу выводить их в EDITBOX ? Удобно вывести данные, посмотреть и если нужно, то скопировать ЧАСТЬ или ЦЕЛИКОМ в буфер обмена. В EDITBOX это удобно делать.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3237
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.05.20 14:37. Заголовок: Andrey А добавить п..
Andrey А добавить пустых строк AlertInfo(cMsg+repl(" ;", 20), "INFO")
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1715
Зарегистрирован: 11.02.10
|
|
Отправлено: 25.05.20 14:38. Заголовок: Andrey пишет: сразу..
Andrey пишет: цитата: | сразу выводить их в EDITBOX ? |
| Да, это будет возможно в сборке 20.05, если перед вызовом функции HMG_Alert() написать тогда будет вывод всех строк в EDITBOX , а на экране будет показана только одна строка.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3238
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.05.20 14:44. Заголовок: gfilatov2002 Будут ..
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1716
Зарегистрирован: 11.02.10
|
|
Отправлено: 25.05.20 14:48. Заголовок: SergKis пишет: Буду..
SergKis пишет: цитата: | Будут ли изменения по фонтам |
| Да, конечно
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6708
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.05.20 15:27. Заголовок: SergKis пишет: А до..
SergKis пишет: цитата: | А добавить пустых строк AlertInfo(cMsg+repl(" ;", 20), "INFO") |
| Да не хотелось бы. gfilatov2002 пишет: цитата: | Да, это будет возможно в сборке 20.05, если перед вызовом функции HMG_Alert() написать HMG_Alert_MaxLines( 1 ) тогда будет вывод всех строк в EDITBOX , а на экране будет показана только одна строка. |
| Спасибо ! Эта настройка глобальная или только для одного вызова HMG_Alert() ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3239
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.05.20 15:55. Заголовок: gfilatov2002 Может ..
gfilatov2002 Может чуть поправить HMG_Alert STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... IF nLineas > 1 IF nLineas >= nMaxLineas ... Тогда проще делать, что хочет Андрей nOld := HMG_Alert_MaxLines() IF nOld > hb_TokenCount(cMsg, ";") HMG_Alert_MaxLines(hb_TokenCount(cMsg, ";")) AlertInfo(cMsg, ...) HMG_Alert_MaxLines( nOld ) ENDIF и весь текст войдет в EditBox
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3240
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.05.20 16:07. Заголовок: PS Возможно, лучше и..
PS Возможно, лучше и проще так STATIC s_nMaxLineas := 20 STATIC s_lEditBox := .F. *-----------------------------------------------------------------------------* FUNCTION HMG_Alert_MaxLines( nMaxLineas, ) *-----------------------------------------------------------------------------* IF HB_ISLOGICAL(nMaxLineas ) s_lEditBox := nMaxLineas ELSEIF HB_ISNUMERIC(nMaxLineas ) .and. nMaxLineas > 0 s_nMaxLineas := nMaxLineas ENDIF RETURN s_nMaxLineas STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... IF nLineas > 1 IF nLineas > nMaxLineas .or. s_lEditBox ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1717
Зарегистрирован: 11.02.10
|
|
Отправлено: 25.05.20 17:04. Заголовок: Andrey пишет: Эта н..
Andrey пишет: цитата: | Эта настройка глобальная или только для одного вызова |
| Глобальная
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6709
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.05.20 17:15. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Не очень удобно будет кодить. Нужно для разового вызова. Лучше бы сделать как Сергей предлагает.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1718
Зарегистрирован: 11.02.10
|
|
Отправлено: 25.05.20 17:24. Заголовок: Andrey пишет: Нужно..
Andrey пишет: цитата: | Нужно для разового вызова. |
| Тогда можно использовать таким образом: nI := HMG_Alert_MaxLines() HMG_Alert_MaxLines( 1 ) HMG_Alert( cMsg, aButton, cTitle, Nil, cIcoRes, nIcoSize, aBtnColor ) HMG_Alert_MaxLines( nI )
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3241
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.05.20 17:49. Заголовок: gfilatov2002 FUNCTI..
gfilatov2002 FUNCTION HMG_Alert( cMsg, aOptions, cTitle, nType, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable, cFontName ) ... cMsg := cValToChar( cMsg ) cMsg := StrTran( cMsg, ";", CRLF ) nLineas := MLCount( cMsg ) _logfile(.t.,procname(), hb_TokenCount(cMsg, CRLF), MLCount( cMsg )) получаем HMG_ALERT 12 11 по разному считают, правильно посчитала hb_TokenCount(cMsg, CRLF) Надо подменить, наверно, иначе код работает не верно ITEM '_MsgLog.lst' ACTION {|cs,nn,no| cs := StrTran(hb_memoread("_MsgLog.lst"), CRLF, ';') nn := hb_TokenCount(cs, ';') no := HMG_Alert_MaxLines(nn-1) AlertInfo( cs, "INFO") HMG_Alert_MaxLines(no) Return Nil }
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3242
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.05.20 18:29. Заголовок: PS В таком виде отра..
PS В таком виде отработал код правильно, все строки видны в EditBox ITEM '_MsgLog.txt' ACTION {|cs,nn,no| cs := hb_memoread("_MsgLog.lst") nn := MLCount(cs) no := HMG_Alert_MaxLines(nn) AlertInfo( cs+CRLF, "INFO") HMG_Alert_MaxLines(no) Return Nil }
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6711
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.05.20 18:59. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Тогда можно использовать таким образом: |
| Хорошо ! Спасибо ! Только если я в коде промахнулся и строчек больше одной - то нужно показывать ВСЕ строчки ! Т.е. задал 1 строчку, значение вывожу 5 строчек, то должны показываться все 5 строчек.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3243
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.05.20 19:39. Заголовок: Andrey пишет Т.е. за..
Andrey пишет цитата: | Т.е. задал 1 строчку, значение вывожу 5 строчек, то должны показываться все 5 строчек. |
| Посмотри предыдущий пост, такой код сделает как ты хочешь, т.е. от кол-ва строк в тексте, т.е. у меня _MsgLog.lst 12 строк, что бы их всех сразу увидеть и написан код выше
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6712
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.05.20 19:52. Заголовок: SergKis пишет: Пос..
SergKis пишет: цитата: | Посмотри предыдущий пост, такой код сделает как ты хочешь |
| Да не успел прочитать. Понял сейчас !
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1719
Зарегистрирован: 11.02.10
|
|
Отправлено: 26.05.20 09:44. Заголовок: Всем кому это интересно
Опубликована новая сборка 20.05 для BCC 5.8.2 и компиляторов Harbour и xHarbour. Базовый дистрибутив находится по адресу http://hmgextended.com/files/CONTRIB/hmg-20.05-setup.exe Добавил также архив для бесплатного Embarcadero C++ 10.2 'Tokyo' compiler http://hmgextended.com/files/CONTRIB/hmg2005_bcc102.exe Огромная благодарность Сергею Киселеву за помощь при подготовке этой сборки Для частного использования подготовлены еще два дистрибутива: цитата: | ------------------------------------------------------------- Minigui Ex Package (build date: 25.05.2020) Download links: http://hmgextended.com/files/PRIVATE ------------------------------------------------------------- Components versions: -------------------- Harbour MiniGUI Extended Edition 20.05 (Release) Harbour 3.2.0dev (r2004201301) Harbour Make (hbmk2) 3.2.0dev (r2020-04-20 13:01) gcc (MinGW-W64 i686-posix-dwarf, built by Brecht Sanders) 10.1.0 |
| цитата: | ------------------------------------------------------------- Minigui Ex 64-bit Package (build date: 25.05.2020) Download links: http://hmgextended.com/files/PRIVATE ------------------------------------------------------------- Components versions: -------------------- Harbour MiniGUI Extended Edition 20.05 (Release) Harbour 3.4.0dev () (2017-12-20 13:40) Harbour Make (hbmk2) 3.4.0dev () (2017-12-20 13:40) gcc (MinGW-W64 x86_64-posix-seh, built by Brecht Sanders) 10.1.0 |
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3244
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.05.20 10:43. Заголовок: gfilatov2002 Change..
gfilatov2002 ChangeLog.txt - enhanced auxiliary class TSBcell for a quick export of a data. Usage: WITH OBJECT oBrw :lDrawLine := .F. :GoTop() FOR nAt := 1 TO :nLen :DrawLine() FOR nCol := 1 TO :nColCount() oCol := :aColumns[ nCol ] ? "..", nCol, oCol:cName, Valtype(oCol:oCell:uValue), oCol:oCell:uValue, oCol:oCell:cValue NEXT :GoDown() NEXT :lDrawLine := .T. :Reset() END WITH Перенести :DrawLine(), т.к. в предыдущем варианте срабатывала последней :DrawSelect(), это другое заполнение oCol:oCell Что бы не делать лишний вызов, наверно, надо поправить *-----------------------------------------------------------------------------* FUNCTION HMG_Alert_MaxLines( nMaxLines ) *-----------------------------------------------------------------------------* LOCAL nLines := s_nMaxLines IF HB_ISNUMERIC( nMaxLines ) .AND. nMaxLines > 0 s_nMaxLines := nMaxLines ENDIF RETURN nLines
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3245
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.05.20 11:15. Заголовок: PS Сборка файлом Mak..
PS Сборка файлом MakeAllMiniguiLibs.bat не проходит. Протокол MiniGui.lib h_activex.prg(326) Error E0020 Incomplete statement or unbalanced delimiters h_activex.prg(328) Error E0030 Syntax error "syntax error at 'OERROR'" h_activex.prg(330) Error E0010 ENDIF does not match IF h_graph.prg(426) Warning W0032 Variable 'CNAMEOBJ' is assigned but not used in function 'GRAPHSHOW(190)' h_graph.prg(426) Warning W0032 Variable 'CNAMEOBJ' is assigned but not used in function 'GRAPHSHOW(323)' ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3246
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.05.20 11:23. Заголовок: PS2 Может можно доба..
PS2 Может можно добавить таблицу процентов scale от размера фонта. h_objects.prg *-----------------------------------------------------------------------------* FUNCTION oDlu4Font( nFontSize, lDlu2Pix ) *-----------------------------------------------------------------------------* LOCAL nPrcW, nPrcH, aDim LOCAL aScale := { { 8, 75, 75}, ; { 9, 85, 85}, ; { 10, 90, 90}, ; { 11, 100, 100}, ; { 12, 110, 100}, ; { 13, 115, 100}, ; { 14, 120, 110}, ; { 15, 130, 110}, ; { 16, 140, 120}, ; { 17, 145, 120}, ; { 18, 150, 130}, ; { 19, 160, 130}, ; { 20, 170, 140}, ; { 21, 175, 140}, ; { 22, 180, 150}, ; { 23, 190, 150}, ; { 24, 200, 160}, ; { 25, 205, 170}, ; { 26, 210, 170} ; } Default lDlu2Pix := .T., nFontSize := 11, nPrcW := 100, nPrcH := 100 IF nFontSize < aScale[1][1] ; nFontSize := aScale[1][1] ELSEIF nFontSize > ATail(aScale)[1] ; nFontSize := ATail(aScale)[1] ENDIF FOR EACH aDim IN aScale IF nFontSize == aDim[1] nPrcW := aDim[2] nPrcH := aDim[3] EXIT ENDIF NEXT IF lDlu2Pix ; RETURN := TDlu2Pix():New( nPrcW, nPrcH ) ENDIF RETURN { nPrcW, nPrcH } *-----------------------------------------------------------------------------* FUNCTION oDlu2Pixel( nPrcW, nPrcH, nFontSize ) *-----------------------------------------------------------------------------* LOCAL aPrcWH IF HB_ISNUMERIC( nFontSize ) aPrcWH := oDlu4Font( nFontSize, .F. ) nPrcW := aPrcWH[1] nPrcH := aPrcWH[2] ENDIF IF PCount() > 0 ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1720
Зарегистрирован: 11.02.10
|
|
Отправлено: 26.05.20 11:43. Заголовок: SergKis пишет: Chan..
SergKis пишет: цитата: | ChangeLog.txt - enhanced auxiliary class TSBcell for a quick export of a data. Usage: WITH OBJECT oBrw :lDrawLine := .F. :GoTop() FOR nAt := 1 TO :nLen :DrawLine() FOR nCol := 1 TO :nColCount() oCol := :aColumns[ nCol ] ? "..", nCol, oCol:cName, Valtype(oCol:oCell:uValue), oCol:oCell:uValue, oCol:oCell:cValue NEXT :GoDown() NEXT :lDrawLine := .T. :Reset() END WITH Перенести :DrawLine(), т.к. в предыдущем варианте срабатывала последней :DrawSelect(), это другое заполнение oCol:oCell Что бы не делать лишний вызов, наверно, надо поправить *-----------------------------------------------------------------------------* FUNCTION HMG_Alert_MaxLines( nMaxLines ) |
| Уже поправил в "тихом" обновлении этой сборки. SergKis пишет: цитата: | можно добавить таблицу процентов scale от размера фонта |
| Да, это интересное предложение, но уже для следующей сборки. Благодарю за оперативную помощь
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1721
Зарегистрирован: 11.02.10
|
|
Отправлено: 27.05.20 17:04. Заголовок: SergKis пишет: Сбор..
SergKis пишет: цитата: | Сборка файлом MakeAllMiniguiLibs.bat не проходит |
| Уже поправил в первом update для сборки 20.05, который выйдет завтра SergKis пишет: цитата: | можно добавить таблицу процентов scale от размера фонта. |
| Добавил
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1722
Зарегистрирован: 11.02.10
|
|
Отправлено: 28.05.20 10:20. Заголовок: Всем кому это интересно :)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6713
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.05.20 13:16. Заголовок: SergKis пишет: - en..
SergKis пишет: цитата: | - enhanced auxiliary class TSBcell for a quick export of a data. |
| А можно для суперхидера получить начало и конец объединенных ячеек ? Это нужно для экселя. aSup := oBrw:DrawSuper( .F. ) FOR EACH oCel IN aSup hFnt := oCel:hFont aFore := oCel:nClrFore aBack := oCel:nClrBack xVal := oCel:cValue AADD( aRet, { aFore, aBack, hFnt, xVal } ) NEXT Или это можно уже сейчас получать в этом классе ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3249
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.05.20 14:56. Заголовок: Andrey пишет А можно..
Andrey пишет цитата: | А можно для суперхидера получить начало и конец объединенных ячеек ? Это нужно для экселя. |
| Можно получать сейчас так aSup := oBrw:DrawSuper( .F. ) FOR EACH oCel IN aSup nFrom := oBrw:aSuperHead[ hb_enumindex( oCel ) ][1] nTo := oBrw:aSuperHead[ hb_enumindex( oCel ) ][2] hFnt := oCel:hFont aFore := oCel:nClrFore aBack := oCel:nClrBack xVal := oCel:cValue AADD( aRet, { aFore, aBack, hFnt, xVal } ) NEXT Если поправить класс TSBcell и метод, то можно проще получать данные CLASS TSBcell ... VAR nHeight AS NUMERIC INIT 0 VAR nFromCol AS NUMERIC INIT 0 VAR nToCol AS NUMERIC INIT 0 VAR nCell ... METHOD DrawSuper( lDrawCell ) CLASS TSBrowse ... oSupHd := TSBcell():New() ... oSupHd:lDrawLine := .F. // DrawLine() oSupHd:nFromCol := aSuperHead[ nI, 1 ] oSupHd:nToCol := aSuperHead[ nI, 2 ] ... тогда можно так делать aSup := oBrw:DrawSuper( .F. ) FOR EACH oCel IN aSup nFrom := oCel:nFromCol nTo := oCel:nToCol hFnt := oCel:hFont aFore := oCel:nClrFore aBack := oCel:nClrBack xVal := oCel:cValue AADD( aRet, { aFore, aBack, hFnt, xVal } ) NEXT
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6714
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.05.20 16:06. Заголовок: SergKis пишет: Можн..
SergKis пишет: цитата: | Можно получать сейчас так aSup := oBrw:DrawSuper( .F. ) FOR EACH oCel IN aSup nFrom := oBrw:aSuperHead[ hb_enumindex( oCel ) ][1] // строка 250 nTo := oBrw:aSuperHead[ hb_enumindex( oCel ) ][2] |
| Выдаёт ошибку: Error BASE/1132 Bound error: array access Args: [1] = A { ... } length: 7 [2] = N 8 --------------------------------- Stack Trace --------------------------------- Called from MYGETTSBSUPH(250) in module: MenuExcel7.prg Called from MYGETTSBCONTENT(166) in module: MenuExcel7.prg
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3250
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.05.20 16:30. Заголовок: Andrey пишет Выдаёт ..
Andrey пишет А на подумать можно о сообщении ? aSup := :DrawSuper( .F. ) FOR EACH oCel IN aSup nCol := hb_enumindex(oCel) nFrom := -1 nTo := -1 IF nCol <= Len(:aSuperHead) nFrom := :aSuperHead[ nCol ][1] nTo := :aSuperHead[ nCol ][2] ENDIF hFnt := oCel:hFont результат (цифры перед текстом) ==== решение только для dbf =========================== F9 "быстрый" доступ к данным тсб через объекты класса TSBcell oCol:oCellHead, oCol:oCellEnum, oCol:oCell, oCol:oCellFoot :lDrawLine = .T. Log file = _MsgLog.txt ~ DrawSuper ~ 1 3 0 50 1 {128, 0, 0} {192, 192, 192} {128, 128, 128} 1 1 '' ~ 2 3 50 585.0 1 {128, 0, 0} {192, 192, 192} {128, 128, 128} 2 6 Adres ~ 3 3 635.0 629.0 1 {128, 0, 0} {192, 192, 192} {128, 128, 128} 7 10 01.01.14 - 31.03.20 ~ 4 3 1264.0 0 1 {128, 0, 0} {192, 192, 192} {128, 128, 128} 11 16 Январь 2020 ~ 5 3 1264.0 0 1 {128, 0, 0} {192, 192, 192} {128, 128, 128} 17 22 Март 2020 ~ 6 3 1264.0 0 1 {128, 0, 0} {192, 192, 192} {128, 128, 128} 23 23 21-15 ~ 7 3 1264.0 0 1 {128, 0, 0} {192, 192, 192} {128, 128, 128} 24 24 -o- ~ 8 3 1264.0 -1 1 {128, 0, 0} {192, 192, 192} {128, 128, 128} -1 -1 ''
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6715
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.05.20 19:05. Заголовок: SergKis пишет: А на..
SergKis пишет: цитата: | А на подумать можно о сообщении ? |
| Всю думалку заказчик сломал. Мозги совсем не работают... СПАСИБО !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6716
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.05.20 20:58. Заголовок: Ещё один вопрос возн..
Ещё один вопрос возник по классу TSBcell Можно получить формат колонки для вывода в Эксель, т.е. PICTURE колонки ? FOR nAt := 1 TO :nLen :DrawLine() aLine := {} FOR nCol := 1 TO :nColCount() oCol := :aColumns[ nCol ] oCel := oCol:oCell hFnt := oCel:hFont aFore := oCel:nClrFore aBack := oCel:nClrBack xVal := oCel:cValue cType := Valtype(oCel:uValue) cPict := ???? AADD( aLine, { aFore, aBack, hFnt, xVal, cType, cPict } ) NEXT AADD( aRet, aLine ) // строка таблицы :GoDown() NEXT
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3251
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.05.20 21:16. Заголовок: Andrey пишет Можно п..
Andrey пишет цитата: | Можно получить формат колонки для вывода в Эксель, т.е. PICTURE колонки ? |
| cPict := oCol:cPicture
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6717
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.05.20 23:42. Заголовок: СПАСИБО ! :sm36:..
СПАСИБО !
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3252
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.05.20 20:04. Заголовок: gfilatov2002 Неболь..
gfilatov2002 Небольшая правка scale фонтов FUNCTION oDlu4Font( nFontSize, lDlu2Pix ) LOCAL nPrcW, nPrcH, aDim LOCAL aScale := { { 8, 85, 75}, ; { 9, 90, 85}, ; { 10, 95, 85}, ; { 11, 100, 90}, ; { 12, 110, 95}, ; { 13, 115, 100}, ; { 14, 120, 110}, ; { 15, 130, 110}, ; { 16, 140, 120}, ; { 17, 145, 120}, ; { 18, 150, 130}, ; { 19, 160, 130}, ; { 20, 170, 145}, ; { 21, 175, 145}, ; { 22, 180, 150}, ; { 23, 190, 155}, ; { 24, 200, 160}, ; { 25, 205, 170}, ; { 26, 210, 180} ; } ... METHOD UnitsToPixels( nPrcW, nPrcH ) CLASS TDlu2Pix DEFAULT nPrcW := hb_defaultValue( nPrcW, ::nScaleWidth ), ; nPrcH := hb_defaultValue( nPrcH, ::nScaleHeight ) ::nScaleWidth := nPrcW ::nScaleHeight := nPrcH ::nPixWidth := ::DLU2PixW( ::nUnitWidth, nPrcW ) ... Предложение добавить i_font.ch #command SET FONT TO <fontname> , <fontsize>; => ; _HMG_DefaultFontName := <fontname> ; _HMG_DefaultFontSize := <fontsize> ; oDlu2Pixel( , , <fontsize> ) Пример применения BASIC\GetBox_3 тут https://TransFiles.ru/i36zt
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1723
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.05.20 22:04. Заголовок: SergKis пишет: Пред..
SergKis пишет: OK, добавлю во 2-е обновление сборки 20.05 Благодарю за помощь
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1725
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.06.20 09:55. Заголовок: Выложил обновление д..
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3253
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.06.20 12:40. Заголовок: gfilatov2002 Тут не..
gfilatov2002 Тут неточность METHOD AddSuperHead( nFromCol, nToCol, uHead, nHeight, aColors, l3dLook, uFont, uBitMap, lAdjust, lTransp, ; ... uFont := iif( uFont != Nil, iif( ValType( uFont ) == "O", uFont:hFont, uFont /* ? */ ), hFont ) ... было hFont := If( uFont != Nil, uFont, hFont ) и переменная DATA hFontSupHd // super header font больше подходит, чем DATA hFontSupHd AS NUMERIC // super header font
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3254
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.06.20 12:52. Заголовок: PS Или такой вариант..
PS Или такой вариант, что бы 0 не проскочил uFont := iif( ! Empty(uFont), iif( ValType( uFont ) == "O", uFont:hFont, uFont ), hFont )
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3255
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.06.20 13:00. Заголовок: PS2 И логичнее сразу..
PS2 И логичнее сразу сделать hFont := iif( ! Empty(uFont), iif( ValType( uFont ) == "O", uFont:hFont, uFont ), hFont ) и убрать If ! Empty( ::aColumns ) hFont := iif( ValType( ::aColumns[ nFromCol]:hFontHead ) == "O", ::aColumns[ nFromCol]:hFontHead, ; iif( ::aColumns[ nFromCol]:hFontHead != Nil, ::aColumns[ nFromCol]:hFontHead, hFont ) ) endif // hFont := iif( uFont != Nil, uFont, hFont )
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3256
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.06.20 14:54. Заголовок: gfilatov2002 Правка..
gfilatov2002 Правка закраски фантомной колонки METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse ... If ::oPhant == Nil ... Self ) ::oPhant:cName := "oPhant" Else ... METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse ... If ::oPhant == Nil ... Self ) ::oPhant:cName := "oPhant" Else ... METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse ... If ::oPhant == Nil ... Self ) ::oPhant:cName := "oPhant" Else ... If lNoLite nClrFore := ::GetValProp( oColumn:nClrFocuFore, nClrText, nJ, ::nAt ) nClrBack := ::GetValProp( oColumn:nClrFocuBack, nClrPane, nJ, ::nAt ) nCursor := 0 If ! empty(oColumn:cName) .and. oColumn:cName == "oPhant" nClrBack := nClrPane ElseIf ValType( nClrBack ) == "N" .and. nClrBack < 0 nClrBack := -nClrBack EndIf Else ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1726
Зарегистрирован: 11.02.10
|
|
Отправлено: 07.06.20 19:39. Заголовок: SergKis пишет: логи..
SergKis пишет: цитата: | логичнее сразу сделать ... Правка закраски фантомной колонки |
| Все правки приняты. Благодарю за помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3257
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.06.20 04:10. Заголовок: gfilatov2002 В HMG_..
gfilatov2002 В HMG_DrawIcon() сделана веточка ... ELSEIF ISSTRING( icon ) DrawIconEx( FormHandle, Col, Row, LoadIconByName( icon, w, h ), w, h, rgb, .T. ) AAdd( _HMG_aFormGraphTasks [ i ] , {|| DrawIconEx( FormHandle, Col, Row, LoadIconByName( icon, w, h ), w, h, rgb, .T. ) } ) ENDIF Это же утечка памяти на LoadIconByName(). У себя сделал Скрытый текст
h_window.prg FUNCTION _DefineWindow ( FormName, Caption, x, y, w, h, nominimize, nomaximize, ; ... _HMG_aFormMiscData1 [ k ] := {hnotifyicon, cursor, {}} ... AAdd ( _HMG_aFormMiscData1, {hnotifyicon, cursor, {}} ) ... FUNCTION _DefineModalWindow ( FormName, Caption, x, y, w, h, Parent, nosize, nosysmenu, nocaption, aMin, aMax, ; ... _HMG_aFormMiscData1 [ k ] := {NIL, cursor, {}} ... AAdd ( _HMG_aFormMiscData1, {NIL, cursor, {}} ) ... FUNCTION _DefineSplitChildWindow ( FormName, w, h, break, grippertext, nocaption, title, fontname, fontsize, gotfocus, lostfocus, ; ... _HMG_aFormMiscData1 [ k ] := {NIL, cursor, {}} ... AAdd ( _HMG_aFormMiscData1, {NIL, cursor, {}} ) ... h_windowMDI.prg FUNCTION _DefineChildMDIWindow ( FormName, x, y, w, h, nominimize, nomaximize, ; ... _HMG_aFormMiscData1 [k] := {NIL, cursor, {}} ... AAdd ( _HMG_aFormMiscData1 , {NIL, cursor, {}} ) ... h_events.prg ... CASE WM_DESTROY ... NEXT // Delete handle hmg_drawicon(...) IF ISARRAY( _HMG_aFormMiscData1[ i ] ) .and. Len( _HMG_aFormMiscData1[ i ] ) > 2 IF ISARRAY( _HMG_aFormMiscData1[ i, 3 ] ) .and. Len( _HMG_aFormMiscData1[ i, 3 ] ) > 0 FOR EACH x IN _HMG_aFormMiscData1[ i, 3 ] DeleteObject( x ) NEXT ENDIF ENDIF // Delete Brush DeleteObject ( _HMG_aFormBrushHandle [ i ] ) ... h_draw.prg ... FUNCTION HMG_DrawIcon( window, icon, row, col, w, h, rgb, transparent ) LOCAL FormHandle LOCAL backcolor LOCAL i, name ... hb_default( @rgb, GetSysColor( COLOR_BTNFACE ) ) IF ISSTRING( icon ) name := icon icon := LoadIconByName( icon, w, h ) ENDIF IF ISNUMERIC( icon ) DrawIconEx( FormHandle, Col, Row, icon, w, h, rgb, .F. ) AAdd( _HMG_aFormGraphTasks [ i ] , {|| DrawIconEx( FormHandle, Col, Row, icon, w, h, rgb, .F. ) } ) IF ! Empty(name) AAdd( _HMG_aFormMiscData1[ i, 3 ], icon ) ENDIF /* ELSEIF ISSTRING( icon ) DrawIconEx( FormHandle, Col, Row, LoadIconByName( icon, w, h ), w, h, rgb, .T. ) AAdd( _HMG_aFormGraphTasks [ i ] , {|| DrawIconEx( FormHandle, Col, Row, LoadIconByName( icon, w, h ), w, h, rgb, .T. ) } ) */ ENDIF ...
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6721
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.06.20 08:19. Заголовок: Привет всем. Григор..
Привет всем. Григорий ! Удаление записи в методе :SetDeleteMode( .T., .T. ) - запрос идет через MsgYesNo() Поменять на AlertYesNo() - можно ? Или переключатель сделать какой то ? А то при удалении/вставки разные окна. Как то не то.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3258
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.06.20 11:17. Заголовок: Andrey Почему не см..
Andrey Почему не смотришь исходники, примеры, когда что то применяешь и есть не ясность или вопросы. Сканируй примеры Advanced Far -> Alt_F7 -> *.prg "SetDeleteMode" и просмотри найденное. Открой h_tbrowse.prg, найди метод SetDeleteMode() и смотри параметры Если в твоем редакторе сложно, открывай hbedit от А.Кресина Alt+L и весь список ф-й, методов с поиском перед глазами
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6722
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.06.20 14:07. Заголовок: Посмотрел. Нет таког..
Посмотрел. Нет такого - поменять MsgYesNo() на AlertYesNo() ! Это нужно сделать в METHOD DeleteRow( lAll ) CLASS TSBrowse ..... If ::lConfirm .and. !lAll .and.; ! MsgYesNo( iif( ::lIsDbf, ::aMsg[ 37 ], ::aMsg[ 38 ] ), ::aMsg[ 39 ] )
|
|
|
Dima
|
| |
Пост N: 7200
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.06.20 15:07. Заголовок: Andrey пишет: Посмо..
Andrey пишет: Не там смотрел а по вопросу можно хоть чёрта лысого туда сунуть
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3259
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.06.20 15:14. Заголовок: Andrey пишет Посмотр..
Andrey пишет цитата: | Посмотрел. Нет такого - поменять MsgYesNo() на AlertYesNo() ! |
| "В огороде бузина, а в Киеве — дядька" Говорили о :SetDeleteMode(), а унесло куда то ... в сторону. Смотри :SetDeleteMode(...)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6723
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.06.20 15:25. Заголовок: Вспомнил, как делал ..
Вспомнил, как делал раньше. Только запрос не делал, из-за этого и непонятно было как делать. bDelete := { | nAt, oBrw | ItogoNN(oBrw) } oBrw1:SetDeleteMode( .T., .F., bDelete ) // здесь включаем клавишу DEL !!!
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1727
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.06.20 19:21. Заголовок: SergKis пишет: Draw..
SergKis пишет: цитата: | DrawIconEx( FormHandle, Col, Row, LoadIconByName( icon, w, h ), w, h, rgb, .T. ) |
| Восьмой параметр этой функции, выделенный цветом, управляет удалением иконки, которая была загружена функцией LoadIconByName()
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3260
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.06.20 19:50. Заголовок: gfilatov2002 :sm36..
gfilatov2002 Спасибо, упустил.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3266
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.06.20 11:57. Заголовок: gfilatov2002 Предла..
gfilatov2002 Предлагаю поправить METHOD DeleteRow( lAll, lUpStable ) CLASS TSBrowse Local lRecall, nAt, nRowPos, nRecNo, lRefresh, cAlias, lEval, uTemp ... lRecall := !Set( _SET_DELETED ) DEFAULT lUpStable := !lRecall If !::lIsTxt ... If !( "SQL" $ ::cDriver ) ( cAlias )->( DbUnlock() ) EndIf /* ::nLen := ( cAlias )->( Eval( ::bLogicLen ) ) If lUpStable ( cAlias )->( DbSkip() ) lRefresh := ( cAlias )->( EOF() ) ( cAlias )->( DbSkip( -1 ) ) ::nRowPos -= iif( lRefresh .and. ; ! ( cAlias )->( BoF() ), 1, 0 ) ::Refresh( .T. ) EndIf */ ElseIf lRecall ( cAlias )->( DbRecall() ) ( cAlias )->( DbUnlock() ) EndIf ::nLen := ( cAlias )->( Eval( ::bLogicLen ) ) If lUpStable ( cAlias )->( DbSkip() ) lRefresh := ( cAlias )->( EOF() ) ( cAlias )->( DbSkip( -1 ) ) ::nRowPos -= iif( lRefresh .and. ; ! ( cAlias )->( BoF() ), 1, 0 ) ::Refresh( .T. ) EndIf If ::lCanAppend .and. ::nLen == 0 ... Использовать, например, на индексе с FOR в котором есть Deleted() : :SetDeleteMode( .T., .F., {|| AlertYesNo(iif((oBrw:cAlias)->(OrdSetFocus()) == "DEL", ; "Восстановить", "Удалить")+" запись в таблице ?", "Подтверждение") } )
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1728
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.06.20 15:43. Заголовок: SergKis пишет: Пр..
SergKis пишет: цитата: | Предлагаю поправить /* ::nLen := ( cAlias )->( Eval( ::bLogicLen ) ) If lUpStable ( cAlias )->( DbSkip() ) lRefresh := ( cAlias )->( EOF() ) ( cAlias )->( DbSkip( -1 ) ) ::nRowPos -= iif( lRefresh .and. ; ! ( cAlias )->( BoF() ), 1, 0 ) ::Refresh( .T. ) EndIf */ |
|
т.е. перенести этот код ниже, чтобы учитывать восстановление записи также. Сделал, конечно. Благодарю за помощь
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1729
Зарегистрирован: 11.02.10
|
|
Отправлено: 16.06.20 12:15. Заголовок: Всем кому это интересно
Подготовил 5-ю бету для новой сборки 20.06 со следующим списком изменений: Скрытый текст
* Fixed: The back color of a TAB control was not changed at runtime. Problem was reported by Ivanil Marcelino <ivanil/at/linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\TAB) * Fixed: Pacified the C-warning "cast-function-type" in the MiniGUI core (was passed MinGW GNU C 10.1): - added the auxiliary C-function wapi_GetProcAddress(). It was a postponed modification. Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: Added the useful function HMG_SetMenuTheme( [ nType ][, cFormName ] ) for setting of the predefined menu themes, where the 1st parameter nType may have the following values: - MNUCLR_THEME_DEFAULT; - MNUCLR_THEME_XP; - MNUCLR_THEME_2000; - MNUCLR_THEME_DARK. Requested by Verchenko Andrey <verchenkoag/at/gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\MenuEx) * Updated: Synchronized Extended HMG for compatibility with Official HMG: - New: function GetFormNameByHandle( hWnd, @cFormName, ; @cFormParentName ) --> Return nFormIndex; - New: function GetControlNameByHandle ( hWnd, @cControlName, ; @cFormParentName ) --> Return nControlIndex. Based upon a contribution of Claudio Soto <srvet/at/adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\MoveResizeControl) * New: 'HbCrypto' library contains (see source in folder \Source\HbCrypto): - Harbour interface to bcrypt password hashing; - BLAKE2s function wrapper (fast secure hash); - ED25519 wrappers; - Harbour interface to PBKDF2 password hashing; - Harbour interface to scrypt password hashing; - SHA3 function wrappers (secure hash). Based upon a contribution of Viktor Szakats (borrowed from 3.4 fork). Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'Bos Taurus' Graphics Library (see source in folder \Source\BosTaurus): - fixed the MinGW C-warning "cast-function-type". Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'HMG Debugger' library: - adapted to the recent Minigui core changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see source in folder \Source\Debugger) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - minor correction of a font handling in the method AddSuperHead(); - minor correction of a refreshing in the method DeleteRow(); - minor correction of a phantom column's painting in the method DrawSelect(). Contributed by Sergej Kiselev. * Updated: HbSQLite3 library: - update for using SQLITE3 latest version 3.32.2. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * Updated: 'Print Pie Graph' sample: updated the data for May 2020. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\GraphPrint) * Updated: The following samples were revised for compatibility with the recent Minigui modification: - menudemo2.prg in folder \samples\Basic\Menu; - \samples\Advanced\MenuEx; - \samples\Advanced\SetThemes; - \samples\Advanced\TransparentIcons. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'Quick Browse Generator' utility: - adapted to the recent Minigui core changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\QBGen)
| Благодарю за ваше внимание
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1730
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.06.20 11:07. Заголовок: P S По просьбе Андре..
P S По просьбе Андрея расширил возможности новой функции HMG_SetMenuTheme() по определению пользовательской темы меню. Синтаксис: цитата: | HMG_SetMenuTheme( [ nType ][, cFormName ][, aUserDefined ] ) |
| Пример определения массива aUserDefined: цитата: | FUNCTION GetWin7Theme() LOCAL aUserDefined := Array( 24 ) aUserDefined[ MNUCLR_MENUBARBACKGROUND1 ] := GetSysColor( 15 ) aUserDefined[ MNUCLR_MENUBARBACKGROUND2 ] := RGB( 211, 218, 237 ) aUserDefined[ MNUCLR_MENUBARTEXT ] := RGB( 0, 0, 0 ) aUserDefined[ MNUCLR_MENUBARSELECTEDTEXT ] := RGB( 0, 0, 0 ) aUserDefined[ MNUCLR_MENUBARGRAYEDTEXT ] := GetSysColor( 17 ) aUserDefined[ MNUCLR_MENUBARSELECTEDITEM1 ] := RGB( 174, 206, 246 ) aUserDefined[ MNUCLR_MENUBARSELECTEDITEM2 ] := RGB( 174, 206, 246 ) aUserDefined[ MNUCLR_MENUITEMTEXT ] := GetSysColor( 7 ) aUserDefined[ MNUCLR_MENUITEMSELECTEDTEXT ] := GetSysColor( 7 ) aUserDefined[ MNUCLR_MENUITEMGRAYEDTEXT ] := GetSysColor( 17 ) aUserDefined[ MNUCLR_MENUITEMBACKGROUND1 ] := RGB( 240, 240, 240 ) aUserDefined[ MNUCLR_MENUITEMBACKGROUND2 ] := RGB( 240, 240, 240 ) aUserDefined[ MNUCLR_MENUITEMSELECTEDBACKGROUND1 ] := RGB( 232, 238, 246 ) aUserDefined[ MNUCLR_MENUITEMSELECTEDBACKGROUND2 ] := RGB( 232, 238, 246 ) aUserDefined[ MNUCLR_MENUITEMGRAYEDBACKGROUND1 ] := RGB( 240, 240, 240 ) aUserDefined[ MNUCLR_MENUITEMGRAYEDBACKGROUND2 ] := RGB( 240, 240, 240 ) aUserDefined[ MNUCLR_IMAGEBACKGROUND1 ] := RGB( 241, 241, 241 ) aUserDefined[ MNUCLR_IMAGEBACKGROUND2 ] := RGB( 241, 241, 241 ) aUserDefined[ MNUCLR_SEPARATOR1 ] := RGB( 224, 224, 224 ) aUserDefined[ MNUCLR_SEPARATOR2 ] := RGB( 255, 255, 255 ) aUserDefined[ MNUCLR_SELECTEDITEMBORDER1 ] := RGB( 174, 206, 246 ) aUserDefined[ MNUCLR_SELECTEDITEMBORDER2 ] := RGB( 174, 206, 246 ) aUserDefined[ MNUCLR_SELECTEDITEMBORDER3 ] := RGB( 174, 206, 246 ) aUserDefined[ MNUCLR_SELECTEDITEMBORDER4 ] := RGB( 174, 206, 246 ) RETURN aUserDefined |
| Использование: цитата: | HMG_SetMenuTheme( MNUCLR_THEME_USER_DEFINED, , GetWin7Theme() ) |
| Благодарю за ваше внимание
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3267
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.06.20 13:19. Заголовок: gfilatov2002 пишет ..
gfilatov2002 пишет цитата: | - MNUCLR_THEME_DEFAULT; - MNUCLR_THEME_XP; - MNUCLR_THEME_2000; - MNUCLR_THEME_DARK. - MNUCLR_THEME_USER_DEFINED |
| Как то сложновато запоминать, может упростить чуток ? HMG_SetMenuTheme( "DEFAULT" ) HMG_SetMenuTheme( "XP" ) HMG_SetMenuTheme( "2000" ) HMG_SetMenuTheme( "DARK" ) HMG_SetMenuTheme( "USER", ... )
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1731
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.06.20 13:27. Заголовок: SergKis пишет: Как ..
SergKis пишет: цитата: | Как то сложновато запоминать |
| Это просто числовые константы: MNUCLR_THEME_DEFAULT = 0; MNUCLR_THEME_XP = 1 ; MNUCLR_THEME_2000 = 2; MNUCLR_THEME_DARK = 3. MNUCLR_THEME_USER_DEFINED = 99 так что можно использовать числа вместо имен
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3270
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.06.20 18:30. Заголовок: gfilatov2002 Можно ..
gfilatov2002 Можно в сервер примера LetoDbf внести небольшие изменения, для проверки наличия\запуска сервера в памяти на localhost из клиента ? Или обходится своей сборкой ? STATIC s_cIniName := "letodb.ini" STATIC s_hMutex := 0 THREAD STATIC s_hWASet PROCEDURE Main( cCommand, cData ) LOCAL oApp LOCAL cMutex := upper( hb_ProgName() ), lMutex IF Empty( cCommand ) AEval({".","\",":","/"," "}, {|cs| cMutex := StrTran(cMutex, cs, "_") }) s_hMutex := wapi_CreateMutex( NIL, NIL, cMutex ) lMutex := ( ! Empty( s_hMutex ) .AND. wapi_GetLastError() == 0 ) IF ! lMutex WrLog( "LetoDBF Server is running. Error "+hb_ntos(wapi_GetLastError())+" mutex "+cMutex ) RETURN ENDIF ENDIF s_cDirBase := hb_DirBase() leto_setDirBase( s_cDirBase ) ... IF cCommand != NIL .AND. Lower( cCommand ) == "stop" IF ! EMPTY( cData ) ... WrLog( "Can't STOP the server at port " + ALLTRIM( STR( oApp:nPort ) ) + " ( not started ? )" ) ENDIF IF ! empty( s_hMutex ) wapi_ReleaseMutex( s_hMutex ) ; s_hMutex := 0 ENDIF ELSEIF cCommand != NIL .AND. Left( Lower( cCommand ), 6 ) == "reload" ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1732
Зарегистрирован: 11.02.10
|
|
Отправлено: 23.06.20 20:47. Заголовок: SergKis пишет: Можн..
SergKis пишет: цитата: | Можно в сервер примера LetoDbf внести небольшие изменения |
| Пересобрал сервер с этими изменениями, все работает нормально. Благодарю за помощь
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1733
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.06.20 09:47. Заголовок: Всем кому это интересно
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1734
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.07.20 10:24. Заголовок: Всем кому это интересно
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6739
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.07.20 18:51. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Выложил обновление для сборки 20.06 (Update 1) с учетом последних исправлений |
| Пере собрал свои проги ! Полёт нормальный ! Можно команду SET MULTIPLE OFF WARNING сделать через AlertStop() ?
|
|
|
Haz
|
| |
Пост N: 1568
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.07.20 19:04. Заголовок: Andrey пишет: Можно..
Andrey пишет: цитата: | Можно команду SET MULTIPLE OFF WARNING сделать через AlertStop() ? |
|
не надо. Или стандарт или с выбором куда выводить. Дизайн AlertStop() не к любому интерфейсу по фейсу Ps.. Кому нужно будет, могут команду переопределить
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6740
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.07.20 20:22. Заголовок: Haz пишет: Кому нуж..
Haz пишет: цитата: | Кому нужно будет, могут команду переопределить |
| А как ? Писать свою функцию не хочется. Можно переключатель сделать в стандартной библиотеке ?
|
|
|
Haz
|
| |
Пост N: 1569
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.07.20 20:29. Заголовок: Andrey пишет: А как..
Andrey пишет: цитата: | А как ? Писать свою функцию не хочется. |
|
зачем писать свою. Посмотри как в ch команда транслируется и замени для себя msgstop() на что хочешь.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6741
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.07.20 20:54. Заголовок: Haz пишет: Посмотри..
Haz пишет: цитата: | Посмотри как в ch команда транслируется и замени для себя msgstop() на что хочешь. |
| Не, это не то... Ладно, проехали... Не особо существенно это. Другая проблема достаёт. Под Win 8.1 нет у меня сообщения из функции WaitWindow( cMessage, lNoWait ). Под ХР, 7, 10 всё есть. Нашёл эту функцию в h_windows.prg Сделал отладку и увидел почему так: @ iif( IsVistaOrLater(), 4, 7 ), 12 LABEL Message ; WIDTH GetProperty( cFormName, "Width" ) - 24 - GetBorderWidth() ; HEIGHT 18 VALUE cMessage SIZE 10 CENTERALIGN TRANSPARENT END WINDOW ? "hb_osIsWin8()=",hb_osIsWin8() ? "nWidth := GetTextWidth( , '"+cMessage+"')" ? "nWidth := ", nWidth ? GetProperty( cFormName, "Width" ), "<", 2 * nWidth ? GetProperty( cFormName, "Width" ) < 2 * nWidth IF GetProperty( cFormName, "Width" ) < 2 * nWidth SetProperty( cFormName, "Message", "Value", "" ) _DefineTimer( "Timer", cFormName, 100, {|| EfeitoLabel( cMessage ) } ) ENDIF В отладке вот так: My test program (2): Запуск второй копии программы / Starting a second copy of the program hb_osIsWin8()= .T. nWidth := GetTextWidth( , 'My test program (2): Запуск второй копии программы / Starting a second copy of the program' ) nWidth := 611 800 < 1222 .T. Исправить в коде это можно ?
|
|
|
Haz
|
| |
Пост N: 1570
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.07.20 22:22. Заголовок: Andrey пишет: Испра..
Andrey пишет: цитата: | Исправить в коде это можно ? |
| Андрей, конечно можно исправить. Напиши Григорию обоснованное исправление и он точно скажет тебе спасибо. Из твоей отладки я вижу, что по условию выдаст пустую строку. Кто и зачем это условие поставил я не задумывался. В принципе исходник простой, разобраться не сложно.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6742
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.07.20 00:16. Заголовок: А кто нибудь пользов..
А кто нибудь пользовался примером MiniGUI\SAMPLES\Advanced\Decompiler ? А то у меня Decompiler.exe вылетает с ошибкой: Application: W:\HB_Project\PROJECT\ТЕСТ\Decompiler.exe Time from start: 0 days 0 hours 0 mins 15 secs Error BASE/1132 Bound error: array access Args: [1] = A { ... } length: 1 [2] = N 2 --------------------------------- Stack Trace --------------------------------- Called from DCP_F80(739) in module: Decompiler.prg Called from DCP_F25(674) in module: Decompiler.prg Called from DCP_SPLIT_CODE(337) in module: Decompiler.prg Called from DECODE_C2PRG(38) in module: Decompiler.prg Called from E2CHD(167) in module: Decompiler.prg Called from (b)MAIN(27) in module: Decompiler.prg Called from _DOCONTROLEVENTPROCEDURE(1901) in module: h_windows.prg Called from EVENTS(1757) in module: h_events.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1514) in module: h_windows.prg Called from MAIN(23) in module: Decompiler.prg
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 840
Зарегистрирован: 13.10.05
|
|
Отправлено: 06.07.20 18:56. Заголовок: Тест идет, а реальна..
Тест идет, а реальная то же вываливается с ошибкой цитата: | Error BASE/1132 Bound error: array access |
|
, но в других местах. Я её и раньше проверял - никогда она нормально не работала.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6743
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.07.20 19:24. Заголовок: Печально... :sm66:..
Печально...
|
|
|
rvu
|
| |
Пост N: 257
Зарегистрирован: 05.11.05
|
|
Отправлено: 07.07.20 05:17. Заголовок: gfilatov2002 пишет: ..
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1735
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.07.20 10:55. Заголовок: Выложил обновление д..
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3280
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.07.20 07:54. Заголовок: gfilatov2002 Правка..
gfilatov2002 Правка небольшая 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 ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1736
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.07.20 09:38. Заголовок: SergKis пишет: Прав..
SergKis пишет: OK
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6747
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.07.20 17:19. Заголовок: SergKis пишет: Прав..
SergKis пишет: цитата: | Правка небольшая METHOD Enabled( lEnab ) CLASS TSBrowse |
| А курсор активный серым цветом можно сразу сделать в этом методе ? Было бы удобней так.
|
|
|
Haz
|
| |
Пост N: 1573
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.07.20 17:34. Заголовок: Andrey пишет: А кур..
Andrey пишет: цитата: | А курсор активный серым цветом можно сразу сделать в этом методе ? Было бы удобней так. |
|
курсор разный бывает. Я использую только рамочный, чтоб не терять подсветку ячеек ( обязательные поля и пр). И переключение с рамки на серый лайтбар будет не эстетично 😎
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3281
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.07.20 18:04. Заголовок: Haz пишет Я использу..
Haz пишет цитата: | Я использую только рамочный, чтоб не терять подсветку ячеек ( обязательные поля и пр). И переключение с рамки на серый лайтбар будет не эстетично |
| Не только не эстетично, но главное теряется фокус, с какой строкой тсб идет манипуляция (заблокировав тсб), что визуально важно. А сменить цвет для выбранной строки, поставь нужный всем колонкам (старый ты знаешь или сохрани), сделай :DrawSelect() :Enabled(.F.) потом :Enabled(.T.) Старый цвет restore :DrawSelect()
|
|
|
Haz
|
| |
Пост N: 1574
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.07.20 22:00. Заголовок: SergKis пишет: Не т..
SergKis пишет: Сергей, я о том же. В остальном привык все установки делать руками, включая управление цветом. Иметь базовое стандартное решение это хорошо, но только до тех пор, пока свое писать дольше чем исправлять базу. Мне пока проще вместо :enabled() использовать :lEnable и свои игры с цветом.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3282
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.07.20 22:21. Заголовок: Haz пишет я о том же..
Haz пишет цитата: | я о том же ... Мне пока проще вместо :enabled() |
| Полностью с тобой согласен, а :Enabled() совсем не использую, окно модал, не закрывая тсб с вертушкой\градусником достаточно в районе StatusBar. Часто надо что бы тсб "шевелилось" в это время, а :Enabled() отрубает некоторые методы.
|
|
|
Haz
|
| |
Пост N: 1575
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.07.20 14:36. Заголовок: SergKis пишет: а :E..
SergKis пишет: цитата: | а :Enabled() совсем не использую |
| Сергей, подумал есть вариант быстро затенять весь бровс , не заботясь о сохранении изначального цвета. Суть в следующем: Весь объект рисуется через TSDrawCell(), цвета передаются параметрами. Можно задать флаг lGreyScale в переменных бровса , а цвета переопределять в зависимости от флага. к примеру nClrBack завернуть как if( ::lGrayScale, RgbToGray(nClrBack), nClrBack ) и так везде. Сама RgbToGray() - простое преобразование цвета в градации серого 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 } В теории должно работать , вырубил флаг и бровс опять цветной. PS возможны нюансы с отрицательным знечением цвета, но уверен легко устранимые . Зато нет нужды сохранять и восстанавливать , а для скорости и простоты все делать через обертку для TSDrawCell() , которая и заменяет цвет перед подачей в оригинальную TSDrawCell() ЗЗЫ проверил - криво работает преобразование в грей, нужен алгоритм другой
|
|
|
Haz
|
| |
Пост N: 1576
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.07.20 15:13. Заголовок: Haz пишет: ЗЗЫ пров..
Haz пишет: цитата: | ЗЗЫ проверил - криво работает преобразование в грей, нужен алгоритм другой |
| Все работает , цвета в серый преобразовываются поменял в базовом примере ColorsTable функцию GetColumnBackColor() на это 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 } и получил все серенькое , значит идея жива
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3283
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.07.20 15:45. Заголовок: Haz пишет есть вариа..
Haz пишет цитата: | есть вариант быстро затенять весь бровс , не заботясь о сохранении изначального цвета. |
| Может не врубаюсь, вариантов покрасить тсб много, от ф-й в блоках кода на колонку, "Enabled(.T.\.F.) и то что предлагаешь, а еще можно переменные иметь (вдруг не серый свет надо, а зеленый и .т.д.) и от них плясать. В чем смысл и цель ? То что есть, хватает, а усложнять ... и так приходится, то в кусок кода лезть, то в сам h_tbrowse.prg, что бы вспомнить детали. Есть еще oCol:Cargo, доп. к oBrw:Cargo можно для каждой колонки определить все что хочешь и отрабатывать. На мой взгляд, то что есть достаточно, а красить в серый, зеленый, синий, ... это уже как кому хочется, варианты есть. цитата: | Все работает , цвета в серый преобразовываются поменял в базовом примере ColorsTable функцию GetColumnBackColor() на это |
| Что то не нашел такую ф-ю в примерах. О каком примере речь ?
|
|
|
Haz
|
| |
Пост N: 1577
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.07.20 16:27. Заголовок: SergKis пишет: На ..
SergKis пишет: цитата: | На мой взгляд, то что есть достаточно, а красить в серый, зеленый, синий, ... это уже как кому хочется, варианты есть. |
| Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов. Попробовал функцию конвертации цвета в серый- работает. Тренировался тут MiniGUI\SAMPLES\BASIC\ColorsTable\demo.prg живет там.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3284
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.07.20 16:48. Заголовок: Haz пишет Просто инт..
Haz пишет цитата: | Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов. |
| Большой разницы не вижу, делать как в :Enabled() с сохранением и восстановлением или через переменную предложенную, т.к. это надо проделывать в :DrawSuper(), :DrawHeader() (внутри нее :lDarawSpcHd, :lDrawFooter), :DrawLine(), DrawSelect() и учесть в последнем отрицательные цвета цитата: | Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов. Попробовал функцию конвертации цвета в серый- работает. |
| Ф-я работает А пример искал в Advanced
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6756
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.07.20 21:39. Заголовок: Haz пишет: Сергей, ..
Haz пишет: цитата: | Сергей, подумал есть вариант быстро затенять весь бровс , не заботясь о сохранении изначального цвета. |
| Я уже давно использую свою функцию ОТДЕЛЬНУЮ для этого. Выкладывал уже исходник. Эта функция интересна ещё тем, что блокирует автоматом все дальнейшие нажатия на форме. И картинки на форме четко затеняет. Т.е. из Си вызывается окно с размерами формы и затеняет своё окно заданным цветом. После того как нужно убрать затенение вызываем другую функцию. Параметр - хендл затеняющего окна. Вот примерно так: :aColumns[nI]:bPrevEdit := {|| Darken2Open(hWin) ,; // Затенение на форме myColorEditTsb(oBrw) ,; Darken2Close(hWin) ,; // Убрать затенение на форме oBrw:Setfocus(), FALSE }
|
|
|
Haz
|
| |
Пост N: 1578
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.07.20 22:43. Заголовок: Andrey пишет: давно..
Andrey пишет: цитата: | давно использую свою функцию ОТДЕЛЬНУЮ для этого. |
|
Речь не об этом. Андрей , то что ты предлагаешь, это поверх окна бровса открывать полупрозрачное в размер, как делают скринлокеры. Несколько лет назад с Димой попробовали это делать. Я делал тень окна, открывал полупрозрачное под окном и со смещением. Минусов больше чем плюсов. Во первых не на всех операционках корректно работало ( на каком-то вин сервере не сработала). Во вторых , по кнопкам альт-тав и пр идёт переключение . Или твой пример не об этом этом?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3288
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.07.20 15:15. Заголовок: Andrey пишет Выклады..
Andrey пишет Может выложишь, т.к. в примерах hmg ее нет. Будет понятнее. Haz пишет цитата: | Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов. |
| Если вынести вызов TSDrawCell() в метод :TSDrawCell(), заменив локальные переменные на переменные объекта TSBcell и вызывать метод после заполнения объекта oColumn:oCell во всех местах, заменив вызов ф-ии, то можно проделывать разное в блоке кода :bTSDrawCell, примерно так new method 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 Вопрос надо ли ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6757
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.07.20 16:41. Заголовок: SergKis пишет: Може..
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6758
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.07.20 19:57. Заголовок: Григорий ! Задание ф..
Григорий ! Задание фонтов для ТСБ не работает. aFont := { "Cell", "Head", "Foot", "SpecH", "SuperH", "Edit" } DEFINE TBROWSE oBrw AT nY, nX ; .... FONT aTsbFont ; Сергей дал свой h_tbrowse.prg, с ним заработало !
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3289
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.07.20 20:06. Заголовок: Andrey пишет Сергей ..
Andrey пишет цитата: | Сергей дал свой h_tbrowse.prg, с ним заработало ! |
| Я добавил только Method AddSuperHead( nFromCol, nToCol, uHead, nHeight, aColors, l3dLook, uFont, uBitMap, lAdjust, lTransp, ; ... hFont := iif( ! Empty(uFont), iif( ValType( uFont ) == "O", uFont:hFont, uFont ), hFont ) If ! Empty( ::aColumns ) .and. empty( hFont ) hFont := iif( ValType( ::aColumns[ nFromCol]:hFontHead ) == "O", ::aColumns[ nFromCol]:hFontHead, ; iif( ::aColumns[ nFromCol]:hFontHead != Nil, ::aColumns[ nFromCol]:hFontHead, hFont ) ) EndIf
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1739
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.07.20 20:34. Заголовок: SergKis пишет: If !..
SergKis пишет: цитата: | If ! Empty( ::aColumns ) .and. empty( hFont ) |
| Ok Благодарю за помощь
|
|
|
Haz
|
| |
Пост N: 1579
Зарегистрирован: 20.02.11
|
|
Отправлено: 19.07.20 21:18. Заголовок: SergKis пишет: Вопр..
SergKis пишет: не надо. 😎 это была так скажем идея интересующимся. Не стоит перегружать объект редко используемым функционалом. Tsb и так скоро будет перегружен тем, что используется редко. Главная беда tsb это не отсутствие функционала, его можно дописать. Главная беда это тормозной вывод на экран, отсутствие буферизации и пр. Если вверх/вниз еще можно скролл окна использовать, вправо/влево все в прорисовке по ячейкам. Раз сто смотрел код , из мыслей как сделать оптимальнее только скролл окна и прорисовка появившейся колонки . но пока или руки не дошли или текучка так давит, что уже не до рук
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1740
Зарегистрирован: 11.02.10
|
|
Отправлено: 20.07.20 09:50. Заголовок: Всем кому это интересно
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1741
Зарегистрирован: 11.02.10
|
|
Отправлено: 27.07.20 09:53. Заголовок: Всем кому это интересно
Выложил обновление для сборки 20.06 ( Update 4) с учетом последних исправлений Базовый дистрибутив для BCC 5.8.2 находится по адресу http://hmgextended.com/files/CONTRIB/hmg-20.06-setup.exe Важно: в этом обновлении переработана поддержка графических файлов в форматах BMP, GIF, TIF, JPG и PNG для всех элементов управления (в т.ч. Tab Pages)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6772
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.07.20 10:37. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | в этом обновлении переработана поддержка графических файлов |
| А в чём это заключается ?
|
|
|
Dima
|
| |
Пост N: 7220
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.07.20 10:40. Заголовок: Andrey пишет: А в ч..
Andrey пишет: цитата: | А в чём это заключается ? |
| ChangeLog.txt
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1742
Зарегистрирован: 11.02.10
|
|
Отправлено: 27.07.20 11:41. Заголовок: Andrey пишет: в чём..
Andrey пишет: Для пользователей библиотеки добавлена возможность использовать популярный формат PNG практически для всех элементов управления, при этом Си-код ядра был упрощен и стал универсальным (я только адаптировал наработки Клаудио Сото для HMG, которые он сделал еще в 2014 году).
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6773
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.07.20 12:36. Заголовок: Что то PNG в ТСБ оче..
Что то PNG в ТСБ очень фигово выглядит !!! Если ставишь PNG в суперхидер и шапку (подвал наверное тоже), то картинка фиговая становиться... Цвета заливки берутся из цвета и вся красота накрывается. Может я и неправильно что то делаю.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1743
Зарегистрирован: 11.02.10
|
|
Отправлено: 27.07.20 14:18. Заголовок: Andrey пишет: PNG в..
Andrey пишет: цитата: | PNG в ТСБ очень фигово выглядит |
| Функция LOADIMAGE(), которая используется в TBROWSE для загрузки картинок, имеет всего 2 параметра и заточена для загрузки BMP файлов в целях совместимости. Если добавить в нее дополнительные параметры, то можно попробовать подстроить ее для формата PNG. Или можно использовать для загрузки картинок другую (уже готовую) функцию C_SETPICTURE(), которая имеет все эти дополнительные параметры
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6774
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.07.20 15:34. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Или можно использовать для загрузки картинок другую (уже готовую) функцию C_SETPICTURE(), которая имеет все эти дополнительные параметры |
| Хотелось бы это иметь в ТСБ. Вот ещё пример:
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3291
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.07.20 16:38. Заголовок: gfilatov2002 Может ..
gfilatov2002 Может немного поправить Row в h_alert.prg (как то с одной строкой кривовато отображает) STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... ELSE //@ nChrHeight * 1.5 + GetBorderHeight(), nCol ; @ nChrHeight + GetBorderHeight(), nCol ; LABEL Say_01 VALUE AllTrim( cMsg ) OF ( cForm ) ; FONT cFont WIDTH nWidthCli - nCol - GetBorderWidth() - MARGIN / 4 HEIGHT Max( nChrHeight, nIcoSize ) ; FONTCOLOR aFontColor BACKCOLOR aBackColor VCENTERALIGN ENDIF IF nIcoSize > 0 DRAW ICON IN WINDOW ( cForm ) ; AT nChrHeight + GetBorderHeight(), MARGIN / iif( nIcoSize == 32, 1.4, iif( nIcoSize == 48, 1.7, 2 ) ) ; PICTURE cIcoFile WIDTH nIcoSize HEIGHT nIcoSize TRANSPARENT ENDIF ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1744
Зарегистрирован: 11.02.10
|
|
Отправлено: 27.07.20 17:15. Заголовок: SergKis пишет: попр..
SergKis пишет: цитата: | поправить Row в h_alert.prg |
| Сергей, Текст этой одной строки выводится примерно посередине высоты иконки, как и в оригинальной функции MsgInfo(). Не вижу проблемы SergKis пишет: цитата: | Max( nChrHeight, nIcoSize ) |
| Ага, уже понял
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1745
Зарегистрирован: 11.02.10
|
|
Отправлено: 28.07.20 11:13. Заголовок: Всем кому это интересно
Выложил "тихое" обновление для сборки 20.06 (Update 4) с учетом последних исправлений Что нового: - GRID не будет сваливаться, если 1000000 (один миллион) раз запросить значение ячейки грида. Тестовый пример для этой ошибки см. ниже Скрытый текст
#include "minigui.ch" Function Main() Local aRows [1000] [3] DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 450 ; HEIGHT 400 ; TITLE 'Grid Demo' ; MAIN FOR i := 0 TO 99 aRows [ i * 10 + 1] := {'Simpson','Homer','555-5555'} aRows [ i * 10 + 2] := {'Mulder','Fox','324-6432'} aRows [ i * 10 + 3] := {'Smart','Max','432-5892'} aRows [ i * 10 + 4] := {'Grillo','Pepe','894-2332'} aRows [ i * 10 + 5] := {'Kirk','James','346-9873'} aRows [ i * 10 + 6] := {'Barriga','Carlos','394-9654'} aRows [ i * 10 + 7] := {'Flanders','Ned','435-3211'} aRows [ i * 10 + 8] := {'Smith','John','123-1234'} aRows [ i * 10 + 9] := {'Pedemonti','Flavio','000-0000'} aRows [ i * 10 + 10] := {'Gomez','Juan','583-4832'} NEXT i @ 10,10 GRID Grid_1 ; WIDTH 200 ; HEIGHT 330 ; HEADERS {'Last Name','First Name','Phone'} ; WIDTHS {140,140,140}; ITEMS aRows ; VALUE 1 ; TOOLTIP 'Editable Grid Control' ; EDIT ; JUSTIFY { BROWSE_JTFY_LEFT,BROWSE_JTFY_RIGHT, BROWSE_JTFY_RIGHT } @ 10, 250 BUTTON Button_1 CAPTION "Start" ACTION ( Test(), MsgInfo( "Ended" ) ) END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 RETURN NIL FUNCTION Test FOR i := 1 TO 1000 FOR j := 1 TO 1000 t := GetProperty( 'Form_1', 'Grid_1', 'Cell', i, 3 ) NEXT j do events NEXT i RETURN NIL
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3292
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.07.20 13:47. Заголовок: gfilatov2002 Малень..
gfilatov2002 Маленькая правка, что бы имена колонок не дублировались METHOD Paint() CLASS TSBrowse ... If ::lSelector Default ::nSelWidth := Max( nBmpWidth( ::hBmpCursor ), Min( ::nHeightHead, 25 ) ) oCol := ColClone( ::aColumns[ 1 ], Self ) oCol:bData := {||""} oCol:cHeading := "" oCol:nWidth := ::nSelWidth oCol:lNoHilite := .T. oCol:lFixLite := Empty( ::hBmpCursor ) oCol:nClrBack := oCol:nClrHeadBack oCol:cName := "SELECTOR" ::InsColumn( 1, oCol ) ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1746
Зарегистрирован: 11.02.10
|
|
Отправлено: 28.07.20 14:54. Заголовок: SergKis пишет: что ..
SergKis пишет: цитата: | что бы имена колонок не дублировались |
| Благодарю за помощь Если возможно, проверьте работу переработанной функции LoadImage() цитата: | HB_FUNC( LOADIMAGE ) { HWND hWnd = HB_ISNIL( 2 ) ? GetActiveWindow() : ( HWND ) HB_PARNL( 2 ); HBITMAP hBitmap = NULL; if( hb_parclen( 1 ) > 0 ) { hBitmap = HMG_LoadPicture ( hb_parc( 1 ), // Filename, resource or URL hb_parnidef( 3, -1 ), // Width hb_parnidef( 4, -1 ), // Height hWnd, // Handle of parent window hb_parnidef( 5, 1 ), // Scale factor hb_parnidef( 6, 1 ), // Transparent hb_parnldef( 7, -1 ), // BackColor hb_parnidef( 8, 0 ), // Adjust factor hb_parldef( 9, HB_FALSE ), // Bitmap with alpha channel hb_parnidef( 10, 255 ) ); } HB_RETNL( ( LONG_PTR ) hBitmap ); } |
| Пример Tsb_BitMaps у меня отработал нормально
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3293
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.07.20 15:28. Заголовок: gfilatov2002 пишет п..
gfilatov2002 пишет цитата: | проверьте работу переработанной функции LoadImage() |
| Старые варианты (картинок немного) с новой LoadImage() отработали нормально Картинок много у Андрея, с доп. параметрами LoadImage() надо у него проверять
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6776
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.07.20 16:26. Заголовок: SergKis пишет: Карт..
SergKis пишет: цитата: | Картинок много у Андрея, с доп. параметрами LoadImage() надо у него проверять |
| Вот сравнение до и после: Картинки могу выслать...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3294
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.07.20 16:41. Заголовок: Andrey пишет Картинк..
Andrey пишет Ты ф-ю заменил, либу пересобрал и старые примеры с bmp получил ? И картинка по этой ситуации
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6777
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.07.20 18:38. Заголовок: SergKis пишет: Ты ф..
SergKis пишет: цитата: | Ты ф-ю заменил, либу пересобрал и старые примеры с bmp получил ? |
| Скачал новую версию. Поставил вместо bmp новые png в ресурсы. Пере собрал проект. А зачем либу пере собирать ? Старые примеры на bmp такие же. Я думал можно будет png использовать вместо bmp в ТСБ.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1747
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.07.20 09:33. Заголовок: Всем кому это интересно
Выложил обновление для сборки 20.06 ( Update 5) с учетом последних исправлений Базовый дистрибутив для BCC 5.8.2 находится по адресу http://hmgextended.com/files/CONTRIB/hmg-20.06-setup.exe Что нового: Скрытый текст
* Fixed: Possible corruption after a memory allocation in the C-function ListViewGetItem() (introduced in the build 19.04). Reported and contributed by Fernando Yurisich. * Fixed: When loads a Grid control and 'ColumnControls' property is NIL then converts automatically any data type in a text type. Problem was reported by Fernando Yurisich. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - minor correction at adding of a Selector in the method Paint(). Contributed by Sergej Kiselev. - the function LoadImage() supports the additional parameters. Syntax: LoadImage( cFilename [, hWnd ][, nWidth ][, nHeight ] ; [, nScale ][, nTransparent ][, nBackColor ][, Adjust ] ; [, lAlpha ][, nAlphaConstant ] ) Requested by Verchenko Andrey. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: HbSQLite3 library: - update for using SQLITE3 latest version 3.33.0dev. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * Updated: 'Data-Bound Controls' sample: - updated function DrawRR() for the round rectangled edit controls. Syntax: DrawRR( nRow, nCol, nHeight, nWidth ; [, lFocus][, cWindowName][, nCurve] ) Requested by Paul Schlicher. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\DATA_BOUND)
|
Желаю доброго дня
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3295
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.07.20 13:33. Заголовок: gfilatov2002 пишет ..
gfilatov2002 пишет цитата: | Syntax: DrawRR( nRow, nCol, nHeight, nWidth ; [, lFocus][, cWindowName][, nCurve] ) |
| Лучше так, наверное PROCEDURE DrawRR( focus, t, l, b, r, cWindowName, nCurve ) DEFAULT t := This.Row, l := This.Col, b := This.Height, r := This.Width DEFAULT focus := .F., cWindowName := ThisWindow.Name, nCurve := 10 DRAW ROUNDRECTANGLE IN WINDOW (cWindowName) ; AT t - 2, l - 2 TO t + b + 2, l + r + 2 ; ROUNDWIDTH nCurve ; ROUNDHEIGHT nCurve ; PENCOLOR iif( focus, { 0, 120, 215 }, { 100, 100, 100 } ) RETURN и может ее включить как HMG_DrawRR(...) в lib ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3296
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.07.20 13:34. Заголовок: PS Применение @ y..
PS Применение @ y,x LABEL Lbl_1 WIDTH w HEIGHT h FONT cFont ; VALUE 'Lbl Value 1' VCENTERALIGN x += This.Lbl_1.Width + oDlu:GapsWidth @ y,x GETBOX Get_1 WIDTH This.ClientWidth - x - oDlu:Left HEIGHT h ; VALUE "Get Value 1"+space(20) FONT cFont ; PICTURE "@K" ; ON GOTFOCUS DrawRR( .T. ) ; ON LOSTFOCUS DrawRR( .F. ) y += This.Lbl_1.Height + oDlu:GapsHeight x := oDlu:Left @ y,x LABEL Lbl_2 WIDTH w HEIGHT h FONT cFont ; VALUE 'Lbl Value 2' VCENTERALIGN x += This.Lbl_2.Width + oDlu:GapsWidth @ y,x GETBOX Get_2 WIDTH This.ClientWidth - x - oDlu:Left HEIGHT h ; VALUE "Get Value 2"+space(20) FONT cFont ; PICTURE "@K" ; ON GOTFOCUS DrawRR( .T. ) ; ON LOSTFOCUS DrawRR( .F. )
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1748
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.07.20 13:51. Заголовок: SergKis пишет: Лучш..
SergKis пишет: Да, так, конечно, лучше SergKis пишет: Также следует добавить при определении GETBOX класс NOBORDER
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3297
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.07.20 14:36. Заголовок: gfilatov2002 Так ещ..
gfilatov2002 Так еще лучше будет PROCEDURE DrawRR( focus, t, l, b, r, cWindowName, nCurve ) LOCAL aColor DEFAULT t := This.Row, l := This.Col, b := This.Height, r := This.Width DEFAULT focus := .F., cWindowName := ThisWindow.Name, nCurve := 10 IF ISARRAY( focus ) ; aColor := focus ELSE ; aColor := iif( focus, { 0, 120, 215 }, { 100, 100, 100 } ) ENDIF DRAW ROUNDRECTANGLE IN WINDOW (cWindowName) ; AT t - 2, l - 2 TO t + b + 2, l + r + 2 ; ROUNDWIDTH nCurve ; ROUNDHEIGHT nCurve ; PENCOLOR aColor // iif( focus, { 0, 120, 215 }, { 100, 100, 100 } ) RETURN
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1749
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.07.20 14:59. Заголовок: SergKis пишет: лучш..
SergKis пишет: OK
|
|
|
sashaBG
|
| постоянный участник
|
Пост N: 196
Зарегистрирован: 15.09.05
|
|
Отправлено: 30.07.20 16:32. Заголовок: В последних сборках под MINGW
Привет Григорий ! В последних сборках под MINGW не отображаются картинки в меню. Можно проверить на примере MenuEX . Под Visual Studio работает. Все останльное ОК.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1750
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.07.20 17:28. Заголовок: sashaBG Благодарю з..
sashaBG Благодарю за сообщение Уже поправил обе MINGW сборки Кстати, под BCC такая ошибка не проявляется (старый инструмент )
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6778
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.07.20 19:17. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Кстати, под BCC такая ошибка не проявляется |
| В последней сборке тоже такая фигня. На одном юзеровском компе это есть (у него Win10). До конца пока не разбирался.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1751
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.07.20 19:54. Заголовок: Andrey пишет: В пос..
Andrey пишет: цитата: | В последней сборке тоже такая фигня. |
| Я поправил эту проблему в ВСС сборке тоже, просто надо ее еще раз скачать и установить
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6779
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.07.20 20:00. Заголовок: Понял. Спасибо ! :s..
Понял. Спасибо ! Вопрос чисто теоритический ? Можно ли в ТСБ в подвал прикрутить автофильтр как в Экселе ? Юзерам нравиться такой подход по поиску данных.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3298
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.07.20 13:55. Заголовок: gfilatov2002 Отступ..
gfilatov2002 Отступ сверху до иконки Label Say_01 в HMG_Alert() большой и не управляемый. Может вынести в static переменную и добавить параметр в HMG_Alert_MaxLines() или новую ф-ю HMG_Alert_RowStart( nRow ) сделать установку и использовать ? Примеры (видно не пропорциональный отступ, меняя фонты и их размеры) Тут https://TransFiles.ru/aul7y
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1752
Зарегистрирован: 11.02.10
|
|
Отправлено: 31.07.20 14:19. Заголовок: SergKis пишет: нову..
SergKis пишет: цитата: | новую ф-ю HMG_Alert_RowStart( nRow ) |
| Я - за новую функцию Присылайте предложение, как ее лучше использовать внутри HMG_Alert()
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3299
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.07.20 17:56. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет цитата: | Присылайте предложение, как ее лучше использовать внутри HMG_Alert() |
| Вот что получилось https://TransFiles.ru/4hb07
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1753
Зарегистрирован: 11.02.10
|
|
Отправлено: 31.07.20 19:46. Заголовок: SergKis пишет: Вот ..
SergKis пишет: Супер - все работает как надо Благодарю за помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3300
Зарегистрирован: 17.02.12
|
|
Отправлено: 01.08.20 12:53. Заголовок: gfilatov2002 Можно ..
gfilatov2002 Можно заменить, добавить в h_objects.prg CLASS TKeyData ... METHOD Set( Key, Block ) INLINE ( iif( HB_ISHASH( Key ), ::aKey := Key, hb_HSet ( ::aKey, Key, Block ) ), ; ::lKey := ::Len() > 0 ) ... METHOD ISBLOCK( Key ) INLINE HB_ISBLOCK( ::Get( Key ) ) METHOD Json( cJson ) INLINE iif( HB_ISCHAR(cJson), ( cJson := SubS( cJson, At ("{", cJson) ), ; cJson := Left( cJson, RAt("}", cJson) ), ; ::aKey := hb_jsonDecode( cJson ), Self ), ; hb_jsonEncode( ::aKey, !Empty(cJson) ) ) _METHOD GetAll( lAll ) ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3301
Зарегистрирован: 17.02.12
|
|
Отправлено: 01.08.20 12:58. Заголовок: PS по инерции набрал..
PS по инерции набрал, надо METHOD Set( Key, Block ) INLINE ( iif( HB_ISHASH( Key ), ::aKey := Key, hb_HSet ( ::aKey, Key, Block ) ), ; ::lKey := ::Len > 0 )
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3302
Зарегистрирован: 17.02.12
|
|
Отправлено: 01.08.20 13:42. Заголовок: PS2 Применение a:..
PS2 Применение a:=hb_hash() a['dat'] := date() a['0'] := 222 a['TYP'] := "text" a['1'] := "text2" a['kod'] := 7777 o := oKeyData() o:Set(a) hb_MemoWrit( ".\_o_.json", o:Json(.F.)) результат {"dat":"20200801","0":222,"TYP":"text","1":"text2","kod":7777} обратно J := hb_memoread(".\_o_.json") a := oKeyData() ? "a = ", a:Json(J) ?v a:GetAll(.F.) получаем в лог a = 'O' 1 {"dat", "20200801"} 2 {"0", 222} 3 {"TYP", "text"} 4 {"1", "text2"} 5 {"kod", 7777}
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1754
Зарегистрирован: 11.02.10
|
|
Отправлено: 01.08.20 20:09. Заголовок: SergKis пишет: Можн..
SergKis пишет: цитата: | Можно заменить, добавить в h_objects.prg |
| Ok
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3307
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.08.20 20:03. Заголовок: gfilatov2002 Малень..
gfilatov2002 Маленькая бяка #xcommand DEFINE TBROWSE <name> OBJ <obrw> ; ... [ <.lAutoCol.> ], [ \{<aColSel>\} ], [ <{bInit}> ], ; ... Добавить в FUNCTION _DefineTBrowse( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ; ... IF HB_ISARRAY( aColors ) .and. Len( aColors ) > 0 .AND. ValType( aColors[ 1 ] ) == 'A' aColors := aColors[ 1 ] ENDIF IF ISCHAR( uAlias ) .and. !Empty( lLoad ) .and. Empty( aColSel ) aHeaders := {} aNames := {} aColSel := {} (uAlias)->( AEval( array(fCount()), {|cn,nn| cn := FieldName(nn), ; AAdd(aHeaders, cn), AAdd(aNames, cn), AAdd(aColSel, cn) } ) ) IF cell .and. Empty(aColors) aColors := {} AAdd(aColors, { 6, {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB(128,225,225) ) } } ) AAdd(aColors, {12, {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB(128,225,225) ) } } ) ENDIF ENDIF ... тогда проходит такой упрощенный вариант DEFINE TBROWSE &cBrw OBJ oBrw AT y,x WIDTH w HEIGHT h CELL ; ALIAS ALIAS() ; FONT {"Normal", "Bold", "Bold"} ; FOOTER .T. ; FIXED COLSEMPTY ; LOADFIELDS GOTFOCUSSELECT ; COLNUMBER { 1, 50 } ; ENUMERATOR ... Пример тут https://TransFiles.ru/eyn5b
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1755
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.08.20 20:20. Заголовок: SergKis пишет: Мале..
SergKis пишет: Бяку поправил - благодарю за помощь А это не перебор - явно указывать цвета внутри исходника h_tbrowse.prg
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3308
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.08.20 20:45. Заголовок: gfilatov2002 пишет А..
gfilatov2002 пишет цитата: | А это не перебор - явно указывать цвета внутри исходника h_tbrowse.prg |
| Можно не указывать, возможно, это перебор. Есть в DEFINE ... назначение. и там можно указать. У себя спрячу умолчания во внутрь, что бы меньше писать. Согласен, что это лишнее
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3309
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.08.20 20:54. Заголовок: PS Можно так Loca..
PS Можно так Local aClr := {} ... AAdd(aClr, { 6, {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB(128,225,225) ) } } ) AAdd(aClr, {12, {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB(128,225,225) ) } } ) DEFINE TBROWSE &cBrw OBJ oBrw AT y,x WIDTH w HEIGHT h CELL ; ALIAS ALIAS() ; FONT {"Normal", "Bold", "Bold"} ; COLORS aClr ; FOOTER .T. ; FIXED COLSEMPTY ; LOADFIELDS GOTFOCUSSELECT ; COLNUMBER { 1, 50 } ; ENUMERATOR ... будет тоже самое
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1756
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.08.20 21:10. Заголовок: SergKis пишет: Согл..
SergKis пишет: OK SergKis пишет: цитата: | Можно так ... будет тоже самое |
| Спасибо
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3311
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.08.20 10:15. Заголовок: gfilatov2002 Неболь..
gfilatov2002 Небольшая правка FUNCTION _wPost( nEvent, nIndex, xParam ) ... IF nIndex:ClassName == 'TSBROWSE' oWnd := _WindowObj( nIndex:cParentWnd ) IF ! HB_ISOBJECT( oWnd ) ; RETURN NIL ENDIF nIndex := oWnd:GetObj( nIndex:cControlName ):Index ... FUNCTION _wSend( nEvent, nIndex, xParam ) ... IF nIndex:ClassName == 'TSBROWSE' oWnd := _WindowObj( nIndex:cParentWnd ) IF ! HB_ISOBJECT( oWnd ) ; RETURN NIL ENDIF nIndex := oWnd:GetObj( nIndex:cControlName ):Index ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1757
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.08.20 10:50. Заголовок: SergKis пишет: Небо..
SergKis пишет: Принято: благодарю за помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3312
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.08.20 13:11. Заголовок: gfilatov2002 Пример..
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1758
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.08.20 14:10. Заголовок: SergKis пишет: Прим..
SergKis пишет: Благодарю за значительно расширенный пример
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3313
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.08.20 14:33. Заголовок: gfilatov2002 пишет Б..
gfilatov2002 пишет цитата: | Благодарю за значительно расширенный пример |
| Расширение на любителя , не исп. ранее в тсб on gotfocus, on lostfocus и получил ошибку _wSend(), _wPost(), по инерции добавил карточку, опять же, на AlertOkCancel(). Я не специально, так получилось
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3314
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.08.20 16:00. Заголовок: gfilatov2002 Для пр..
gfilatov2002 Для пробы (с Игорем обсуждали такую схему) - добавил блок кода DATA bTSDrawCell // In ::TSDrawCell(...) execute - вынес вызов TSDrawCell() в метод :TSDrawCell(), заменив локальные переменные на переменные объекта TSBcel и поправил вызовы ф-ии на метод (кроме SuperHeader). Это позволило в карточке примера получить логическую переменную в виде image и по Enter менять значение, т.е. можно налету подменять данные для ф-ии TSDrawCell() Мне показалось это интересным. Пример и h_tbrowse.prg тут https://TransFiles.ru/me4mq
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1759
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.08.20 16:59. Заголовок: SergKis пишет: - вы..
SergKis пишет: цитата: | - вынес вызов TSDrawCell() в метод :TSDrawCell(), заменив локальные переменные на переменные объекта TSBcel и поправил вызовы ф-ии на метод (кроме SuperHeader). Это позволило в карточке примера получить логическую переменную в виде image и по Enter менять значение, т.е. можно налету подменять данные для ф-ии TSDrawCell() Мне показалось это интересным. |
| Это интересно уже тем, что повторяющийся код вынесен в один метод. Проверил - пример отработал нормально. Благодарю за помощь
|
|
|
Haz
|
| |
Пост N: 1590
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.08.20 17:13. Заголовок: SergKis пишет: Мне ..
SergKis пишет: цитата: | Мне показалось это интересным. |
| Интересным и перспективным. Спасибо, отличная идея
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3315
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.08.20 18:43. Заголовок: gfilatov2002 Кусоче..
gfilatov2002 Кусочек текста для SuperHeader Скрытый текст
METHOD DrawSuper( lDrawCell ) CLASS TSBrowse ... Else l3DText := nClr3dL := nClr3dS := Nil EndIf /* IF lDrawCell TSDrawCell( hWnd, ; // 1 hDC, ; // 2 0, ; // 3 nStartCol, ; // 4 nWidth, ; // 5 cHeading, ; // 6 nHAlign, ; // 7 nClrFore, ; // 8 nClrBack, ; // 9 hFont, ; // 10 hBitMap, ; // 11 nHeightHead, ; // 12 l3DLook, ; // 13 nLineStyle, ; // 14 nClrLine, ; // 15 3, ; // 16 1=Header 2=Footer 3=Super nHeightHead, ; // 17 nHeightFoot, ; // 18 nHeightSuper, ; // 19 nHeightSpecHd, ; // 20 lAdjBmp, ; // 21 lMulTi, ; // 22 Multiline text nVAlign, ; // 23 0, ; // 24 nVertLine nClrTo, ; // 25 lOpaque, ; // 26 iif( lBrush, nClrBack:hBrush, 0 ), ; // 27 l3DText, ; // 28 3D text nClr3dL, ; // 29 3D text light color nClr3dS ) // 30 3D text shadow color ELSE */ IF aSupHd == NIL aSupHd := {} ENDIF oSupHd := TSBcell():New() oSupHd:nRow := 0 oSupHd:nCol := nStartCol oSupHd:nWidth := nWidth oSupHd:nHeight := ::nHeightSuper oSupHd:nCell := nI oSupHd:uValue := cHeading oSupHd:lDrawLine := .F. // DrawLine() If nI <= Len( aSuperHead ) oSupHd:nFromCol := aSuperHead[ nI, 1 ] oSupHd:nToCol := aSuperHead[ nI, 2 ] EndIf oSupHd:hWnd := hWnd // 1 oSupHd:hDC := hDC // 2 oSupHd:xRow := 0 // 3 oSupHd:nStartCol := nStartCol // 4 oSupHd:nSize := nWidth // 5 oSupHd:uData := cHeading // 6 oSupHd:nAlign := nHAlign // 7 oSupHd:nClrFore := nClrFore // 8 oSupHd:nClrBack := nClrBack // 9 oSupHd:hFont := hFont // 10 oSupHd:hBitMap := hBitMap // 11 oSupHd:nHeightCell := nHeightHead // 12 oSupHd:l3DLook := l3DLook // 13 oColumn:l3DLook oSupHd:nLineStyle := nLineStyle // 14 oSupHd:nClrLine := nClrLine // 15 oSupHd:nDrawType := 3 // 16 0-line/1-header/2-footer/3-super oSupHd:nHeightHead := nHeightHead // 17 oSupHd:nHeightFoot := nHeightFoot // 18 oSupHd:nHeightSuper := nHeightSuper // 19 oSupHd:nHeightSpecHd := nHeightSpecHd // 20 oSupHd:lAdjBmp := lAdjBmp // 21 oSupHd:lMultiline := lMulti // 22 Multiline text oSupHd:nVAlign := nVAlign // 23 oSupHd:nVertText := 0 // 24 nVertLine oSupHd:nClrTo := nClrTo // 25 oSupHd:lOpaque := lOpaque // 26 oSupHd:hBrush := iif( lBrush, nClrBack:hBrush, 0 ) // 27 iif( lBrush, nClrBack:hBrush, 0 ) oSupHd:l3DText := l3DText // 28 3D text oSupHd:nClr3dL := nClr3dL // 29 3D text light color oSupHd:nClr3dS := nClr3dS // 30 3D text shadow color oSupHd:nCursor := 0 // 31 Rect cursor oSupHd:lInvertColor := .F. // 32 Invert color AAdd( aSupHd, oSupHd ) IF lDrawCell ::TSDrawCell( oSupHd ) ENDIF nStartCol += nWidth ...
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3316
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.08.20 19:14. Заголовок: PS В примере пропуст..
PS В примере пропустил Скрытый текст
oCol:bPostEdit := {|cv,ob,nc,oc,xv,ct,nl,nd| nc := ob:nCell oc := ob:aColumns[nc] xv := ob:aArray[ob:nAt][3] ct := ob:aArray[ob:nAt][4] nl := ob:aArray[ob:nAt][5] nd := ob:aArray[ob:nAt][6] If ct == "N" cv := alltrim(cv) If len(cv) > nl ; cv := right(cv, nl) EndIf cv := Ltrim(Str(Val(cv), nl+3, nd)) xv := val(cv) ob:aArray[ob:nAt][3] := xv ob:SetValue(oc, cv) ElseIf ct == "D" xv := CtoD(cv) cv := cValToChar(xv) ob:aArray[ob:nAt][3] := xv ob:SetValue(oc, cv) ElseIf ct == "C" ob:aArray[ob:nAt][3] := cv EndIf ob:Refresh(.F.) ; DO EVENTS ob:Cargo:oCar:nMod += 1 _wSend(3, ob) Return Nil }
|
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1760
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.08.20 19:22. Заголовок: SergKis пишет: для ..
SergKis пишет: Спасибо, сделал SergKis пишет: добавил
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3317
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.08.20 15:06. Заголовок: gfilatov2002 Поправ..
gfilatov2002 Поправил пример, при работе с карточкой данные в колонке "Value" не меняют тип (ранее был "C") и режим Edit учитывает это в блоках кода :bPrevEdt, :bPostEdit. Тут https://TransFiles.ru/ppqsg
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1761
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.08.20 15:38. Заголовок: SergKis пишет: Попр..
SergKis пишет: Спасибо, обновил пример также (с форматированием).
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3318
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.08.20 11:43. Заголовок: gfilatov2002 Сборка..
gfilatov2002 Сборка mgDBU Compile.bat (с build.bat ok!) выдает DBUVIEW.prg(66) Error E0030 Syntax error "syntax error at 'BEFORE'"
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3319
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.08.20 12:22. Заголовок: Разобрался. Забываю,..
Разобрался. Забываю, что в этом Compile.bat есть строка @if "%MG_ROOT%"=="" set MG_ROOT=c:\minigui которую надо править каждый раз на @if "%MG_ROOT%"=="" set MG_ROOT=c:\miniguiBcc58 в др. Compile.bat берется из minigui.cfg. там правлю всегда # Basic configuration for Compile.bat MG_CMP=harbour MG_BCC=c:\borland\bcc58 MG_ROOT=c:\miniguiBcc58
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3320
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.08.20 12:29. Заголовок: PS Сделал Compile.ba..
PS Сделал Compile.bat rem @if "%MG_ROOT%"=="" set MG_ROOT=c:\minigui call ..\..\batch\compile.bat MGDBU /nl %1 %2 %3 %4 %5 %6 %7 %8 %9 call ..\..\batch\compile.bat DBUEDIT /nl %1 %2 %3 %4 %5 %6 %7 %8 %9 call ..\..\batch\compile.bat DBUVIEW /nl %1 %2 %3 %4 %5 %6 %7 %8 %9 call ..\..\batch\compile.bat MGDBU /lo /b DBUEDIT /b DBUVIEW /r MGDBU_ %1 %2 %3 %4 %5 %6 %7 %8 %9 call ..\..\batch\compile.bat MGDBU /do %1 %2 %3 %4 %5 %6 %7 %8 %9 call ..\..\batch\compile.bat DBUEDIT /do %1 %2 %3 %4 %5 %6 %7 %8 %9 call ..\..\batch\compile.bat DBUVIEW /do %1 %2 %3 %4 %5 %6 %7 %8 %9 mgDBU.exe собрался
|
|
|
Haz
|
| |
Пост N: 1591
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.08.20 15:10. Заголовок: SergKis пишет: Сбор..
SergKis пишет: Сергей, ностальгируешь? Решил про DBU вспомнить ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3321
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.08.20 15:33. Заголовок: Haz пишет Решил про ..
Haz пишет цитата: | Решил про DBU вспомнить ? |
| На vwt и hb 2.0 своя утилита уже устарела (тексты еще с clipper брались без больших изменений), вроде надо новую собрать, руки никак не дойдут, но иногда поглядываю в эту сторону. Мне нужна unicode версия (hmg такая есть) для LV866. Изменения с тек. версией hmg и своей согласовал, проверил. Думаю, почему бы не глянуть mgDbu ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3322
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.08.20 16:42. Заголовок: gfilatov2002 При ра..
gfilatov2002 При работе с HOTKEY не логично получается ситуация, когда задаем ON KEY F2 OF This.Name ACTION MsgBox("Press F2 Info MdiChild ! "+ThisWindow.Name+" <"+This.Name+">", Procname()) и при нажатии получаем Called from MSGMINIGUIERROR(100) in module: h_error.prg Called from VERIFYCONTROLDEFINED(5997) in module: h_controlmisc.prg Called from GETPROPERTY(4815) in module: h_controlmisc.prg Called from (b)MDICHILDOPEN(296) in module: demo.prg Called from _DOCONTROLEVENTPROCEDURE(1901) in module: h_windows.prg Called from EVENTS(695) in module: h_events.prg Called from MDIEVENTS(291) in module: h_windowsmdi.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1514) in module: h_windows.prg Called from DOMETHOD(5451) in module: h_controlmisc.prg Called from MAIN(182) in module: demo.prg т.е. в h_events.prg контрол нашелся, что соответствует запуску блока для контрола IF _HMG_BeginWindowMDIActive IF _HMG_aControlParentHandles [ i ] == GetActiveMdiHandle() .OR. _HMG_InplaceParentHandle <> 0 IF _DoControlEventProcedure ( _HMG_aControlProcedures [ i ] , i ) RETURN 0 ENDIF ... и валится в GETPROPERTY(4815) на проверке *-----------------------------------------------------------------------------* STATIC PROCEDURE VerifyControlDefined ( cParentName , cControlName ) *-----------------------------------------------------------------------------* IF _IsControlDefined ( cControlName , cParentName ) == .F. MsgMiniGuiError ( "Control: " + cControlName + " Of " + cParentName + " Not defined." ) ENDIF RETURN ... Для типа HOTKEY не должна валится проверка, т.к. контрол есть но с пустым именем _HMG_aControlType [k] := "HOTKEY" _HMG_aControlNames [k] := '' _HMG_aControlHandles [k] := 0 ... Возможно, надо не делать VerifyControlDefined() для HOTKEY ?
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1764
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.08.20 17:33. Заголовок: SergKis пишет: Для ..
SergKis пишет: цитата: | Для типа HOTKEY не должна валится проверка |
| Сделал, конечно
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1765
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.08.20 14:47. Заголовок: Всем кому это интересно
Подготовил 2-ю бету для новой сборки 20.08. Что нового Скрытый текст
* Fixed: Program crash at editing of a first column with the defined IMAGE clause in the Grid control. Bug was reported by Pete D. <pete_westg/at/yahoo.gr>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\Grid_ImageIndex) * Fixed: Small correction in the internal function VerifyControlDefined() for protection of the HOTKEY controls which have not an internal name. Problem was reported by Sergej Kiselev. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * Enhanced: Added the auxiliary function HMG_Alert_RowStart() for managing of a start row of a first line in the function HMG_Alert(). Suggested and contributed by Sergej Kiselev (see demo8.prg in folder \samples\Advanced\Tsb_Basic_3) * Enhanced: The internal OOP class TKeyData was improved for Json support: - added the new method Json( cJson ). Usage: a := hb_hash() // create a hash a['dat'] := date() ; a['0'] := 222 ; a['TYP'] := "text" a['1'] := "text2" ; a['kod'] := 7777 o := oKeyData() // create object o:Set( a ) hb_MemoWrit( ".\_o_.json", o:Json( .F. ) ) ... J := hb_MemoRead( ".\_o_.json" ) a := oKeyData() ? "a = ", a:Json( J ) // a = 'O' ?v a:GetAll( .F. ) Suggested and contributed by Sergej Kiselev. * Modified: The default <versioninfo> section may be removed from the application resources with a specify of __VERSION_INFO constant and launch the batch file \Resources\CompileRes.bat. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see minigui.rc in folder \Resources) * Modified: The batch file buildapp.bat from Mingw-based distribution supports the projects with many RC files similar to BCC compiler. You can define the __VERSION_INFO constant in your local RC file for using an user-defined <versioninfo> section. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see Modest.rc in folder \Samples\Modest) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - added the new variable :bTSDrawCell and method TSDrawCell(); - improved usage of LOADFIELDS clause for a database. Sample code: DEFINE TBROWSE &cBrw OBJ oBrw AT y,x WIDTH w HEIGHT h CELL ; ALIAS Alias() ; FONT {"Normal", "Bold", "Bold"} ; FOOTER .T. ; FIXED COLSEMPTY ; LOADFIELDS GOTFOCUSSELECT ; COLNUMBER { 1, 50 } ; ENUMERATOR Contributed by Sergej Kiselev (see demo9.prg in folder \samples\Advanced\Tsb_Basic_3) * Updated: HbSQLite3 library: - update for using SQLITE3 latest version 3.33.0dev. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * New: 'RichText Class Test' sample. Related Commands are: - DEFINE RTF / CLOSE RTF - DEFINE PAGESETUP - BEGIN HEADER / END HEADER - BEGIN FOOTER / END FOOTER - WRITE TEXT - NEW PARAGRAPH - DEFINE TABLE / CLOSE TABLE - BEGIN ROW / END ROW - WRITE CELL - NEW SECTION - INSERT PAGENUMBER Based upon a contribution of Tom Marchione for FiveWin library. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\RichText) * New: 'TBrowse control placed into Alert messagebox' sample. Contributed by Sergej Kiselev (see demo9.prg in folder \samples\Advanced\Tsb_Basic_3) * New: 'Source Code Formatter' utility. Based upon a code borrowed from OOHG. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\ofmt) * Updated: 'Data-Bound Controls' sample: - updated function DrawRR() for the round rectangled edit controls. Syntax: DrawRR( [ lFocus ][, nRow ][, nCol ][, nHeight ][, nWidth ] ; [, cWindowName ][, nCurve ] ) Suggested and contributed by Sergej Kiselev (see demo2.prg in folder \samples\Basic\DATA_BOUND)
| Огромная благодарность Сергею Киселеву за помощь в подготовке этой сборки
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3323
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.08.20 16:10. Заголовок: gfilatov2002 пишет S..
gfilatov2002 пишет цитата: | Syntax: DrawRR( [ lFocus ][, nRow ][, nCol ][, nHeight ][, nWidth ] ; [, cWindowName ][, nCurve ] ) |
| Наверно, лучше DrawRR() иметь в таком виде *----------------------------------------------------------------------------* FUNCTION DrawRR( focus, nPen, t, l, b, r, cWindowName, nCurve ) *----------------------------------------------------------------------------* LOCAL aColor DEFAULT t := This.Row, l := This.Col, b := This.Height, r := This.Width DEFAULT focus := .F., cWindowName := ThisWindow.Name, nCurve := 5 DEFAULT nPen := 3 IF ISARRAY( focus ) ; aColor := focus ELSE ; aColor := iif( focus, { 0, 120, 215 }, { 100, 100, 100 } ) ENDIF DRAW ROUNDRECTANGLE IN WINDOW (cWindowName) ; AT t - 2, l - 2 TO t + b + 2, l + r + 2 ; ROUNDWIDTH nCurve ROUNDHEIGHT nCurve ; PENCOLOR aColor PENWIDTH nPen RETURN NIL т.к. толщина линии - важный элемент
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1766
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.08.20 19:08. Заголовок: SergKis пишет: лучш..
SergKis пишет: цитата: | лучше DrawRR() иметь в таком виде |
| Да, эта функция присутствует в таком виде в примере demo9, а для примера из папки DATA_BOUND она не требует введения этого дополнительного параметра.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3324
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.08.20 08:46. Заголовок: gfilatov2002 Может ..
gfilatov2002 Может надо добавить в тексты сообщений тсб Function LoadMsg() ... aMsg := { "Yes", ; // ::aMsg[ 1 ] ... "Restore Record ?", ; // ::aMsg[ 46 ] (future possible usage) ... и т.д. тогда заменить в METHOD DeleteRow( lAll, lUpStable ) CLASS TSBrowse Local lRecall, nAt, nRowPos, nRecNo, lRefresh, cAlias, lEval, uTemp, cMsg ... If ! ::lIsTxt If ::lConfirm .and. !lAll cMsg := ::aMsg[ 38 ] If ::lIsDbf cMsg := ::aMsg[ 37 ] If lRecall .and. ( cAlias )->( Deleted() ) cMsg := ::aMsg[46] EndIf EndIf If ! MsgYesNo( cMsg, ::aMsg[ 39 ] ) Return .f. EndIf EndIf вместо этого //If ::lConfirm .and. !lAll .and.; // ! MsgYesNo( iif( ::lIsDbf, ::aMsg[ 37 ], ::aMsg[ 38 ] ), ::aMsg[ 39 ] ) // Return .f. //EndIf ... чтобы не делать все время блок кода :SetDeleteMode( .T., .F., {|rec,obr,txt,del| del := (obr:cAlias)->( Deleted() ) txt := iif( del, "Restore", "Delete" )+" "+"record ?" Return MsgYesNo(txt, "Confirmation") }, {|obr| obr:Cargo:nRecnoDraw := 0, obr:DrawSelect() } ) и писать проще :SetDeleteMode( .T., .F., , {|obr| obr:Cargo:nRecnoDraw := 0, obr:DrawSelect() } ) gfilatov2002 пишет цитата: | Syntax: DrawRR( [ lFocus ][, nRow ][, nCol ][, nHeight ][, nWidth ] ; [, cWindowName ][, nCurve ] ) |
| Подумал речь идет о ф-ии в hmg lib HMG_DrawRR(...) Если только о примерах, тогда OK.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3325
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.08.20 08:51. Заголовок: PS Поправить забыл :..
PS Поправить забыл :SetDeleteMode( .T., .T., , {|obr| obr:Cargo:nRecnoDraw := 0, obr:DrawSelect() } )
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1767
Зарегистрирован: 11.02.10
|
|
Отправлено: 16.08.20 19:08. Заголовок: SergKis пишет: надо..
SergKis пишет: Добавил, конечно Благодарю за помощь
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3329
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.08.20 13:45. Заголовок: gfilatov2002 Поправ..
gfilatov2002 Поправьте METHOD GetDeltaLen( nCol, nStartCol, nMaxWidth, aColSizes ) CLASS TSBrowse Local nDeltaLen := 0 If ::lAdjColumn .and. nCol < Len( ::aColumns ) IF aColSizes[ nCol ] == NIL ; aColSizes[ nCol ] := 0 ENDIF IF aColSizes[ nCol+1 ] == NIL ; aColSizes[ nCol+1 ] := 0 ENDIF If ( nStartCol + aColSizes[ nCol ] + aColSizes[ nCol + 1 ] ) > nMaxWidth nDeltaLen := nMaxWidth - ( nStartCol + aColSizes[ nCol ] ) EndIf EndIf RETURN nDeltaLen
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1768
Зарегистрирован: 11.02.10
|
|
Отправлено: 20.08.20 14:04. Заголовок: SergKis пишет: Попр..
SergKis пишет: Сделал Благодарю за помощь
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6784
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.08.20 14:47. Заголовок: gfilatov2002 А можн..
gfilatov2002 А можно ещё поправить показ типов полей "=@T" ? Приходиться таскать функцию всегда при использовании таких полей, иначе обрезает эти поля. STATIC FUNCTION myPartWidthTsb( oBrw ) // поправить ширину колонок LOCAL oCol, hFont := oBrw:hFont // 1-cells font WITH OBJECT oBrw FOR EACH oCol IN :aColumns IF oCol:cFieldTyp $ "=@T" oCol:nWidth := GetTextWidth( Nil, REPL("9",24), hFont ) // 24 знака ENDIF NEXT END WITH RETURN Nil
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3330
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.08.20 16:33. Заголовок: Andrey пишет Подтве..
Andrey пишет [quote]` Подтверждаю, что так лучше, особенно, если исп. :nCellMarginLR := 1 METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse ... ElseIf cType $ "=@T" nSize := GetTextWidth( 0, Replicate( "9", 24 ), hFont ) Else
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3331
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.08.20 16:54. Заголовок: PS И добавить туда о..
PS И добавить туда обработку полей +, ^ ... If cType == "C" cPicture := "@K " + Replicate( 'X', aStru[ nE, 3 ] ) ElseIf cType == "N" cPicture := Replicate( '9', aStru[ nE, 3 ] ) If aStru[ nE, 4 ] > 0 cPicture := SubStr( cPicture, 1, aStru[ nE, 3 ]-aStru[ nE, 4 ] - 1 ) + '.' + Replicate( '9', aStru[ nE, 4 ] ) EndIf cPicture := "@K " + cPicture ElseIf cType $ "^+" cPicture := Replicate( '9', 10 ) EndIf ... ElseIf cType $ "=@T" nSize := GetTextWidth( 0, Replicate( "9", 24 ), hFont ) ElseIf cType $ "^+" nSize := GetTextWidth( 0, Replicate( "9", 10 ), hFont ) Else ... вопрос только в том хватит 10 знаков (особенно для версии) или сделать больше ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6785
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.08.20 17:21. Заголовок: А для "D" ну..
А для "D" нужно 11 знаков, если формат такой 99.99.9999 и 9 знаков для 99.99.99 Если поле N или D имеет короткое название ( типа NN , DC), то значения в колонках обрезаются. Нужно бы условие поставить.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3332
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.08.20 19:06. Заголовок: Andrey пишет Если по..
Andrey пишет цитата: | Если поле N или D имеет короткое название ( типа NN , DC), то значения в колонках обрезаются. |
| Для типа "D" можно поправить (METHOD LoadFields()) ... nAlign := iif( ::aJustify != Nil .and. Len( ::aJustify ) >= nE, ::aJustify[ nE ], ; iif( ( cAlias )->( ValType( FieldGet( nE ) ) ) == "N", 2, ; iif( ( cAlias )->( ValType( FieldGet( nE ) ) ) $ "DL", 1, 0 ) ) ) ... ElseIf cType == "D" cData := cValToChar( iif( Empty( cData ), Date(), cData ) ) nSize := Int( GetTextWidth( 0, cData +"BB", hFont ) ) + iif( lEditable, 30, 0 ) ElseIf cType == "M" ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1769
Зарегистрирован: 11.02.10
|
|
Отправлено: 20.08.20 20:59. Заголовок: SergKis пишет: можн..
SergKis пишет: цитата: | можно поправить (METHOD LoadFields()) |
| Добавил эти изменения
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3333
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.08.20 09:36. Заголовок: gfilatov2002 Добави..
gfilatov2002 Добавить бы METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse ... ATail( ::aColumns ):nFieldDec := aStru[ nE, 4 ] // 18.07.2018 ATail( ::aColumns ):oCellHead := TSBcell():New() ATail( ::aColumns ):oCellEnum := TSBcell():New() ATail( ::aColumns ):oCellFoot := TSBcell():New() ATail( ::aColumns ):oCell := TSBcell():New() ... METHOD AddColumn( oColumn ) CLASS TSBrowse ... AAdd( ::aColumns, oColumn ) ATail( ::aColumns ):oCellHead := TSBcell():New() ATail( ::aColumns ):oCellEnum := TSBcell():New() ATail( ::aColumns ):oCellFoot := TSBcell():New() ATail( ::aColumns ):oCell := TSBcell():New() If Len( ::aColSizes ) < Len( ::aColumns ) ... METHOD InsColumn( nPos, oColumn ) CLASS TSBrowse ... If oColumn:lDefineColumn oColumn:DefColor( Self, oColumn:aColors ) oColumn:DefFont ( Self ) EndIf oColumn:oCellHead := TSBcell():New() oColumn:oCellEnum := TSBcell():New() oColumn:oCellFoot := TSBcell():New() oColumn:oCell := TSBcell():New() Default nPos := 1 ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3334
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.08.20 09:54. Заголовок: PS лучше METHOD New(..
PS лучше METHOD New( cHeading, bData, cPicture, aColors, aAlign, nWidth, ; ... CLASS TSColumn ... ::lTotal := lTotal //V90 ::cName := cName ::oCellHead := TSBcell():New() ::oCellEnum := TSBcell():New() ::oCellFoot := TSBcell():New() ::oCell := TSBcell():New() ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1770
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.08.20 10:12. Заголовок: SergKis пишет: CLAS..
SergKis пишет: Добавил
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6797
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.08.20 18:16. Заголовок: Если поле "N"..
Если поле "N" или "C" имеет короткое название ( типа N1 , C12 ), то значения в колонках обрезаются. Вот как на картинке: У себя приходиться делать всегда так: STATIC FUNCTION myPartWidthTsb( oBrw ) // поправить ширину колонок LOCAL oCol, cType, hFont := oBrw:hFont // 1-cells font WITH OBJECT oBrw FOR EACH oCol IN :aColumns cType := oCol:cFieldTyp IF cType $ "=@T" oCol:nWidth := GetTextWidth( Nil, REPL("9",24), hFont ) // 24 знака ELSEIF cType == "D" oCol:nWidth := GetTextWidth( Nil, REPL("9",11), hFont ) ELSEIF cType == "N" .OR. cType == "C" // увеличим ширину колонки для коротких названий полей IF LEN(oCol:cName) < 5 oCol:nWidth := GetTextWidth( Nil, REPL("H", oCol:nFieldLen), hFont ) * 0.8 ENDIF ENDIF NEXT END WITH RETURN Nil Можно добавить это в класс Tsbrowse ? Или ещё как то по другому. И куда это добавить, я не знаю.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3341
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.08.20 19:03. Заголовок: Andrey Попробуй у с..
Andrey Попробуй у себя поправить METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse ... If nSize == Nil ... If cType == "C" cData := PadR( Trim( cData ), nSize+1 /* или 2 */, "B" ) nSize := GetTextWidth( 0, cData, hFont ) ElseIf cType == "N" ... У себя, к примеру я для "C" правку делаю, не разбираясь, если поле длина > 50 беру 50, т.е. писать все равно приходится IF o:cFieldTyp == "D" o:cPicture := "@D" ELSEIF o:cFieldTyp == "N" .and. o:nFieldLen < 10 o:nWidth += GetFontWidth("Normal", 2) ELSEIF o:cFieldTyp == "C" IF o:nFieldLen > 50 ; o:nWidth := o:ToWidth( 50 ) ELSE ; o:nWidth += GetFontWidth("Normal", 1) ENDIF ENDIF ...
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6798
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.08.20 19:48. Заголовок: SergKis пишет: Попр..
SergKis пишет: цитата: | Попробуй у себя поправить |
| Да у себя я сам добавлю к ширине колонок нужное ко-во. Хотелось бы что-бы ТСБ это умел делать автоматом.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3342
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.08.20 20:11. Заголовок: Andrey Так поправь,..
Andrey Так поправь, что написал (это же тсб текст), если поможет, можно править на постоянно. Пример то у тебя, на нем и проверь
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6800
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.08.20 20:31. Заголовок: SergKis пишет: Так ..
SergKis пишет: цитата: | Так поправь, что написал (это же тсб текст), если поможет, можно править на постоянно. |
| Не фига не работает... Попробовал исправить. Колонка в середине S9 (текстовая) - нормальная, а самый последний столбец в таблице F2 (текстовая) - срезается. Пример отправил тебе.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3343
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.08.20 22:12. Заголовок: Andrey пишет Пример ..
Andrey пишет Убрал виртуальные колонки и все колонки нормальные в размерах С вирт. колонками надо самому ставить размеры, как и было у тебя !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6802
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.08.20 08:09. Заголовок: SergKis пишет: Убра..
SergKis пишет: цитата: | Убрал виртуальные колонки и все колонки нормальные в размерах |
| Я тоже убрал. Но у меня режутся колонки с "=@T" и последняя текстовая колонка тоже режется. Числовые колонки нормально стали показываться. Может у меня старый h_tbrowse.prg ? Вот картинка: Колонки 23 и 25 (зеленые стрелочки) с типом [+] [^] может расширить до 6-8 знаков ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3344
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.08.20 09:07. Заголовок: Andrey пишет Может у..
Andrey пишет цитата: | Может у меня старый h_tbrowse.prg ? |
| Делал с твоим и сейчас положил в пример свой -> результат одинаковый, колонки не режутся. Твой пример тут https://TransFiles.ru/al858
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3345
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.08.20 09:16. Заголовок: PS h_tbrowse.prg нем..
PS h_tbrowse.prg немного отличается от того, который у Григория (method LoadFields с изменениями ранее), наверно, т.к. у меня добавлены еще к "N" "+" и "^". Но большого значения это не имеет
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6803
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.08.20 10:13. Заголовок: SergKis пишет: Дела..
SergKis пишет: цитата: | Делал с твоим и сейчас положил в пример свой -> результат одинаковый, колонки не режутся. Твой пример тут |
| Запускаю этот пример и колонки 24,26,27,28 - съедены ! Как такое может быть, у тебя нормально, а у меня нет ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3346
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.08.20 10:46. Заголовок: Andrey Сделай измен..
Andrey Сделай изменения STATIC FUNCTION myBrw1( nY, nX, nW, nH, aDatos, aFont, nBrw ) ... mySupHdTsb( oBrw1, aSupHd ) // SuperHeader //myEnumTsb( oBrw1 , 6+1 ) // ENUMERATOR по порядку :GetColumn("ID"):nWidth := (App.Object):W1 :GetColumn("VM"):nWidth := (App.Object):W1 :GetColumn("F1"):nWidth := (App.Object):W2 :GetColumn("F2"):nWidth := (App.Object):W2 :GetColumn("TS"):nWidth := Gjavascript:pst3('','','','[pre2]',' ');etFontWidth(aFont[1], 20) :GetColumn("IM"):nWidth := GetFontWidth(aFont[1], 20) :GetColumn("DT"):nWidth := GetFontWidth(aFont[1], 20) :GetColumn("TT"):nWidth := GetFontWidth(aFont[1], 20) mySet2Tsb( oBrw1 ) // настройки таблицы дополнительные ... STATIC FUNCTION myBrw2( nY, nX, nW, nH, aDatos, aFont, nBrw ) ... mySupHdTsb( oBrw2, aSupHd ) // SuperHeader //myEnumTsb( oBrw2 , 6+1) // ENUMERATOR по порядку :GetColumn("ID"):nWidth := (App.Object):W1 :GetColumn("VM"):nWidth := (App.Object):W1 :GetColumn("F1"):nWidth := (App.Object):W2 :GetColumn("F2"):nWidth := (App.Object):W2 :GetColumn("TS"):nWidth := GetFontWidth(aFont[1], 20) :GetColumn("IM"):nWidth := GetFontWidth(aFont[1], 20) :GetColumn("DT"):nWidth := GetFontWidth(aFont[1], 20) :GetColumn("TT"):nWidth := GetFontWidth(aFont[1], 20) mySet2Tsb( oBrw2 ) // настройки таблицы дополнительные ... ` Для Timestamp колонок это как в h_tbrowse.prg, можешь подобрать длину в символах не 20, а сколько надо у тебя Для ID,VM,F1,F2 ширина колонки от dlu задана для фонта SET FONT TO ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3347
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.08.20 10:51. Заголовок: Упс, сломалось что т..
Упс, сломалось что то для myBrw1. Исправить просто строки красным из myBrw2 перенести в myBrw1 они одинаковые
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1772
Зарегистрирован: 11.02.10
|
|
Отправлено: 28.08.20 12:05. Заголовок: Всем кому это интересно
Завершена подготовка новой сборки 20.08, которая будет опубликована на следующей неделе. Рассматриваю ее как финальную по причинам материального характера (что не удивительно в наше время ). Огромная благодарность Сергею Киселеву за все предложения и идеи по развитию библиотеки Благодарю за ваше внимание
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3348
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.08.20 13:54. Заголовок: Возможно, будет инте..
Возможно, будет интересно. Пример MDI интерфейса. В целом работает. Не пошел контрол TEXTBOX, возможно еще какие контролы, надо смотреть. Но работая ТОЛЬКО в окнах ChildMdi, без модальных можно многое делать. Пример тут https://TransFiles.ru/cnyt8 Собран с последними изменениями h_tbrowse.prg
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1773
Зарегистрирован: 11.02.10
|
|
Отправлено: 31.08.20 11:44. Заголовок: Всем кому это интересно
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1774
Зарегистрирован: 11.02.10
|
|
Отправлено: 01.09.20 20:46. Заголовок: Сделал "тихое..
Сделал " тихое" обновление сборки 20.08 Что нового: - заработала печать в примере \samples\Basic\RichEditBox
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1775
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.09.20 11:45. Заголовок: Всем кому это интересно
Выпустил 1-е обновление сборки 20.08 Что нового (на языке оригинала): Скрытый текст * Updated: Synchronized Extended HMG for compatibility with Official HMG: - New: added commands FINDTEXTDIALOG and REPLACETEXTDIALOG; - New: added in-line feature to the miniprint commands; - New: added RegistryRead() and RegistryWrite() pseudo-functions. Based upon a contribution of Claudio Soto <srvet/at/adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Applications\WordWriter) * New: 'Word Writer' sample. Borrowed from Official HMG distribution. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Applications\WordWriter) * Updated: 'RichEditBox' sample: - adapted RTF print feature. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\RichEditBox)
| Благодарю всех, кто поддерживал и поддерживает этот проект "на плаву"
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6809
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.09.20 17:58. Заголовок: В новой версии для Т..
В новой версии для ТСБ пропадает суперхидер, т.е. пустой суперхидер.
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|