On-line:гостей 2. Всего: 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 [только новые]


gfilatov2002
moderator




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


SergKis пишет:

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


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

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



Пост N:2716
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:05.08.19 20:58.Заголовок:gfilatov2002 Мелочь..


gfilatov2002
Мелочь, но поправьте
 
#translate System.ClientWidth => ( GetDesktopWidth () - GetBorderWidth () )
#translate System.ClientHeight => ( GetDesktopHeight() - GetBorderHeight() - GetTaskBarHeight() )


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




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


SergKis пишет:

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


OK

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



Пост N:2717
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:06.08.19 10:47.Заголовок:gfilatov2002 Для пр..


gfilatov2002
Для простого определения принадлежности колонки к алиасу добавил
 
CLASS TSColumn
...
DATA cError // Bad valid error message
DATA cArea INIT "" // Alias name of column

DATA cField INIT "" // Field Name of column
...
METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel ) CLASS TSBrowse
...
ATail( ::aColumns ):cArea := cAlias

ATail( ::aColumns ):cData := cAlias + "->" + FieldName( nE )
...
METHOD LoadRelated( cAlias, lEditable, aNames, aHeaders ) CLASS TSBrowse
...
ATail( ::aColumns ):cAlias := cAlias
ATail( ::aColumns ):cData := cAlias + "->" + FieldName( nE )
ATail( ::aColumns ):cField := cAlias + "->" + FieldName( nE )
ATail( ::aColumns ):cName := cAlias + "->" + ( cAlias )->( FieldName( nE ) )

ATail( ::aColumns ):cArea := cAlias
ATail( ::aColumns ):cFieldTyp := aStru[ nE, 2 ]
ATail( ::aColumns ):nFieldLen := aStru[ nE, 3 ]
ATail( ::aColumns ):nFieldDec := aStru[ nE, 4 ]


Next
...


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




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


SergKis пишет:

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


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

 цитата:
ATail( ::aColumns ):cAlias := cAlias


и требуется дублировать это значение в еще одну переменную cArea

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



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


gfilatov2002 пишет
 цитата:
требуется дублировать это значение в еще одну переменную cArea


oBrw:cAlias опр. рабочую область тсб,
oCol:cAlias задействован в работе блока кода, для массива то же срабатывает.
oCol:cArea позволит связать колонку с полем в базе, не меняя "старые" алгоритмы, в том числе и при тсб массива.
Выделять из oCol:cData алиас можно, но не очень удобно.
Код (выделен)
 
:LoadFields(.T., aColSel, cAls)

FOR nI := 1 TO Len( aColSel )
:GetColumn(aColSel[ nI ]):bPrevEdit := {|| (cAls)->( RLock() ) }
:GetColumn(aColSel[ nI ]):bPostEdit := {|| (cAls)->( dbUnLock() ) }

NEXT

:GetColumn("MARRIED" ):bEncode := {|lx| ! lx }

Можно, в дальнейшем, убрать в тсб, где cAls брать из oCol:cArea, т.к. сейчас при LOCK свойстве тсб блокируется \ разблокируется запись oBrw:cAlias

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




Пост N:1553
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:06.08.19 14:02.Заголовок:SergKis пишет: oCol..


SergKis пишет:

 цитата:
oCol:cArea позволит связать колонку с полем в базе


Понятно, благодарю за разъяснение
SergKis пишет:

 цитата:
Можно, в дальнейшем, убрать в тсб, где cAls брать из oCol:cArea


Тогда ожидаю такую модификацию, если она потребуется...

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



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


gfilatov2002 пишет
 цитата:
Тогда ожидаю такую модификацию


Сделал так
 
CLASS TSBrowse FROM TControl
...
DATA lRecLockArea AS LOGICAL INIT .F. // flag to lock record for oCol:cArea alias

...
METHOD PostEdit( uTemp, nCol, bValid ) CLASS TSBrowse
...
Local lLockArea, cArea

...
bAddRec := If( ! Empty( ::bAddRec ), ::bAddRec, {|| ( cAlias )->( dbAppend() ), ! NetErr() } )

cArea := ::aColumns[ nCol ]:cArea

lLockArea := ::lRecLockArea .and. ! Empty( cArea ) .and. Select( cArea ) > 0

If bValid != Nil
...
If ::lIsDbf

If Eval( If( ! ::lAppendMode, bRecLock, bAddRec ), uTemp )

If lLockArea
If ( cArea )->( RLock() )
::bDataEval( ::aColumns[ nCol ], uTemp, nCol )
EndIf
Else
::bDataEval( ::aColumns[ nCol ], uTemp, nCol )
EndIf

SysRefresh()
...
if !("SQL" $ ::cDriver)
( cAlias )->( DbUnLock() )
endif

If lLockArea
( cArea )->( dbUnLock() )
( cArea )->( DbSkip( 0 ) )
EndIf

If lAppend
...

Пример проверки тут https://TransFiles.ru/xe6ti

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




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


SergKis пишет:

 цитата:
Сделал так


Принято с благодарностью

SergKis пишет:

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


Работает отлично
Я только добавил

 цитата:
:GetColumn("MARRIED" ):nEditMove := DT_DONT_MOVE


чтобы не убегал курсор после нажатия Enter на этом поле

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



Пост N:2723
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:08.08.19 11:41.Заголовок:gfilatov2002 Возмож..


gfilatov2002
Возможно, будет интересно.
Подключил в примерах Tsb_ReportAge и Tsb_SetFieldsTo работу с LetoDbf, работают с одной базой Employee.dbf.
Сервер из каталога SAMPLES\Advanced\LetoDbf\SERVER должен быть запущен.
Запуск в обоих случаях Demo.exe *
На сервер переписывается таблица Employee.dbf, если первым запустить Tsb_ReportAge, то на сервере в таблице будет 1000 записей, если Tsb_SetFieldsTo, то 11000
Tsb_ReportAge тут https://TransFiles.ru/etjm9
Tsb_SetFieldsTo тут https://TransFiles.ru/l8587

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




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


SergKis пишет:

 цитата:
Подключил в примерах Tsb_ReportAge и Tsb_SetFieldsTo работу с LetoDbf


Спасибо!
Да, примеры работают с сервером при запуске
demo.exe *
Заметил, что в Tsb_SetFieldsTo количество отобранных записей в подвале правильно обновляется только со второй попытки...

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



Пост N:2724
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:08.08.19 16:23.Заголовок:gfilatov2002 пишет к..


gfilatov2002 пишет
 цитата:
количество отобранных записей в подвале правильно обновляется только со второй попытки...


Добавьте прорисовку подвала
 
oBrw:GetColumn("NN"):cFooting := hb_ntos( (cOut)->( OrdKeyCount() ) )
oBrw:DrawFooters()



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



Пост N:2727
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:09.08.19 23:40.Заголовок:gfilatov2002 Модифи..


gfilatov2002
Модифицировал пример, добавив справочник STATE.DBF, колонки в тсб набираются смешано с 3х алиасов.
Работает запуск и с сервером тоже
Пример тут https://TransFiles.ru/xuqt2

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



Пост N:2728
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:10.08.19 10:50.Заголовок:gfilatov2002 Предла..


gfilatov2002
Предлагаю добавить в тсб
 
METHOD IsEditable( nCol ) INLINE ::lCellBrw .and. ::aColumns[ nCol ]:lEdit .and. ;
( ::aColumns[ nCol ]:bWhen == Nil .or. Eval( ::aColumns[ nCol ]:bWhen, Self ) )

ACCESS IsEdit INLINE ! Empty( ::aColumns[ ::nCell ]:oEdit )

...
использовать, к примеру, вместо
// ON KEY ESCAPE ACTION iif( Empty(oBrw:aColumns[ oBrw:nCell ]:oEdit), _wPost(99), )
ON KEY ESCAPE ACTION iif( oBrw:IsEdit, , _wPost(99) )




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



Пост N:2729
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:10.08.19 11:57.Заголовок:PS Добавить параметр..


PS
Добавить параметр
 
METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse
...
If ValType( ::aHeaders ) == "A" .and. ! Empty( ::aHeaders ) .and. n <= Len( ::aHeaders )
cHeading := ::aHeaders[ n ]
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 ]
EndIf

...
тогда можно так делать ( удобнее )
:LoadFields(.F., {"REC" }, cOut , {"IDN"}, {"Id"})
:LoadFields(.F., {"STATE"}, cAls )
:LoadFields(.F., {"NAME" }, cAlsS, , {"State name"})
:LoadFields(.T., {"CITY", "STREET", "ZIP", "FIRST", "LAST", "AGE", "MARRIED" }, cAls)

AEval(:aColumns, {|oc,nc| oc:lEmptyValToChar := .T., ;
oc:lFixLite := .T. })

// :GetColumn("IDN" ):cHeading := "Id"
// :GetColumn("NAME"):cHeading := "State name"

...


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




Пост N:1557
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:10.08.19 12:18.Заголовок:SergKis пишет: Моди..


SergKis пишет:

 цитата:
Модифицировал пример, добавив справочник STATE.DBF


ОК

SergKis пишет:

 цитата:
Предлагаю добавить в тсб


Принято с благодарностью

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




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


SergKis пишет:

 цитата:
ON KEY ESCAPE ACTION iif( oBrw:IsEdit, , _wPost(99) )


Записал эту строку так:

 цитата:
ON KEY ESCAPE ACTION iif( oBrw:IsEdit, oBrw:PostMsg( WM_KEYDOWN, VK_ESCAPE, 0 ), _wPost(99) )


Работает нормально

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



Пост N:2731
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:10.08.19 16:05.Заголовок:gfilatov2002 пишет O..


gfilatov2002 пишет
 цитата:
ON KEY ESCAPE ACTION iif( oBrw:IsEdit, oBrw:PostMsg( WM_KEYDOWN, VK_ESCAPE, 0 ), _wPost(99)


Может добавить
 
METHOD PostMsg( nMsg, wParam, lParam ) INLINE ::Super:PostMsg( hb_defaultValue(nMsg, WM_KEYDOWN), wParam, hb_defaultValue(lParam, 0) )

Мелочь, но тогда короче писать можно (клавишных сообщений исп. достаточно)
ON KEY ESCAPE ACTION iif( oBrw:IsEdit, oBrw:PostMsg(, VK_ESCAPE), _wPost(99) )



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




Пост N:1559
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:11.08.19 17:23.Заголовок:SergKis пишет: Може..


SergKis пишет:

 цитата:
Может добавить


Нет, на мой взгляд такой синтаксис

 цитата:
oBrw:PostMsg( WM_KEYDOWN, VK_ESCAPE, 0 )


нагляднее
В противном случае, надо помнить, что сообщение WM_KEYDOWN используется по умолчанию (и не забыть поставить запятую перед VK_ESCAPE),
но ведь есть и другие сообщения

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



Пост N:2732
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:11.08.19 20:36.Заголовок:gfilatov2002 пишет т..


gfilatov2002 пишет
 цитата:
такой синтаксис нагляднее


Согласен
Хотелось покороче писать, к примеру, методами
oBrw:PostKeyDown( VK_ESCAPE )
oBrw:PostKeyUp( VK_ESCAPE )
но короче не получается, а вот последний параметр можно не задавать.
oBrw:PostMsg( WM_KEYDOWN, VK_ESCAPE, 0 )

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