On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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 [только новые]


SergKis
постоянный участник




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


gfilatov2002 пишет
 цитата:
если у Вас есть другое предложение, как это исправить, то я его с удовольствием использую...


Пока не разобрался. В массивах не исп. oCol:bPrevEdit и :bPostEdit до сих пор. Но добавил такое
 
CLASS TSColumn
...
DATA lEditBox AS LOGICAL INIT .F. // Edit with editbox
...
METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, nClrBack ) CLASS TSBrowse
...
ElseIf ( cType == "C" .and. Chr( 13 ) $ uValue ) .or. cType == "M" .or. oCol:lEditBox

IF oCol:lEditBox .and. ! Chr( 13 ) $ uValue
uValue := trim( uValue )
ENDIF

Default uValue := "" // ЭТО ЛИШНЕЕ т.к. делали Chr( 13 ) $ uValue

If ::nMemoHE == Nil
...
на dbf отработало нормально Ctlr+W и Esc, а с массивом только в таком варианте (тот же пример)
...
IF oBrw:lEnum
oBrw:nHeightSpecHd := oBrw:nHeightCell
ENDIF

:lNoKeyChar := .T.

FOR EACH oCol IN :aColumns
oCol:lEdit := .T.
oCol:bPrevEdit := {|xv,ob,nc,oc|
? "PrevEdit", nc, oc:cName, xv
Return .T.
}
oCol:bPostEdit := {|xv,ob|
Local nc := ob:nCell
Local oc := ob:GetColumn(nc)
? "PostEdit", nc, oc:cName, xv
Return Nil
}
NEXT

oCol := :GetColumn(5)
oCol:lEditBox := .T.

ON KEY CONTROL+W ACTION {||
Local oBrw := This.oBrw.Object
If oBrw:IsEdit // tsb field edit
oBrw:aColumns[ oBrw:nCell ]:oEdit:Save()
EndIf
oBrw:SetFocus()
Return Nil
}
ON KEY ESCAPE ACTION {||
Local oBrw := This.oBrw.Object
If oBrw:IsEdit // tsb field edit
oBrw:SetFocus()
Else
ThisWindow.Release
EndIf
Return Nil
}

...

Хотел в bPrevEdit и в bPostEdit добавить обработку строки для кол. 5, но блоки не вызвались и первое что увидел блокировка вызова bPrevEdit

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




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


SergKis пишет:

 цитата:
блоки не вызвались и первое что увидел блокировка вызова bPrevEdit


Проверил еще раз без этой правки

 цитата:
ElseIf nKey != VK_RETURN // GF 15-10-2015


блок bPrevEdit вызывается ДВАЖДЫ

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




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


gfilatov2002 пишет
 цитата:
блок bPrevEdit вызывается ДВАЖДЫ


Виноват, не поставил команду в самом начале
#define _HMG_OUTLOG
потому вывода из блока кода по ? ... и не было
блоки кода сработали нормально

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




Пост N: 3366
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.09.20 13:57. Заголовок: gfilatov2002 Предла..


gfilatov2002
Предлагаю такую работу с memo полями и полями "C" но длинными, не полностью входящие в показ колонки, т.е. поле длинной 200, а показ в 50 символов. Изменения
 
CLASS TSColumn
...
DATA cEditBoxSep AS STRING INIT "" // editing EditBox line separator
DATA nEditBoxWrap AS NUMERIC INIT 0 // editing EditBox line len wrap
DATA lEditBoxROnly AS LOGICAL INIT .F. // no editing EditBox - ReadOnly
DATA lEditBox AS LOGICAL INIT .F. // editing with editbox

...
METHOD Save() CLASS TSMulti

LOCAL cText

IF ::bSetGet != NIL
cText := ::GetText()
IF Right( cText, 2 ) == CRLF
cText := SubStr( cText, 1, Len( cText ) - 2 )
ENDIF

IF ::oCol:lEditBox .and. ! Empty( cText ) .and. CRLF $ cText
IF Len( ::oCol:cEditBoxSep ) > 0
cText := StrTran( cText, CRLF, ::oCol:cEditBoxSep )
ELSEIF ::oCol:nEditBoxWrap > 0
cText := StrTran( cText, CRLF, " " )
ENDIF
ENDIF

Eval( ::bSetGet, cText )
IF Empty( ::oCol:bEditEnd )
::oBrw:PostEdit( cText, ::nCol )
ENDIF
ENDIF

RETURN NIL
...
METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, nClrBack ) CLASS TSBrowse
...
ElseIf ( cType == "C" .and. Chr( 13 ) $ uValue ) .or. cType == "M" .or. oCol:lEditBox

IF oCol:lEditBox .and. ! Empty( uValue := trim( uValue ) )
IF Len( oCol:cEditBoxSep ) > 0 .and. oCol:cEditBoxSep != CRLF ;
.and. oCol:cEditBoxSep $ uValue
uValue := StrTran( uValue, oCol:cEditBoxSep, CRLF )
ENDIF
IF oCol:nEditBoxWrap > 0
cTmp := uValue
nK := MLCOUNT( cTmp, oCol:nEditBoxWrap, , .T. )
uValue := ""
FOR nI := 1 TO nK
uValue += Trim( MEMOLINE( cTmp, oCol:nEditBoxWrap, nI, , .T. ) )
IF nI != nK ; uValue += CRLF
ENDIF
NEXT
ENDIF
ENDIF

If ::nMemoHE == Nil
...
oCol:oEdit := TSMulti():New( nRow, nCol, bSETGET( uValue ), Self, nWidth, nHeight, ;
hFont, nClrFore, nClrBack, ::cChildControl, cWnd )
oCol:oEdit:bGotFocus := { || oCol:oEdit:HideSel(), oCol:oEdit:SetPos( 0 ) }
lMulti := .T.
IF oCol:lEditBoxROnly
oCol:oEdit:SendMsg( EM_SETREADONLY, 1, 0 )
ENDIF

oCol:oEdit:Hide()
...

Пример тут https://TransFiles.ru/vw1pc
Открываем файл userlog.dbf в режимах Edit - Yes или No,
Смотрим последнюю запись в файле и две последних колонки при нажатии Enter

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




Пост N: 3367
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.09.20 14:00. Заголовок: PS В h_tbrowse.prg д..


PS
В h_tbrowse.prg добавить
#define EM_SETREADONLY 207

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




Пост N: 3368
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.09.20 14:08. Заголовок: PS2 в примере это ст..


PS2
в примере это строки Скрытый текст


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




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


SergKis пишет:

 цитата:
Предлагаю такую работу с memo полями


Все изменения приняты.

SergKis пишет:

 цитата:
Открываем файл userlog.dbf в режимах Edit - Yes или No,
Смотрим последнюю запись в файле и две последних колонки при нажатии Enter


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

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




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


SergKis пишет:

 цитата:
Открываем файл userlog.dbf в режимах Edit - Yes или No,
Смотрим последнюю запись в файле и две последних колонки при нажатии Enter


А в карточке редактировать тоже нужно !

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




Пост N: 3369
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.09.20 19:49. Заголовок: Andrey пишет А в кар..


Andrey пишет
 цитата:
А в карточке редактировать тоже нужно !


К тсб, редактирование в карточке полей memo и "длинных" полей "C", не имеет отношения.
Надо сделать отдельное MdiChild окно для редактирования с контролом EDITBOX.
Изменения выше относятся именно к работе на тсб таблице

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




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


Выпустил 3-е обновление сборки 20.08

Что нового (на языке оригинала):
Скрытый текст

Благодарю всех, кто поддерживал и поддерживает этот проект "на плаву"

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




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


gfilatov2002 пишет:

 цитата:
Выпустил 3-е обновление сборки 20.08



Что то пример SAMPLES\Advanced\FILEICON не собирается...
Harbour 3.2.0dev (r2008190002) 
Copyright (c) 1999-2020, https://harbour.github.io/
C:\Users\Andrey\AppData\Local\Temp\hbmk_vzy17f.dir\FILEICON.c:
C:\Users\Andrey\AppData\Local\Temp\hbmk_vzy17f.dir\HB_FUNC.c:
Error E2209 HB_FUNC.PRG 4: Unable to open include file 'ShObjIdl.h'
Error E2451 HB_FUNC.PRG 11: Undefined symbol 'SHFILEINFO' in function HB_FUN_GETICOINDEX
Error E2379 HB_FUNC.PRG 11: Statement missing ; in function HB_FUN_GETICOINDEX
Error E2451 HB_FUNC.PRG 13: Undefined symbol 'sfi' in function HB_FUN_GETICOINDEX
Error E2109 HB_FUNC.PRG 13: Not an allowed type in function HB_FUN_GETICOINDEX
Error E2451 HB_FUNC.PRG 13: Undefined symbol 'SHGFI_ICON' in function HB_FUN_GETICOINDEX
Warning W8065 HB_FUNC.PRG 13: Call to function 'SHGetFileInfo' with no prototype in function HB_FUN_GETICOINDEX
Warning W8004 HB_FUNC.PRG 16: 'nSize' is assigned a value that is never used in function HB_FUN_GETICOINDEX
Error E2147 HB_FUNC.PRG 56: 'HIMAGELIST' cannot start a parameter declaration
Error E2303 HB_FUNC.PRG 56: Type name expected
*** 8 errors in Compile ***
C:\Users\Andrey\AppData\Local\Temp\hbmk_ir7be9.c:
hbmk2[FILEICON]: Error: Running C/C++ compiler. 1


Может из за того что сижу на BCC 5.5.1 ?

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




Пост N: 1786
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.09.20 09:57. Заголовок: Выпустил 4-е обновле..


Выпустил 4-е обновление сборки 20.08

Что нового (на языке оригинала):
Скрытый текст


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




Пост N: 1600
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.09.20 14:25. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Выпустил 4-е обновление сборки 20.08
Что нового (на языке оригинала):


На языке оригинала язык не поворачивается сказать
Давно не обновлял, в начале недели обновил на одну из последних сборок и началось ....
Проблема в слетевших ::cPicture по умолчанию , все строковые колонки во всех TSB были обрезаны и если пользователь их начал редактировать - резались данные.
Для начала в спешке прописал ::cPicture по всему коду, где не указано явно. Затем выдохнул и принялся изучать причину, а она простая:
у меня базы в ADT формате (ADS), этот формат проходит проверку IsDbf(), но типы символьных полей вариативны ( не тупо равно "C").
В новых сборках пикча назначается в ::LoadFields() как
 
...
aStru := ( cAlias )->( DbStruct() )
...

cType := aStru[ nE, 2 ]
If cType == "C"
cPicture := "@K " + Replicate( 'X', aStru[ nE, 3 ] )
ElseIf cType == "N"
...


и поскольку в качестве типа символьного поля я использую "CICHARACTER" , а типа "C" в ADS просто нет, то поимел танцы.
почему бы при формировании пикчи вместо cType := aStru[ nE, 2 ] не использовать значение из поля а не из структуры примерно так cType := ValType( (cAlias)->&(aStru[ nE, 1 ])) или cType := ValType( (cAlias)->(FieldGet(nE)) ?

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




Пост N: 3382
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.09.20 14:49. Заголовок: Haz пишет В новых сб..


Haz пишет
 цитата:
В новых сборках пикча назначается в ::LoadFields() как

...
aStru := ( cAlias )->( DbStruct() )
...

cType := aStru[ nE, 2 ]
If cType == "C"
cPicture := "@K " + Replicate( 'X', aStru[ nE, 3 ] )
ElseIf cType == "N"
...


смотрю версию 2.07 от 2012 года там в LoadFields
aStru := ( cAlias )->( DbStruct() )
и
cType := aStru[ nE, 2 ]

If cType == "C"
cPicture := "@K "+Replicate('X', aStru[ nE, 3 ] )
ElseIf cType == "N"
...
т.е. это историческая данность, а valtype не везде даст то что надо с новыми типами полей, наверно, надо усложнять проверку, но инициатива от тебя, т.к. я не работаю с ADS

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




Пост N: 1787
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.09.20 14:52. Заголовок: Haz пишет: почему б..


Haz пишет:

 цитата:
почему бы при формировании пикчи вместо cType := aStru[ nE, 2 ] не использовать значение из поля а не из структуры примерно так cType := ValType( (cAlias)->&(aStru[ nE, 1 ])) или cType := ValType( (cAlias)->(FieldGet(nE)) ?


Благодарю за предложение
Поправил, конечно

Обидно, что именно так сделано в методе :LoadRelated(), а в методе :LoadFields() тип берется из массива aStru у оригинального автора библиотеки

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




Пост N: 1601
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.09.20 15:27. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Поправил, конечно


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

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




Пост N: 1602
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.09.20 15:27. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Поправил, конечно


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

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




Пост N: 1788
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.09.20 16:50. Заголовок: Haz пишет: может и ..


Haz пишет:

 цитата:
может и там поправить ?


Привожу полный текст исправленного метода для проверки:
* ============================================================================ 
* METHOD TSBrowse:LoadFields() Version 9.0 Nov/30/2009 // modified by SergKis
* ============================================================================

METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse

Local n, nE, cHeading, nAlign, nSize, cData, cType, nDec, hFont, cPicture, ;
cBlock, nCols, aNames, cKey, ;
aColSizes := ::aColSizes, ;
cOrder, nEle, ;
cAlias, cName, aStru, ;
aAlign := { "LEFT", "CENTER", "RIGHT", "VERT" }
Local cTmp, cHead, hFontH

Default lEditable := ::lEditable, ;
aColSizes := {}

cAlias := iif( HB_ISCHAR( cAlsSel ), cAlsSel, ::cAlias )
aStru := ( cAlias )->( DbStruct() )
aNames := iif( HB_ISARRAY( aColSel ), aColSel, ::aColSel )
nCols := iif( aNames == Nil, ( cAlias )->( FCount() ), Len( aNames ) )
aColSizes := iif( Len( ::aColumns ) == Len( aColSizes ), Nil, aColSizes )

For n := 1 To nCols

nE := iif( aNames == Nil, n, ( cAlias )->( FieldPos( aNames[ n ] ) ) )

If ValType( ::aHeaders ) == "A" .and. ! Empty( ::aHeaders ) .and. n <= Len( ::aHeaders )
cHeading := ::aHeaders[ n ]
cHead := cHeading
Else
cHeading := ::Proper( ( cAlias )->( Field( nE ) ) )
EndIf

If HB_ISARRAY( aHeadSel ) .and. Len( aHeadSel ) > 0 .and. n <= Len( aHeadSel ) .and. aHeadSel[ n ] != Nil
cHeading := aHeadSel[ n ]
cHead := cHeading
EndIf

If CRLF $ cHeading
cData := ""
FOR EACH cTmp IN hb_ATokens( cHeading, CRLF )
IF Len( cTmp ) > Len( cData )
cData := cTmp
EndIf
NEXT
cHeading := cData
cData := NIL
EndIf

If ( nEle := AScan( ::aTags, {|e| Upper( cHeading ) $ Upper( e[ 2 ] ) } ) ) > 0
cOrder := ::aTags[ nEle, 1 ]
cKey := ( cAlias )->( OrdKey() )

If Upper( cHeading ) $ Upper( cKey )
::nColOrder := iif( Empty( ::nColOrder ), Len( ::aColumns ) + 1, ::nColOrder )
EndIf
Else
cOrder := ""
EndIf

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

nAlign := iif( ValType( nAlign ) == "L", iif( nAlign, 2, 0 ), ;
iif( ValType( nAlign ) == "C", AScan( aAlign, nAlign ) - 1, nAlign ) )

nSize := iif( ! aColSizes == Nil .and. Len( aColsizes ) >= nE, aColSizes[ nE ], Nil )

cData := ( cAlias )->( FieldGet( nE ) )
cType := ValType( cData )

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

If nSize == Nil
nSize := aStru[ nE, 3 ]
nDec := aStru[ nE, 4 ]
hFont := iif( ::hFont != Nil, ::hFont, 0 )
hFontH := iif( ::hFontHead != Nil, ::hFontHead, ::hFont )

If cType == "C"
cData := PadR( Trim( cData ), nSize, "B" )
nSize := GetTextWidth( 0, cData, hFont )
ElseIf cType == "N"
cData := StrZero( cData, nSize, nDec )
nSize := GetTextWidth( 0, cData, hFont )
ElseIf cType == "D"
cData := cValToChar( iif( Empty( cData ), Date(), cData ) )
nSize := Int( GetTextWidth( 0, cData + "BB", hFont ) ) + iif( lEditable, 30, 0 )
ElseIf cType == "M"
nSize := iif( ::nMemoWV == Nil, 200, ::nMemoWV )
ElseIf cType $ "=@T"
nSize := GetTextWidth( 0, Replicate( "9", 24 ), hFont )
ElseIf cType $ "^+"
nSize := GetTextWidth( 0, Replicate( "9", 10 ), hFont )
Else
cData := cValToChar( cData )
nSize := GetTextWidth( 0, cData, hFont )
EndIf

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 )
nSize := ::aColSizes[ n ]
EndIf

If ValType( ::aColSizes ) == "A" .and. n <= Len( ::aColSizes ) .and. Empty( ::aColSizes[ n ] )
::aColSizes[ n ] := nSize
EndIf

If ValType( ::aFormatPic ) == "A" .and. ! Empty( ::aFormatPic ) .and. n <= Len( ::aFormatPic )
cPicture := ::aFormatPic[ n ]
EndIf

If HB_ISCHAR( cHead )
cHeading := cHead
EndIf

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

cName := ( cAlias )->( FieldName( nE ) )

ATail( ::aColumns ):cData := cAlias + "->" + FieldName( nE )
ATail( ::aColumns ):cArea := cAlias // 06.08.2019
ATail( ::aColumns ):cField := ( cAlias )->( FieldName( nE ) ) // 08.06.2018
ATail( ::aColumns ):cFieldTyp := aStru[ nE, 2 ] // 18.07.2018
ATail( ::aColumns ):nFieldLen := aStru[ nE, 3 ] // 18.07.2018
ATail( ::aColumns ):nFieldDec := aStru[ nE, 4 ] // 18.07.2018

If HB_ISARRAY( aNameSel ) .and. Len( aNameSel ) > 0 .and. n <= Len( aNameSel )
If HB_ISCHAR( aNameSel[ n ] ) .and. ! Empty( aNameSel[ n ] )
cName := aNameSel[ n ]
EndIf
EndIf

ATail( ::aColumns ):cName := cName

If cType == "L"
ATail( ::aColumns ):lCheckBox := .T.
EndIf

If ! Empty( cOrder )
ATail( ::aColumns ):lIndexCol := .T.
EndIf

Next

If ::nLen == 0
cAlias := ::cAlias
::nLen := iif( ::bLogicLen == Nil, Eval( ::bLogicLen := {||( cAlias )->( LastRec() ) } ), Eval( ::bLogicLen ) )
EndIf

Return Self



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




Пост N: 1603
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.09.20 17:58. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Привожу полный текст исправленного метода для проверки:


Все отлично
единственное под сомнением это [ ATail( ::aColumns ):cFieldTyp := aStru[ nE, 2 ]

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




Пост N: 3386
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.09.20 21:33. Заголовок: Haz пишет единственн..


Haz пишет
 цитата:
единственное под сомнением это [ ATail( ::aColumns ):cFieldTyp := aStru[ nE, 2 ]


Это не должно вызывать сомнения, т.к. это для customer использования, т.е. привязка к реальному типу поля
Сомнения вызывают Valtype(от полей ^+) они дадут "N" ((возможно еще есть какие варианты, не помню) и это надо учитывать тут
 
If cType == "C"
cPicture := "@K " + Replicate( 'X', aStru[ nE, 3 ] )
ElseIf cType == "N" .and. aStru[ nE, 2 ] $ "^+"
cPicture := Replicate( '9', 10 )
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
EndIf


Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 11
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет