On-line: Andrey, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
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;
- новые и обновленные старые примеры (как обычно ).




Спасибо: 5 
Профиль
Ответов - 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).

Что-то форум потерял предыдущую тему. Не понятно будет о чем речь идёт...

Спасибо: 0 
Профиль
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)
...



Спасибо: 0 
Профиль
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 }

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1660
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.02.20 10:58. Заголовок: Всем кому это интересно


Снова обновил сборку 20.01 (Update 7) с учетом последних наработок

Базовый дистрибутив для BCC 5.8.2 находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-20.01-setup.exe

Обновил также архив для бесплатного Embarcadero C++ 10.1 Berlin compiler по адресу

http://hmgextended.com/files/CONTRIB/hmg2001_bcc101.exe

Благодарю за ваше внимание

Спасибо: 0 
Профиль
kkg



Пост N: 21
Зарегистрирован: 29.11.19
ссылка на сообщение  Отправлено: 01.03.20 14:54. Заголовок: Из замеченного, если..


Из замеченного, если в версии bcc101 подменить библиотеки hblang.lib hbcpage.lib от BCC 5.8.2
то установка русского языка отрабатывает нормально, включая обработку ошибок.
На некоторых версиях ОС проявляется ошибка ilink32, "лечение" описано тут
click here
может кому то пригодится.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1661
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.03.20 11:42. Заголовок: Всем кому это интересно


Завершена подготовка новой сборки 20.03, которая будет опубликована на следующей неделе.

Кратко, что нового:
Скрытый текст
Благодарю за ваше внимание

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




Пост N: 6604
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.03.20 19:41. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
которая будет опубликована на следующей неделе.


Ждем с нетерпением !

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1662
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.03.20 20:35. Заголовок: Andrey пишет: Ждем ..


Andrey пишет:

 цитата:
Ждем с нетерпением


Завтра буду готовить финальную версию инсталлятора для этой сборки

Спасибо: 0 
Профиль
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 лет с момента начала разработки этой версии библиотеки

Выпуск последующих обновлений будет зависеть от активности и поддержки со стороны пользователей ее разработки.

Отдельная благодарность - Андрею Верченко, Диме (админу этого форума) и Саше Савову из Болгарии за их материальную поддержку

Спасибо: 0 
Профиль
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.

Проблема была указана на английском форуме библиотеки.
Если вы не используете данную возможность в своей программе, то это обновление является необязательным.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1675
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.04.20 14:54. Заголовок: Всем кому это интересно


Подготовил 1-й релиз-кандидат для новой сборки 20.04 со следующим списком изменений (кратко):
Скрытый текст

Благодарю за ваше внимание

Спасибо: 0 
Профиль
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 Скрытый текст


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




Пост N: 3130
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.04.20 16:49. Заголовок: PS Для колонки нумер..


PS
Для колонки нумерации ARRAYNO надо поправить PICTURE '9999999'
как у ORDKEYNO, забыл это сделать.

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




Пост N: 3131
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.04.20 16:52. Заголовок: PS Возможно, колонки..


PS
Возможно, колонки нумерации надо назвать одинаково ?
Названия колонок оставил, как использую сам.

Спасибо: 0 
Профиль
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



Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1676
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.04.20 20:25. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще можно добавить


Добавил все ваши предложения без изменений, пример работает нормально.
Благодарю за помощь

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1678
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.04.20 10:48. Заголовок: Всем кому это интересно


Подготовил 2-й релиз-кандидат для новой сборки 20.04.
Что нового:
Скрытый текст
Благодарю за ваше внимание

Спасибо: 0 
Профиль
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 в аналогичной ситуации все отрабатывает нормально.

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 7181
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.04.20 08:05. Заголовок: alex_II Глянь приме..


alex_II
Глянь пример C:\MiniGUI\SAMPLES\Advanced\Tsb_config\
и функцию FUNCTION MyChangeBrowse
Вроде все работает и с мышкой

Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1682
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.04.20 09:57. Заголовок: SergKis пишет: чуть..


SergKis пишет:

 цитата:
чуть поправить ? h_objmisc.prg


OK

Спасибо: 0 
Профиль
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 )

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1683
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.04.20 12:53. Заголовок: SergKis пишет: Може..


SergKis пишет:

 цитата:
Может есть смысл добавить


Благодарю за предложение
Это уже идея для новой сборки...
А подготовка апрельской сборки уже завершена, и она будет опубликована завтра

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




Пост N: 3147
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.04.20 12:56. Заголовок: PS Ошибся. Надо ..


PS
Ошибся. Надо
 
IF Empty( i )

_PopEventInfo()

ELSE


Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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()


Благодарю за помощь

Спасибо: 0 
Профиль
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)

доступ к которым открыт для всех, кто поддержал выпуск этой сборки материально.

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 7184
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.04.20 10:14. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
доступ к которым открыт для всех, кто поддержал выпуск этой сборки материально.


Там Forbidden.......подождем пока отвалится

ЗЫ
Социнжиниринг помог добраться куда надо :)

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




Пост N: 6640
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.04.20 11:39. Заголовок: Отличная новость ! ..


Отличная новость !
А Микрософтный компилятор где ?
Я уже с ним вожусь потихоньку. Мигрировать на него собираюсь.

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




Пост N: 3149
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.04.20 12:59. Заголовок: gfilatov2002 пишет В..


gfilatov2002 пишет
 цитата:
Выполнил предложенные изменения в текущей сборке,


Вариант _SetThisFormInfo() остался старый в последней сборке

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1686
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.04.20 13:03. Заголовок: SergKis пишет: оста..


SergKis пишет:

 цитата:
остался старый в последней сборке


Да, решил, что это подождет до следующего релиза
Добавил также новую команду:

 цитата:
#xtranslate SET WINDOW THIS TO [<w>] => _SetThisFormInfo( [<w>] )

Еще раз благодарю за Ваши идеи

Спасибо: 0 
Профиль
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
...


Спасибо все работает

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1687
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.04.20 20:17. Заголовок: SergKis пишет: все ..


SergKis пишет:

 цитата:
все работает


Благодарю за подтверждение

Спасибо: 0 
Профиль
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)



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




Пост N: 6641
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.05.20 16:45. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Свежий архив для этого компилятора положил в папку PRIVATE на сайте библиотеки (имя архива не изменял).


Спасибо БОЛЬШОЕ, но не могу найти где брать.
Предыдущие ссылки не работают.
Если не трудно, прошу отправить ссылки мне на почту.


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1689
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.05.20 18:03. Заголовок: Andrey пишет: прошу..


Andrey пишет:

 цитата:
прошу отправить ссылки мне на почту


Отправил ссылку по почте

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




Пост N: 6642
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.05.20 18:23. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Отправил ссылку по почте


Спасибо БОЛЬШОЕ !

Спасибо: 0 
Профиль
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 ) )
...


Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1690
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.05.20 14:30. Заголовок: SergKis пишет: лучш..


SergKis пишет:

 цитата:
лучше сделать тут


Добавил, конечно.
Благодарю за помощь

Спасибо: 0 
Профиль
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 возвращает, а то прога валится.

Спасибо: 0 
Профиль
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() } ) )


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




Пост N: 6645
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.05.20 15:13. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно так поправить i_ini.ch


Поправил, теперь ошибки нет и результата в _MsgLog.txt нет.
Будешь гадать почему нет
    ?v aHead


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




Пост N: 3161
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.05.20 15:34. Заголовок: Andrey пишет теперь ..


Andrey пишет
 цитата:
теперь ошибки нет и результата в _MsgLog.txt нет.


Так применяй правильно
? "aSize =", aSize
?v aSize
Ошибки нет и занятого места тоже в лог файле
aSize = NIL

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




Пост N: 6646
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.05.20 16:13. Заголовок: SergKis пишет: Так ..


SergKis пишет:

 цитата:
Так применяй правильно


Понял !

Спасибо: 0 
Профиль
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 )
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1691
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.05.20 12:27. Заголовок: SergKis пишет: чуто..


SergKis пишет:

 цитата:
чуток подправим


Поправил, конечно.
Благодарю за помощь

Спасибо: 0 
Профиль
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 )
будет первоначальный алгоритм
При отработке ф-ии будет нумерация только видимых колонок
У Андрея есть пример, если что ...

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1692
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.05.20 21:30. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение по ENUMERATOR для нумерации только видимых колонок.


Принято, конечно.

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




Пост N: 3168
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.20 12:35. Заголовок: gfilatov2002 Сделал..


gfilatov2002
Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg) Скрытый текст

Суть изменений получить все данные, которые получаются в :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

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1549
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.20 12:41. Заголовок: Эти изменения отключ..


Эти изменения отключают или включают прорисовку?

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




Пост N: 3169
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.20 12:44. Заголовок: Отключают, т.е. при ..


Отключают, т.е. при :lDrawLine == .F. нет вывода на экран

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




Пост N: 3170
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.20 12:48. Заголовок: PS :aDrawCols - это ..


PS
:aDrawCols - это массив номеров колонок, которые на рисовались окне, формируется массив в :DrawLine()

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




Пост N: 3171
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.20 12:50. Заголовок: PSформируется массив..


PS
 цитата:
формируется массив в :DrawLine()


Пальцы на автомате, набрали, надо не :DrawLine(), а DrawSelect()

Спасибо: 0 
Профиль
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))


пробежимся по всем строкам и столбцам и прописовки не будет

Спасибо: 0 
Профиль
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, т.е. надо используем, нет то как раньше

Спасибо: 0 
Профиль
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() и пр) .


В целом , для демонстрашки экспорта доработка хорошая, практически не знаю зачем

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1693
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.20 14:17. Заголовок: SergKis пишет: Сдел..


SergKis пишет:

 цитата:
Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg)


Обязательно проанализирую и включу эти изменения в новую сборку (с учетом Вашего мнения и мнения Игоря, как главных разработчиков дополнений к TSBrowse).
Благодарю за Вашу помощь

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




Пост N: 3173
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.20 14:19. Заголовок: Haz пишет практическ..


Haz пишет
 цитата:
практически не знаю зачем


Согласен, много случаев, особенно старых кодов, где это не применить, да и не нужно.
А вывести в Excel таблицу (широкую, но простую), с цветными колонками, для которой печати нет (морока организации листов в разрезе горизонтали) есть передача в Excel и если захотят, будут распечатки делать из него. Условие сохранение цветности.
С применением hbxmlxls.lib чтобы передать цветность это тоже пригодится.

 цитата:
Бровс умеет работать только с текущей записью , зачем мне тормозной перебор


Можно не перебирать, а выполнить :DrawLine( , .F. ) и для тек. записи будет в колонках oCol:oCell заполнен

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1552
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.20 14:32. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно не перебирать, а выполнить :DrawLine( , .F. ) и для тек. записи будет в колонках oCol:oCell заполнен



Как дальнейшее развитие oCell имеет смысл

Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1694
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.20 15:07. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
включу эти изменения в новую сборку


Выполнил все предложенные изменения кода, пересобрал пример demo5 - экспорт по клавише F8 работает аналогично готовому экзешнику

Спасибо: 0 
Профиль
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.
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1695
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.20 15:39. Заголовок: SergKis пишет: надо..


SergKis пишет:

 цитата:
надо убрать строки


Убрал, конечно

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




Пост N: 6651
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.20 16:11. Заголовок: Haz пишет: 3. Как у..


Haz пишет:

 цитата:
3. Как уже писал ранее ,при помощи Андрею в его TSB_экспортах - считаю такие экспорты (средствами бровса) красивыми, но бесперспективными с точки зрения временных затрат
Бровс умеет работать только с текущей записью , зачем мне тормозной перебор если я могу взять весь массив данных сразу и делать с ним что хочу (aEval, dbEval, SQLExecute() и пр) .
В целом , для демонстрашки экспорта доработка хорошая, практически не знаю зачем



Если бы такие красивые отчеты нужны были каждый день, то согласен, делал бы НЕ через ОЛЮ.
А так раз в месяц, а то и три нужен красивый отчёт начальству.
Не буду я тратить время на это, пускай 20 минут ждут, хотя у меня быстрей проходит.
Есть готовая фишка в МиниГуи - красивый экспорт, пускай работает.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1696
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.20 17:07. Заголовок: Всем кому это интересно


Подготовил 2-ю бету для новой сборки 20.05.
Что нового
Скрытый текст
Если заметили неточности в этом описании - пишите, исправлю...

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




Пост N: 6652
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.20 18:13. Заголовок: А нельзя в новой вер..


А нельзя в новой версии сделать правильное отображение символьных полей при задании центровки DT_CENTER ?
Не работает центровка сейчас !
Чтобы заработало, нужно шаманство делать, благо без бубна...

Спасибо: 0 
Профиль
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) }

Спасибо: 0 
Профиль
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, текста спецхидер

Вот результат:


Спасибо: 0 
Профиль
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 ) // настройки таблицы


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




Пост N: 6654
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.20 19:39. Заголовок: SergKis пишет: Как ..


SergKis пишет:

 цитата:
Как он может работать, если цвета ставишь на него, раньше, чем создаешь SuperHeader


Ну вот так и бывает...

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1553
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.20 23:51. Заголовок: Andrey пишет: Не бу..


Andrey пишет:

 цитата:
Не буду я тратить время на это


Каждому своё. Я лучше один раз потрачу тк мне неприемлемо когда отчёта нужно ожидать больше нескольких секунд.
Что касается "пусть будет", то я и не говорил что эти доработки нужно убрать. Я говорил только о том, что для серьёзных объёмов есть другой инструмент, который в отличии от кривого Ole экспорта работает всегда и позволяет любые цвета и шрифт.

Спасибо: 0 
Профиль
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 Скрытый текст

По поводу
 цитата:
- 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.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1697
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.05.20 16:21. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение по hmg_alert(), AlertInfo() и др.
...
Добавил "быстрого" доступа к элементам тсб, SuperHeader, Header, SpecHd, DrawLine и Footer.


Все правки приняты - хорошая работа.
Благодарю за помощь

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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



Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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" )
...


Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1699
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.05.20 14:13. Заголовок: SergKis пишет: Прав..


SergKis пишет:

 цитата:
Правка


OK

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




Пост N: 3185
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.05.20 17:16. Заголовок: gfilatov2002 По HMG..


gfilatov2002
По HMG_ALert(...), добавить static переменную для кол-сток, сейчас стоит константа 20 Скрытый текст

Что бы управлять высотой окна

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1700
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.05.20 18:59. Заголовок: SergKis пишет: доба..


SergKis пишет:

 цитата:
добавить static переменную...
Что бы управлять высотой окна


Добавил, конечно. Но переименовал функцию в HMG_Alert_MaxLines()
Благодарю за помощь

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
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 не должны приводить к изменению вида обычных окон (совместимость снизу вверх)

Спасибо: 0 
Профиль
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
...


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




Пост N: 3190
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.05.20 15:31. Заголовок: PS В примере demo7.p..


PS
В примере demo7.prg ставим
HMG_Alert_MaxLines(23, .T.)

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1702
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.05.20 15:59. Заголовок: SergKis пишет: таки..


SergKis пишет:

 цитата:
такие поправки помогут


Да, с этими изменениями примеры не отличаются

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1703
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.05.20 17:09. Заголовок: SergKis пишет: есть..


SergKis пишет:

 цитата:
есть смысл добавить


Спасибо
Да, я тоже вышел на этот коэффициент 0,7

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




Пост N: 3193
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.05.20 17:47. Заголовок: gfilatov2002 пишет я..


gfilatov2002 пишет
 цитата:
я тоже вышел на этот коэффициент 0,7


Ширины может не хватить, если исп. много заглавных букв типа W,B
Можно игнорировать ситуацию или ввести static переменную для коэф. 0.7 или установленного в переменную

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1704
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.05.20 19:37. Заголовок: Убрал статик-перемен..


Убрал статик-переменную s_lMaxWidth, т.к. теперь в ней нет необходимости

Спасибо: 0 
Профиль
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
...


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




Пост N: 3195
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.05.20 11:50. Заголовок: PS В примере BASIC&#..


PS
В примере BASIC\WALERT_2 окно со списком не выходит за пределы окна при фонте SIZE 16 и больше
В примере demo7 установка большего фонта или HMG_Alert_MaxLines(35) - все в пределах окна

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1705
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.05.20 13:10. Заголовок: SergKis пишет: конт..


SergKis пишет:

 цитата:
контроль выхода за пределы экрана по height


Добавил, контрольный пример отработал нормально.
Благодарю за помощь

Спасибо: 0 
Профиль
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, хотя все есть, вроде.
Если кто помнит, там все файлы есть или надо еще что-то скачивать? Или просто пути там не так прописаны?

Хочется вообще посмотреть на это, как на демо, понять нужность или не ненужность для себя.
А с поддержкой увы, ранее хотел говорить с директором о развитии, а тут с этим вирусом самим бы выжить.

Спасибо: 0 
Профиль
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.

Спасибо: 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

...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1707
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.05.20 11:32. Заголовок: SergKis пишет: Прав..


SergKis пишет:

 цитата:
Правки небольшие


Благодарю за помощь

Спасибо: 0 
Профиль
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 }


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1708
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.05.20 14:41. Заголовок: SergKis пишет: Доба..


SergKis пишет:

 цитата:
Добавьте ф-ю для получения hmg имени фонта от handle


Отдельная функция не нужна, поскольку уже есть более общая функция GetFontParam()
Например, можно записать так

 цитата:
#xtranslate HMG_FontName( <hFont> ) ;
=> ;
GetFontParam( <hFont> )\[ 1 ]



Спасибо: 0 
Профиль
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 фонта, надо имя регистрации.

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




Пост N: 3207
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.05.20 15:01. Заголовок: PS или добавить в во..


PS
или добавить в возврат GetFontParam( FontHandle ) имя регистрации и тогда можно сделать #xtranslate HMG_FontName( <hFont> )...

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1709
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.05.20 15:08. Заголовок: SergKis пишет: доба..


SergKis пишет:

 цитата:
добавить в возврат GetFontParam( FontHandle ) имя регистрации


Именно это хотел предложить (добавить 10-й параметр).

 цитата:
#xtranslate HMG_FontName( <hFont> ) ;
=> ;
GetFontParam( <hFont> )\[ 10 ]



Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1710
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.05.20 11:44. Заголовок: SergKis пишет: Надо..


SergKis пишет:

 цитата:
Надо менять


Добавил все предложенные правки.
Благодарю за помощь

Спасибо: 0 
Профиль
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().

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1711
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.05.20 12:04. Заголовок: SergKis пишет: Это ..


SergKis пишет:

 цитата:
Это надо отметить для себя..
почему не было Footers


Да, это известная проблема, подобное поведение происходит и при двойном клике по иконке приложения в трее
Убрал предложенную правку для METHOD LDblClick

Спасибо: 0 
Профиль
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 )


Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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 )


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1713
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.05.20 12:23. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще


OK

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1714
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.05.20 10:49. Заголовок: Всем кому это интересно :)


Завершена подготовка новой сборки 20.05, которая будет опубликована на следующей неделе, со следующим списком изменений (кратко):
Скрытый текст

Также выполнена адаптация текущей сборки для свежих версий Си-компиляторов:

- 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).

Благодарю за ваше внимание

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




Пост N: 6707
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.05.20 14:10. Заголовок: А можно в HMG_Alert(..


А можно в HMG_Alert() при выводе даже помещаемых данных, сразу выводить их в EDITBOX ?
Удобно вывести данные, посмотреть и если нужно, то скопировать ЧАСТЬ или ЦЕЛИКОМ в буфер обмена.
В EDITBOX это удобно делать.

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




Пост N: 3237
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.05.20 14:37. Заголовок: Andrey А добавить п..


Andrey
А добавить пустых строк AlertInfo(cMsg+repl(" ;", 20), "INFO")

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1715
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.05.20 14:38. Заголовок: Andrey пишет: сразу..


Andrey пишет:

 цитата:
сразу выводить их в EDITBOX ?


Да, это будет возможно в сборке 20.05, если перед вызовом функции HMG_Alert() написать

 цитата:
HMG_Alert_MaxLines( 1 )


тогда будет вывод всех строк в EDITBOX , а на экране будет показана только одна строка.



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




Пост N: 3238
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.05.20 14:44. Заголовок: gfilatov2002 Будут ..


gfilatov2002
Будут ли изменения по фонтам из темы http://clipper.borda.ru/?1-1-0-00000554-000-80-0-1590177610

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1716
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.05.20 14:48. Заголовок: SergKis пишет: Буду..


SergKis пишет:

 цитата:
Будут ли изменения по фонтам


Да, конечно

Спасибо: 0 
Профиль
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() ?

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1717
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.05.20 17:04. Заголовок: Andrey пишет: Эта н..


Andrey пишет:

 цитата:
Эта настройка глобальная или только для одного вызова


Глобальная

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




Пост N: 6709
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.05.20 17:15. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Глобальная


Не очень удобно будет кодить.
Нужно для разового вызова.
Лучше бы сделать как Сергей предлагает.

Спасибо: 0 
Профиль
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 )


Спасибо: 0 
Профиль
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
}


Спасибо: 0 
Профиль
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
}


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




Пост N: 6711
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.05.20 18:59. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Тогда можно использовать таким образом:


Хорошо ! Спасибо !
Только если я в коде промахнулся и строчек больше одной - то нужно показывать ВСЕ строчки !
Т.е. задал 1 строчку, значение вывожу 5 строчек, то должны показываться все 5 строчек.

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




Пост N: 3243
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.05.20 19:39. Заголовок: Andrey пишет Т.е. за..


Andrey пишет
 цитата:
Т.е. задал 1 строчку, значение вывожу 5 строчек, то должны показываться все 5 строчек.


Посмотри предыдущий пост, такой код сделает как ты хочешь, т.е. от кол-ва строк в тексте, т.е. у меня _MsgLog.lst 12 строк, что бы их всех сразу увидеть и написан код выше

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




Пост N: 6712
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.05.20 19:52. Заголовок: SergKis пишет: Пос..


SergKis пишет:

 цитата:

Посмотри предыдущий пост, такой код сделает как ты хочешь



Да не успел прочитать. Понял сейчас !

Спасибо: 0 
Профиль
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



Спасибо: 1 
Профиль
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


Спасибо: 0 
Профиль
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)'
...


Спасибо: 0 
Профиль
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
...


Спасибо: 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 от размера фонта


Да, это интересное предложение, но уже для следующей сборки.
Благодарю за оперативную помощь

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1721
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.05.20 17:04. Заголовок: SergKis пишет: Сбор..


SergKis пишет:

 цитата:
Сборка файлом MakeAllMiniguiLibs.bat не проходит


Уже поправил в первом update для сборки 20.05, который выйдет завтра

SergKis пишет:

 цитата:
можно добавить таблицу процентов scale от размера фонта.


Добавил

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1722
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.05.20 10:20. Заголовок: Всем кому это интересно :)


Выложил первое обновление для сборки 20.05 (Update 1) с учетом последних наработок

Базовый дистрибутив для BCC 5.8.2 находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-20.05-setup.exe

Обновил также архив для бесплатного Embarcadero C++ 10.2 'Tokyo' compiler по адресу

http://hmgextended.com/files/CONTRIB/hmg2005_bcc102.exe

Благодарю за ваше внимание

P.S. Благодарю Сашу Савова за поддержку проекта

Спасибо: 0 
Профиль
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

Или это можно уже сейчас получать в этом классе ?

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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 ''



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




Пост N: 6715
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.05.20 19:05. Заголовок: SergKis пишет: А на..


SergKis пишет:

 цитата:
А на подумать можно о сообщении ?


Всю думалку заказчик сломал. Мозги совсем не работают...
СПАСИБО !

Спасибо: 0 
Профиль
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


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




Пост N: 3251
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.05.20 21:16. Заголовок: Andrey пишет Можно п..


Andrey пишет
 цитата:
Можно получить формат колонки для вывода в Эксель, т.е. PICTURE колонки ?


cPict := oCol:cPicture

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




Пост N: 6717
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.05.20 23:42. Заголовок: СПАСИБО ! :sm36:..


СПАСИБО !

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1723
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.05.20 22:04. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение добавить


OK, добавлю во 2-е обновление сборки 20.05
Благодарю за помощь

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1725
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.06.20 09:55. Заголовок: Выложил обновление д..


Выложил обновление для сборки 20.05 (Update 2) с учетом последних наработок

Базовый дистрибутив для BCC 5.8.2 находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-20.05-setup.exe

Благодарю за ваше внимание

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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 )


Спасибо: 0 
Профиль
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 )



Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1726
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 07.06.20 19:39. Заголовок: SergKis пишет: логи..


SergKis пишет:

 цитата:
логичнее сразу сделать
...
Правка закраски фантомной колонки


Все правки приняты.
Благодарю за помощь

Спасибо: 0 
Профиль
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(). У себя сделал Скрытый текст


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




Пост N: 6721
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.06.20 08:19. Заголовок: Привет всем. Григор..


Привет всем.

Григорий !
Удаление записи в методе :SetDeleteMode( .T., .T. ) - запрос идет через MsgYesNo()
Поменять на AlertYesNo() - можно ? Или переключатель сделать какой то ?
А то при удалении/вставки разные окна. Как то не то.

Спасибо: 0 
Профиль
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 и весь список ф-й, методов с поиском перед глазами

Спасибо: 0 
Профиль
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 ] )


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 7200
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.06.20 15:07. Заголовок: Andrey пишет: Посмо..


Andrey пишет:

 цитата:
Посмотрел


Не там смотрел а по вопросу можно хоть чёрта лысого туда сунуть

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




Пост N: 3259
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.06.20 15:14. Заголовок: Andrey пишет Посмотр..


Andrey пишет
 цитата:
Посмотрел.
Нет такого - поменять MsgYesNo() на AlertYesNo() !


"В огороде бузина, а в Киеве — дядька"
Говорили о :SetDeleteMode(), а унесло куда то ... в сторону. Смотри :SetDeleteMode(...)

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




Пост N: 6723
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.06.20 15:25. Заголовок: Вспомнил, как делал ..


Вспомнил, как делал раньше. Только запрос не делал, из-за этого и непонятно было как делать.
 
bDelete := { | nAt, oBrw | ItogoNN(oBrw) }
oBrw1:SetDeleteMode( .T., .F., bDelete ) // здесь включаем клавишу DEL !!!


Спасибо: 0 
Профиль
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()

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




Пост N: 3260
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.06.20 19:50. Заголовок: gfilatov2002 :sm36..


gfilatov2002
Спасибо, упустил.

Спасибо: 0 
Профиль
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", ;
"Восстановить", "Удалить")+" запись в таблице ?", "Подтверждение") } )

Спасибо: 0 
Профиль
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
*/

т.е. перенести этот код ниже, чтобы учитывать восстановление записи также.
Сделал, конечно.
Благодарю за помощь

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1729
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.06.20 12:15. Заголовок: Всем кому это интересно


Подготовил 5-ю бету для новой сборки 20.06 со следующим списком изменений:
Скрытый текст

Благодарю за ваше внимание

Спасибо: 0 
Профиль
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() )


Благодарю за ваше внимание

Спасибо: 0 
Профиль
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", ... )


Спасибо: 0 
Профиль
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

так что можно использовать числа вместо имен

Спасибо: 0 
Профиль
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"
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1732
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.06.20 20:47. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно в сервер примера LetoDbf внести небольшие изменения


Пересобрал сервер с этими изменениями, все работает нормально.
Благодарю за помощь

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1733
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.06.20 09:47. Заголовок: Всем кому это интересно


Опубликована новая сборка 20.06 для BCC 5.8.2 и компиляторов Harbour и xHarbour.

Базовый дистрибутив находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-20.06-setup.exe

Добавил также архив для бесплатного Embarcadero C++ 10.2 'Tokyo' compiler

http://hmgextended.com/files/CONTRIB/hmg2003_bcc102.exe

Огромная благодарность Сергею Киселеву за помощь при подготовке этой сборки

Для частного использования подготовлены также два дистрибутива, основанные на компиляторе MinGW GNU C версии 10.1.1.

Благодарю за ваше внимание

Спасибо: 2 
Профиль
gfilatov2002
moderator




Пост N: 1734
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.07.20 10:24. Заголовок: Всем кому это интересно


Выложил обновление для сборки 20.06 (Update 1) с учетом последних исправлений

Базовый дистрибутив для BCC 5.8.2 находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-20.06-setup.exe

Благодарю за ваше внимание

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




Пост N: 6739
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.07.20 18:51. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Выложил обновление для сборки 20.06 (Update 1) с учетом последних исправлений


Пере собрал свои проги ! Полёт нормальный !

Можно команду SET MULTIPLE OFF WARNING сделать через AlertStop() ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1568
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.07.20 19:04. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно команду SET MULTIPLE OFF WARNING сделать через AlertStop() ?

не надо. Или стандарт или с выбором куда выводить. Дизайн AlertStop() не к любому интерфейсу по фейсу
Ps.. Кому нужно будет, могут команду переопределить

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




Пост N: 6740
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.07.20 20:22. Заголовок: Haz пишет: Кому нуж..


Haz пишет:

 цитата:
Кому нужно будет, могут команду переопределить


А как ?
Писать свою функцию не хочется.
Можно переключатель сделать в стандартной библиотеке ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1569
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.07.20 20:29. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как ?
Писать свою функцию не хочется.

зачем писать свою. Посмотри как в ch команда транслируется и замени для себя msgstop() на что хочешь.

Спасибо: 0 
Профиль
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.

Исправить в коде это можно ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1570
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.07.20 22:22. Заголовок: Andrey пишет: Испра..


Andrey пишет:

 цитата:
Исправить в коде это можно ?


Андрей, конечно можно исправить. Напиши Григорию обоснованное исправление и он точно скажет тебе спасибо.
Из твоей отладки я вижу, что по условию выдаст пустую строку. Кто и зачем это условие поставил я не задумывался. В принципе исходник простой, разобраться не сложно.

Спасибо: 0 
Профиль
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


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


Пост N: 840
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 06.07.20 18:56. Заголовок: Тест идет, а реальна..


Тест идет, а реальная то же вываливается с ошибкой
 цитата:
Error BASE/1132 Bound error: array access

, но в других местах.
Я её и раньше проверял - никогда она нормально не работала.

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




Пост N: 6743
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.07.20 19:24. Заголовок: Печально... :sm66:..


Печально...

Спасибо: 0 
Профиль
rvu





Пост N: 257
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 07.07.20 05:17. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Добавил также архив для бесплатного Embarcadero C++ 10.2 'Tokyo' compiler

http://hmgextended.com/files/CONTRIB/hmg2003_bcc102.exe



Видимо, ссылка неправильная. Скорее всего должно быть http://hmgextended.com/files/CONTRIB/hmg2006_bcc102.exe

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1735
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.07.20 10:55. Заголовок: Выложил обновление д..


Выложил обновление для сборки 20.06 (Update 2) с учетом последних наработок

Базовый дистрибутив для BCC 5.8.2 находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-20.06-setup.exe

Благодарю за ваше внимание

Спасибо: 0 
Профиль
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

...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1736
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.07.20 09:38. Заголовок: SergKis пишет: Прав..


SergKis пишет:

 цитата:
Правка небольшая


OK

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




Пост N: 6747
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.07.20 17:19. Заголовок: SergKis пишет: Прав..


SergKis пишет:

 цитата:
Правка небольшая
METHOD Enabled( lEnab ) CLASS TSBrowse



А курсор активный серым цветом можно сразу сделать в этом методе ?
Было бы удобней так.

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1573
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.07.20 17:34. Заголовок: Andrey пишет: А кур..


Andrey пишет:

 цитата:
А курсор активный серым цветом можно сразу сделать в этом методе ?
Было бы удобней так.

курсор разный бывает. Я использую только рамочный, чтоб не терять подсветку ячеек ( обязательные поля и пр). И переключение с рамки на серый лайтбар будет не эстетично 😎

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




Пост N: 3281
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.07.20 18:04. Заголовок: Haz пишет Я использу..


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


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

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1574
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.07.20 22:00. Заголовок: SergKis пишет: Не т..


SergKis пишет:

 цитата:
Не только не эстетично,

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

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




Пост N: 3282
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.07.20 22:21. Заголовок: Haz пишет я о том же..


Haz пишет
 цитата:
я о том же ... Мне пока проще вместо :enabled()


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

Спасибо: 0 
Профиль
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()

ЗЗЫ проверил - криво работает преобразование в грей, нужен алгоритм другой

Спасибо: 0 
Профиль
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 }


и получил все серенькое , значит идея жива

Спасибо: 0 
Профиль
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() на это


Что то не нашел такую ф-ю в примерах. О каком примере речь ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1577
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.07.20 16:27. Заголовок: SergKis пишет: На ..


SergKis пишет:

 цитата:
На мой взгляд, то что есть достаточно, а красить в серый, зеленый, синий, ... это уже как кому хочется, варианты есть.


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

живет там.

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




Пост N: 3284
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.20 16:48. Заголовок: Haz пишет Просто инт..


Haz пишет
 цитата:
Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов.


Большой разницы не вижу, делать как в :Enabled() с сохранением и восстановлением или через переменную предложенную, т.к. это надо проделывать в :DrawSuper(), :DrawHeader() (внутри нее :lDarawSpcHd, :lDrawFooter), :DrawLine(), DrawSelect() и учесть в последнем отрицательные цвета
 цитата:

Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов. Попробовал функцию конвертации цвета в серый- работает.


Ф-я работает А пример искал в Advanced

Спасибо: 0 
Профиль
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 }


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1578
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.07.20 22:43. Заголовок: Andrey пишет: давно..


Andrey пишет:

 цитата:
давно использую свою функцию ОТДЕЛЬНУЮ для этого.

Речь не об этом. Андрей , то что ты предлагаешь, это поверх окна бровса открывать полупрозрачное в размер, как делают скринлокеры. Несколько лет назад с Димой попробовали это делать. Я делал тень окна, открывал полупрозрачное под окном и со смещением. Минусов больше чем плюсов. Во первых не на всех операционках корректно работало ( на каком-то вин сервере не сработала). Во вторых , по кнопкам альт-тав и пр идёт переключение .
Или твой пример не об этом этом?

Спасибо: 0 
Профиль
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

Вопрос надо ли ?

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




Пост N: 6757
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.07.20 16:41. Заголовок: SergKis пишет: Може..


SergKis пишет:

 цитата:
Может выложишь, т.к. в примерах hmg ее нет. Будет понятнее.


Вот - https://cloud.mail.ru/public/2PS7/4oMjm4KTR

Спасибо: 0 
Профиль
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, с ним заработало !

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1739
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.07.20 20:34. Заголовок: SergKis пишет: If !..


SergKis пишет:

 цитата:
If ! Empty( ::aColumns ) .and. empty( hFont )


Ok
Благодарю за помощь

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1579
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.07.20 21:18. Заголовок: SergKis пишет: Вопр..


SergKis пишет:

 цитата:
Вопрос надо ли ?

не надо. 😎 это была так скажем идея интересующимся. Не стоит перегружать объект редко используемым функционалом. Tsb и так скоро будет перегружен тем, что используется редко. Главная беда tsb это не отсутствие функционала, его можно дописать. Главная беда это тормозной вывод на экран, отсутствие буферизации и пр. Если вверх/вниз еще можно скролл окна использовать, вправо/влево все в прорисовке по ячейкам. Раз сто смотрел код , из мыслей как сделать оптимальнее только скролл окна и прорисовка появившейся колонки . но пока или руки не дошли или текучка так давит, что уже не до рук

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1740
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.07.20 09:50. Заголовок: Всем кому это интересно


Выложил обновление для сборки 20.06 (Update 3) с учетом последних исправлений

Базовый дистрибутив для BCC 5.8.2 находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-20.06-setup.exe

Благодарю за ваше внимание

Спасибо: 0 
Профиль
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)

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




Пост N: 6772
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.07.20 10:37. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
в этом обновлении переработана поддержка графических файлов


А в чём это заключается ?

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 7220
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.07.20 10:40. Заголовок: Andrey пишет: А в ч..


Andrey пишет:

 цитата:
А в чём это заключается ?


ChangeLog.txt

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1742
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.07.20 11:41. Заголовок: Andrey пишет: в чём..


Andrey пишет:

 цитата:
в чём это заключается ?


Для пользователей библиотеки добавлена возможность использовать популярный формат PNG практически для всех элементов управления,
при этом Си-код ядра был упрощен и стал универсальным (я только адаптировал наработки Клаудио Сото для HMG, которые он сделал еще в 2014 году).

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




Пост N: 6773
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.07.20 12:36. Заголовок: Что то PNG в ТСБ оче..


Что то PNG в ТСБ очень фигово выглядит !!!
Если ставишь PNG в суперхидер и шапку (подвал наверное тоже), то картинка фиговая становиться...
Цвета заливки берутся из цвета и вся красота накрывается.
Может я и неправильно что то делаю.



Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1743
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.07.20 14:18. Заголовок: Andrey пишет: PNG в..


Andrey пишет:

 цитата:
PNG в ТСБ очень фигово выглядит


Функция LOADIMAGE(), которая используется в TBROWSE для загрузки картинок, имеет всего 2 параметра и заточена для загрузки BMP файлов в целях совместимости. Если добавить в нее дополнительные параметры, то можно попробовать подстроить ее для формата PNG.
Или можно использовать для загрузки картинок другую (уже готовую) функцию C_SETPICTURE(), которая имеет все эти дополнительные параметры

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




Пост N: 6774
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.07.20 15:34. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Или можно использовать для загрузки картинок другую (уже готовую) функцию C_SETPICTURE(), которая имеет все эти дополнительные параметры


Хотелось бы это иметь в ТСБ.

Вот ещё пример:


Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1744
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.07.20 17:15. Заголовок: SergKis пишет: попр..


SergKis пишет:

 цитата:
поправить Row в h_alert.prg


Сергей,

Текст этой одной строки выводится примерно посередине высоты иконки, как и в оригинальной функции MsgInfo().
Не вижу проблемы

SergKis пишет:

 цитата:
Max( nChrHeight, nIcoSize )


Ага, уже понял

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1745
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.07.20 11:13. Заголовок: Всем кому это интересно


Выложил "тихое" обновление для сборки 20.06 (Update 4) с учетом последних исправлений

Что нового:
- GRID не будет сваливаться, если 1000000 (один миллион) раз запросить значение ячейки грида.

Тестовый пример для этой ошибки см. ниже
Скрытый текст


Спасибо: 0 
Профиль
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 )
...


Спасибо: 0 
Профиль
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 у меня отработал нормально

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




Пост N: 3293
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.07.20 15:28. Заголовок: gfilatov2002 пишет п..


gfilatov2002 пишет
 цитата:
проверьте работу переработанной функции LoadImage()


Старые варианты (картинок немного) с новой LoadImage() отработали нормально
Картинок много у Андрея, с доп. параметрами LoadImage() надо у него проверять

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




Пост N: 6776
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.07.20 16:26. Заголовок: SergKis пишет: Карт..


SergKis пишет:

 цитата:
Картинок много у Андрея, с доп. параметрами LoadImage() надо у него проверять


Вот сравнение до и после:


Картинки могу выслать...

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




Пост N: 3294
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.07.20 16:41. Заголовок: Andrey пишет Картинк..


Andrey пишет
 цитата:
Картинки могу выслать...


Ты ф-ю заменил, либу пересобрал и старые примеры с bmp получил ?
И картинка по этой ситуации

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




Пост N: 6777
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.07.20 18:38. Заголовок: SergKis пишет: Ты ф..


SergKis пишет:

 цитата:
Ты ф-ю заменил, либу пересобрал и старые примеры с bmp получил ?


Скачал новую версию. Поставил вместо bmp новые png в ресурсы. Пере собрал проект.
А зачем либу пере собирать ?
Старые примеры на bmp такие же.
Я думал можно будет png использовать вместо bmp в ТСБ.

Спасибо: 0 
Профиль
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

Что нового:
Скрытый текст
Желаю доброго дня

Спасибо: 0 
Профиль
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 ?

Спасибо: 0 
Профиль
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. )


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1748
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.07.20 13:51. Заголовок: SergKis пишет: Лучш..


SergKis пишет:

 цитата:
Лучше так


Да, так, конечно, лучше

SergKis пишет:

 цитата:
Применение


Также следует добавить при определении GETBOX класс NOBORDER

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1749
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.07.20 14:59. Заголовок: SergKis пишет: лучш..


SergKis пишет:

 цитата:
лучше будет


OK

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




Пост N: 196
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 30.07.20 16:32. Заголовок: В последних сборках под MINGW


Привет Григорий !
В последних сборках под MINGW не отображаются картинки в меню.
Можно проверить на примере MenuEX .
Под Visual Studio работает.

Все останльное ОК.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1750
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.07.20 17:28. Заголовок: sashaBG Благодарю з..


sashaBG
Благодарю за сообщение

Уже поправил обе MINGW сборки

Кстати, под BCC такая ошибка не проявляется (старый инструмент )

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




Пост N: 6778
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.07.20 19:17. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Кстати, под BCC такая ошибка не проявляется


В последней сборке тоже такая фигня. На одном юзеровском компе это есть (у него Win10).
До конца пока не разбирался.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1751
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.07.20 19:54. Заголовок: Andrey пишет: В пос..


Andrey пишет:

 цитата:
В последней сборке тоже такая фигня.


Я поправил эту проблему в ВСС сборке тоже, просто надо ее еще раз скачать и установить

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




Пост N: 6779
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.07.20 20:00. Заголовок: Понял. Спасибо ! :s..


Понял. Спасибо !

Вопрос чисто теоритический ?
Можно ли в ТСБ в подвал прикрутить автофильтр как в Экселе ?
Юзерам нравиться такой подход по поиску данных.

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1752
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 31.07.20 14:19. Заголовок: SergKis пишет: нову..


SergKis пишет:

 цитата:
новую ф-ю HMG_Alert_RowStart( nRow )


Я - за новую функцию
Присылайте предложение, как ее лучше использовать внутри HMG_Alert()

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




Пост N: 3299
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 31.07.20 17:56. Заголовок: gfilatov2002 пишет П..


gfilatov2002 пишет
 цитата:
Присылайте предложение, как ее лучше использовать внутри HMG_Alert()


Вот что получилось https://TransFiles.ru/4hb07

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1753
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 31.07.20 19:46. Заголовок: SergKis пишет: Вот ..


SergKis пишет:

 цитата:
Вот что получилось


Супер - все работает как надо
Благодарю за помощь

Спасибо: 0 
Профиль
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 )
...


Спасибо: 0 
Профиль
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 )


Спасибо: 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}


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1754
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.08.20 20:09. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно заменить, добавить в h_objects.prg


Ok

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1755
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.08.20 20:20. Заголовок: SergKis пишет: Мале..


SergKis пишет:

 цитата:
Маленькая бяка


Бяку поправил - благодарю за помощь
А это не перебор - явно указывать цвета внутри исходника h_tbrowse.prg

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




Пост N: 3308
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.08.20 20:45. Заголовок: gfilatov2002 пишет А..


gfilatov2002 пишет
 цитата:
А это не перебор - явно указывать цвета внутри исходника h_tbrowse.prg


Можно не указывать, возможно, это перебор. Есть в DEFINE ... назначение. и там можно указать.
У себя спрячу умолчания во внутрь, что бы меньше писать. Согласен, что это лишнее

Спасибо: 0 
Профиль
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
...

будет тоже самое

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1756
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.08.20 21:10. Заголовок: SergKis пишет: Согл..


SergKis пишет:

 цитата:
Согласен, что это лишнее


OK

SergKis пишет:

 цитата:
Можно так ...
будет тоже самое


Спасибо

Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1757
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.08.20 10:50. Заголовок: SergKis пишет: Небо..


SergKis пишет:

 цитата:
Небольшая правка


Принято: благодарю за помощь

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




Пост N: 3312
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.20 13:11. Заголовок: gfilatov2002 Пример..


gfilatov2002
Пример с исп. изменений https://TransFiles.ru/zc7jl

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1758
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.08.20 14:10. Заголовок: SergKis пишет: Прим..


SergKis пишет:

 цитата:
Пример с исп. изменений


Благодарю за значительно расширенный пример

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




Пост N: 3313
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.20 14:33. Заголовок: gfilatov2002 пишет Б..


gfilatov2002 пишет
 цитата:
Благодарю за значительно расширенный пример


Расширение на любителя , не исп. ранее в тсб on gotfocus, on lostfocus и получил ошибку _wSend(), _wPost(), по инерции добавил карточку, опять же, на AlertOkCancel().
Я не специально, так получилось

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1759
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.08.20 16:59. Заголовок: SergKis пишет: - вы..


SergKis пишет:

 цитата:
- вынес вызов TSDrawCell() в метод :TSDrawCell(), заменив локальные переменные на переменные объекта TSBcel и поправил вызовы ф-ии на метод (кроме SuperHeader). Это позволило в карточке примера получить логическую переменную в виде image и по Enter менять значение, т.е. можно налету подменять данные для ф-ии TSDrawCell()
Мне показалось это интересным.


Это интересно уже тем, что повторяющийся код вынесен в один метод.
Проверил - пример отработал нормально.
Благодарю за помощь

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1590
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.08.20 17:13. Заголовок: SergKis пишет: Мне ..


SergKis пишет:

 цитата:
Мне показалось это интересным.


Интересным и перспективным. Спасибо, отличная идея

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




Пост N: 3315
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.20 18:43. Заголовок: gfilatov2002 Кусоче..


gfilatov2002
Кусочек текста для SuperHeader Скрытый текст


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




Пост N: 3316
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.20 19:14. Заголовок: PS В примере пропуст..


PS
В примере пропустил Скрытый текст


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1760
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.08.20 19:22. Заголовок: SergKis пишет: для ..


SergKis пишет:

 цитата:
для SuperHeader


Спасибо, сделал
SergKis пишет:

 цитата:
В примере


добавил

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




Пост N: 3317
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.08.20 15:06. Заголовок: gfilatov2002 Поправ..


gfilatov2002
Поправил пример, при работе с карточкой данные в колонке "Value" не меняют тип (ранее был "C") и режим Edit учитывает это в блоках кода :bPrevEdt, :bPostEdit.
Тут https://TransFiles.ru/ppqsg

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1761
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.08.20 15:38. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправил пример


Спасибо, обновил пример также (с форматированием).

Спасибо: 0 
Профиль
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'"

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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 собрался

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1591
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 08.08.20 15:10. Заголовок: SergKis пишет: Сбор..


SergKis пишет:

 цитата:
Сборка mgDBU

Сергей, ностальгируешь? Решил про DBU вспомнить ?

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




Пост N: 3321
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.08.20 15:33. Заголовок: Haz пишет Решил про ..


Haz пишет
 цитата:
Решил про DBU вспомнить ?


На vwt и hb 2.0 своя утилита уже устарела (тексты еще с clipper брались без больших изменений), вроде надо новую собрать, руки никак не дойдут, но иногда поглядываю в эту сторону. Мне нужна unicode версия (hmg такая есть) для LV866. Изменения с тек. версией hmg и своей согласовал, проверил. Думаю, почему бы не глянуть mgDbu ?

Спасибо: 0 
Профиль
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 ?

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1764
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.08.20 17:33. Заголовок: SergKis пишет: Для ..


SergKis пишет:

 цитата:
Для типа HOTKEY не должна валится проверка


Сделал, конечно

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1765
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.08.20 14:47. Заголовок: Всем кому это интересно


Подготовил 2-ю бету для новой сборки 20.08.
Что нового
Скрытый текст

Огромная благодарность Сергею Киселеву за помощь в подготовке этой сборки

Спасибо: 0 
Профиль
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

т.к. толщина линии - важный элемент

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1766
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.08.20 19:08. Заголовок: SergKis пишет: лучш..


SergKis пишет:

 цитата:
лучше DrawRR() иметь в таком виде


Да, эта функция присутствует в таком виде в примере demo9, а для примера из папки DATA_BOUND она не требует введения этого дополнительного параметра.

Спасибо: 0 
Профиль
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.

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




Пост N: 3325
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.08.20 08:51. Заголовок: PS Поправить забыл :..


PS
Поправить забыл
 
:SetDeleteMode( .T., .T., , {|obr| obr:Cargo:nRecnoDraw := 0, obr:DrawSelect() } )


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1767
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.08.20 19:08. Заголовок: SergKis пишет: надо..


SergKis пишет:

 цитата:
надо добавить


Добавил, конечно
Благодарю за помощь

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1768
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.08.20 14:04. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправьте


Сделал
Благодарю за помощь

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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 знаков (особенно для версии) или сделать больше ?

Спасибо: 0 
Профиль
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), то значения в колонках обрезаются.
Нужно бы условие поставить.

Спасибо: 0 
Профиль
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"
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1769
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.08.20 20:59. Заголовок: SergKis пишет: можн..


SergKis пишет:

 цитата:
можно поправить (METHOD LoadFields())


Добавил эти изменения

Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
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()

...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1770
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.08.20 10:12. Заголовок: SergKis пишет: CLAS..


SergKis пишет:

 цитата:
CLASS TSColumn


Добавил

Спасибо: 0 
Профиль
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 ?
Или ещё как то по другому.
И куда это добавить, я не знаю.

Спасибо: 0 
Профиль
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
...


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




Пост N: 6798
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.08.20 19:48. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Попробуй у себя поправить


Да у себя я сам добавлю к ширине колонок нужное ко-во.
Хотелось бы что-бы ТСБ это умел делать автоматом.

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




Пост N: 3342
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.08.20 20:11. Заголовок: Andrey Так поправь,..


Andrey
Так поправь, что написал (это же тсб текст), если поможет, можно править на постоянно.
Пример то у тебя, на нем и проверь

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




Пост N: 6800
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.08.20 20:31. Заголовок: SergKis пишет: Так ..


SergKis пишет:

 цитата:
Так поправь, что написал (это же тсб текст), если поможет, можно править на постоянно.


Не фига не работает... Попробовал исправить.
Колонка в середине S9 (текстовая) - нормальная, а самый последний столбец в таблице F2 (текстовая) - срезается.
Пример отправил тебе.

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




Пост N: 3343
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.08.20 22:12. Заголовок: Andrey пишет Пример ..


Andrey пишет
 цитата:
Пример отправил тебе.


Убрал виртуальные колонки и все колонки нормальные в размерах
С вирт. колонками надо самому ставить размеры, как и было у тебя !

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




Пост N: 6802
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.08.20 08:09. Заголовок: SergKis пишет: Убра..


SergKis пишет:

 цитата:
Убрал виртуальные колонки и все колонки нормальные в размерах


Я тоже убрал.
Но у меня режутся колонки с "=@T" и последняя текстовая колонка тоже режется.
Числовые колонки нормально стали показываться.
Может у меня старый h_tbrowse.prg ?

Вот картинка:


Колонки 23 и 25 (зеленые стрелочки) с типом [+] [^] может расширить до 6-8 знаков ?

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




Пост N: 3344
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.08.20 09:07. Заголовок: Andrey пишет Может у..


Andrey пишет
 цитата:
Может у меня старый h_tbrowse.prg ?


Делал с твоим и сейчас положил в пример свой -> результат одинаковый, колонки не режутся.
Твой пример тут https://TransFiles.ru/al858

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




Пост N: 3345
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.08.20 09:16. Заголовок: PS h_tbrowse.prg нем..


PS
h_tbrowse.prg немного отличается от того, который у Григория (method LoadFields с изменениями ранее), наверно, т.к. у меня добавлены еще к "N" "+" и "^". Но большого значения это не имеет

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




Пост N: 6803
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.08.20 10:13. Заголовок: SergKis пишет: Дела..


SergKis пишет:

 цитата:
Делал с твоим и сейчас положил в пример свой -> результат одинаковый, колонки не режутся.
Твой пример тут


Запускаю этот пример и колонки 24,26,27,28 - съедены !
Как такое может быть, у тебя нормально, а у меня нет ?

Спасибо: 0 
Профиль
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 ...

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




Пост N: 3347
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.08.20 10:51. Заголовок: Упс, сломалось что т..


Упс, сломалось что то для myBrw1. Исправить просто строки красным из myBrw2 перенести в myBrw1 они одинаковые

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1772
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.08.20 12:05. Заголовок: Всем кому это интересно


Завершена подготовка новой сборки 20.08, которая будет опубликована на следующей неделе.
Рассматриваю ее как финальную по причинам материального характера (что не удивительно в наше время ).

Огромная благодарность Сергею Киселеву за все предложения и идеи по развитию библиотеки

Благодарю за ваше внимание

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




Пост N: 3348
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.08.20 13:54. Заголовок: Возможно, будет инте..


Возможно, будет интересно. Пример MDI интерфейса.
В целом работает. Не пошел контрол TEXTBOX, возможно еще какие контролы, надо смотреть.
Но работая ТОЛЬКО в окнах ChildMdi, без модальных можно многое делать.
Пример тут https://TransFiles.ru/cnyt8
Собран с последними изменениями h_tbrowse.prg

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1773
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 31.08.20 11:44. Заголовок: Всем кому это интересно


Опубликована новая сборка 20.08 для BCC 5.8.2 и компиляторов Harbour и xHarbour.

Базовый дистрибутив находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-20.08-setup.exe

Огромная благодарность Сергею Киселеву за помощь при подготовке этой сборки

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1774
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.09.20 20:46. Заголовок: Сделал "тихое..


Сделал "тихое" обновление сборки 20.08

Что нового:
- заработала печать в примере \samples\Basic\RichEditBox

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1775
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.09.20 11:45. Заголовок: Всем кому это интересно


Выпустил 1-е обновление сборки 20.08

Что нового (на языке оригинала):
Скрытый текст
Благодарю всех, кто поддерживал и поддерживает этот проект "на плаву"

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




Пост N: 6809
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.09.20 17:58. Заголовок: В новой версии для Т..


В новой версии для ТСБ пропадает суперхидер, т.е. пустой суперхидер.

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 265
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет