On-line: PSP, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
модератор




Пост 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 
ПрофильЦитата Ответить
Ответов - 256 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 All [только новые]


moderator




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


SergKis пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


Спасибо: 0 
ПрофильЦитата Ответить
moderator




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


SergKis пишет:

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


OK

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator




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


SergKis пишет:

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


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

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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator




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


SergKis пишет:

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


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

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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator




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


SergKis пишет:

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


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

SergKis пишет:

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


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

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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator




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


SergKis пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


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



Спасибо: 0 
ПрофильЦитата Ответить



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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator




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


SergKis пишет:

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


ОК

SergKis пишет:

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


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

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



Пост 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 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
Ответов - 256 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 86
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет