Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
krutoff
|
| |
Пост N: 210
Зарегистрирован: 17.10.05
|
|
Отправлено: 07.12.21 11:24. Заголовок: SergKis Спасибо за ..
SergKis Спасибо за код, но у меня Define window CHILD ... Define Window ... Virtual PANEL ... EDITBOX И мне надо дать фокус внутри 2-й формы
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3971
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.12.21 11:46. Заголовок: krutoff пишет И мне ..
krutoff пишет цитата: | И мне надо дать фокус внутри 2-й формы |
| И в чем разница ? Контролы на окне имеют уникальные имена. Вопрос, какую среду This надо в блоке кода ? Для среды This окна ON INIT {|| _wPost(10) } Для среды This контрола ON INIT {|| _wPost(10, This.<контрол>.Index) } Суть этих действий, завершить работу обработчика окна on init и организовать через очередь другое событие (обработчик) по _wPost(...), т.е. отработает IF _SetFocusedSplitChild( i ) == .F. _SetActivationFocus( i ) ENDIF потом сработает, через очередь, событие\блок кода 10, зарегистрированный на окне
| |
|
krutoff
|
| |
Пост N: 211
Зарегистрирован: 17.10.05
|
|
Отправлено: 07.12.21 13:10. Заголовок: SergKis пишет: пото..
SergKis пишет: цитата: | потом сработает, через очередь, событие\блок кода 10, зарегистрированный на окне |
| Спасибо! Отработало как часы!
| |
|
Andrey
|
| постоянный участник
|
Пост N: 7160
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.12.21 13:31. Заголовок: krutoff Посмотрите ..
krutoff Посмотрите доку Сергея Events_in_MiniGui.RU.txt на русском в \MiniGUI\SAMPLES\Advanced\Tsb_5Win Ну и использование событий по тексту программы.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3972
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.12.21 12:02. Заголовок: gfilatov2002 Неболь..
gfilatov2002 Небольшая правка METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse ... IF ::lDrawSpecHd ... nClrFore := ::GetValProp( nClrFore, nClrFore, nJ ) IF nI == nBegin .AND. ::lSelector nClrBacks := ::nClrSpcHdBack ELSE nClrBacks := iif( ::nPhantom == -1, ATail( ::aColumns ):nClrSpcHdBack, nClrPane ) ENDIF nClrBackS := ::GetValProp( nClrBackS, nClrBackS, nJ ) ... Сейчас SpecHeader имеет цвет SELECTOR-а nClrPane по Default, а все остальные цвета ячейки SELECTOR по вертикали ::nClrSpcHdBack (как у Header) PS Если возможно, включите в сборку последнюю версию LetoDbf, клиента и сервер
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1967
Зарегистрирован: 11.02.10
|
|
Отправлено: 08.12.21 13:28. Заголовок: SergKis пишет: Небо..
SergKis пишет: Поправил
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1968
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.12.21 10:54. Заголовок: Выложил 1-й апдейт с..
Выложил 1-й апдейт сборки 21.11 Обновил также Unicode архив. Благодарю за помощь Сергея Киселева Желаю всем участникам форума мира и добра
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3975
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.12.21 12:46. Заголовок: gfilatov2002 надо #..
gfilatov2002 надо #translate <p:System,Sys>.ClientWidth => GetDesktopRealWidth () #translate <p:System,Sys>.ClientHeight => GetDesktopRealHeight() так, как сейчас, дает отступы справа, внизу ~15 pixel, в исправленном везде зазор ~2-3 pixel
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1969
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.12.21 13:12. Заголовок: SergKis пишет: надо..
SergKis пишет: цитата: | надо #translate <p:System,Sys>.ClientWidth => GetDesktopRealWidth () #translate <p:System,Sys>.ClientHeight => GetDesktopRealHeight() |
| Понял, поправлю
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3977
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.12.21 14:31. Заголовок: gfilatov2002 пишет п..
gfilatov2002 пишет еще _TBrowse() DEFAULT aColor := { ; { CLR_FOCUSB, {|c,n,b| c := n, iif( b:nCell == n, -CLR_HRED, -RGB( 128, 225, 225 ) ) } }, ; получше вид будет PS в примере Tsb_2tsb того же эффекта можно достичь кодом без AEval(...). По умолчанию oCol:lFixLite := .T., oCol:lOnGotFocusSelect := .T., oCol:lEmptyValToChar := .T. Скрытый текст
LOCAL oTsb1, oTsb2 ... nH := Int( This.ClientHeight / 2 ) oTsb1 := oHmgData() oTsb1:aEdit := .T. oBrw1 := _TBrowse( oTsb1, "CUST1", "Brw_1", nY, nX, nW, nH ) //AEval( oBrw1:aColumns, {| oCol | oCol:lFixLite := .T., ; // oCol:lEdit := .T., ; // oCol:lOnGotFocusSelect := .T., ; // oCol:lEmptyValToChar := .T. } ) nY += nH + 1 nH -= 1 oTsb2 := oHmgData() oTsb2:aEdit := .T. oBrw2 := _TBrowse( oTsb2, "CUST2", "Brw_2", nY, nX, nW, nH ) //AEval( oBrw2:aColumns, {| oCol | oCol:lFixLite := .T., ; // oCol:lEdit := .T., ; // oCol:lOnGotFocusSelect := .T., ; // oCol:lEmptyValToChar := .T. } ) oBrw1:SetFocus()
|
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1970
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.12.21 15:59. Заголовок: SergKis пишет: еще ..
SergKis пишет: цитата: | еще _TBrowse() ... в примере Tsb_2tsb |
| Понял, уже поправил и выложил новый инсталлятор Благодарю за помощь
| |
|
|
SergKis
|
| постоянный участник
|
Пост N: 3980
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.12.21 16:28. Заголовок: gfilatov2002 лучше ..
gfilatov2002 лучше так STATIC FUNCTION RecordBrowse( oBrw ) LOCAL oCol, ; aArr := {} FOR EACH oCol IN oBrw:aColumns //AAdd( aArr, { oCol:cHeading, Eval( oCol:bData ) } ) AAdd( aArr, { oCol:cHeading, oBrw:GetValue( oCol ) } ) NEXT SBrowse( aArr, "Record View", {|| .T. }, { "Key", "Value" } ) RETURN NIL
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1971
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.12.21 17:33. Заголовок: SergKis пишет: лучш..
SergKis пишет: OK
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3982
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.12.21 22:00. Заголовок: gfilatov2002 Предла..
gfilatov2002 Предлагаю правку SBrowse(), что бы можно было управлять тсб и окном + иметь общую ф-ю для работы с записью из тсб, т.е. Скрытый текст
FUNCTION SBrowse( uAlias, cTitle, bSetUp, aCols, nWidth, nHeight, lSql ) // idea from xBrowse LOCAL cFormName, oBrw, nSaveSelect, cDbf, cAlias, lEdit, cTable LOCAL lbSetUp := HB_ISBLOCK( bSetUp ) DEFAULT uAlias := Alias(), ; cTitle := iif( ValType( uAlias ) == "C", uAlias, "SBrowse" ), ; bSetUp := {|| .F. }, ; aCols := {}, ; nWidth := GetSysMetrics( 0 ) * .75, ; nHeight := GetSysMetrics( 1 ) / 2, ; lSql := .F. IF ValType( uAlias ) == 'C' .AND. Select( uAlias ) == 0 nSaveSelect := Select() IF lSql cTable := GetUniqueName( "SqlTable" ) dbUseArea( .T.,, "SELECT * FROM " + uAlias, cTable,,, "UTF8" ) SELECT &cTable cAlias := cTable uAlias := cAlias ELSE cDbf := uAlias cAlias := uAlias TRY dbUseArea( .T., NIL, cDbf, cAlias, .T. ) uAlias := cAlias CATCH uAlias := { { uAlias } } END ENDIF ELSEIF ValType( uAlias ) == 'N' If ! Empty( Alias( uAlias ) ) uAlias := Alias( uAlias ) ELSE uAlias := { { uAlias } } ENDIF ELSEIF ValType( uAlias ) $ 'BDLP' uAlias := { { uAlias } } #ifdef __XHARBOUR__ ELSEIF ValType( uAlias ) == "H" uAlias := aHash2Array( uAlias ) #endif ENDIF cFormName := GetUniqueName( "SBrowse" ) DEFINE WINDOW &cFormName AT 0, 0 WIDTH nWidth HEIGHT nHeight TITLE cTitle CHILD BACKCOLOR RGB( 191, 219, 255 ) nWidth -= 20 nHeight -= 50 DEFINE TBROWSE oBrw AT 10, 10 Alias ( uAlias ) WIDTH nWidth - 16 HEIGHT nHeight - 30 HEADER aCols ; AUTOCOLS SELECTOR 20 lEdit := Eval( bSetUp, oBrw ) lEdit := iif( ValType( lEdit ) == "L", lEdit, .F. ) WITH OBJECT oBrw :nTop := 10 :nLeft := 10 :nBottom := :nTop + nHeight - 30 :nRight := :nLeft + nWidth - 16 :lEditable := lEdit :lCellBrw := lEdit :nClrLine := COLOR_GRID :nClrHeadBack := { CLR_WHITE, COLOR_GRID } :lUpdate := .T. :bRClicked := {|| Record_SBrowse( oBrw ) } IF lEdit AEval( :aColumns, {| o | o:lEdit := .T. } ) ENDIF END WITH END TBROWSE @ nHEIGHT - 12 - iif( _HMG_IsXPorLater, 3, 0 ), 10 BUTTON Btn_1 CAPTION oBrw:aMsg[ 44 ] WIDTH 70 HEIGHT 24 ; ACTION {|| oBrw:Report( cTitle,,,, .T. ), oBrw:GoTop() } @ nHEIGHT - 12 - iif( _HMG_IsXPorLater, 3, 0 ), 90 BUTTON Btn_2 CAPTION "Excel" WIDTH 70 HEIGHT 24 ; ACTION oBrw:ExcelOle() @ nHEIGHT - 12 - iif( _HMG_IsXPorLater, 3, 0 ), nWidth - 76 BUTTON Btn_3 CAPTION oBrw:aMsg[ 45 ] WIDTH 70 HEIGHT 24 ; ACTION ThisWindow.RELEASE If ! lEdit ON KEY ESCAPE ACTION ThisWindow.RELEASE ENDIF IF lbSetUp //!!! Eval( bSetUp, oBrw, .T. ) ENDIF END WINDOW CENTER WINDOW &cFormName ACTIVATE WINDOW &cFormName If ! Empty( cAlias ) ( cAlias )->( dbCloseArea() ) ENDIF If ! Empty( nSaveSelect ) Select( nSaveSelect ) ENDIF RETURN NIL // --------------------------------------------------------------------------------------------------------------------// FUNCTION Record_SBrowse( oBrw, cTitle, bSetUp, aHead, lNoCrLf ) LOCAL oCol, aArr := {}, cHdr DEFAULT cTitle := "Record View", bSetUp := {|| .T. }, aHead := { "Key", "Value" }, lNoCrLf := .T. FOR EACH oCol IN oBrw:aColumns cHdr := oCol:cHeading IF lNoCrLf .and. CRLF $ cHdr cHdr := StrTran( cHdr, CRLF, " " ) ENDIF AAdd( aArr, { cHdr, Eval( oCol:bData ) } ) NEXT SBrowse( aArr, cTitle, bSetUp, aHead ) RETURN NIL
| Задавая в FUNCTION SBrowse( uAlias, cTitle, bSetUp, aCols, nWidth, nHeight, lSql ) // idea from xBrowse в таком виде bSetUp := {|ob,xp| Local lRet := .T. IF !Empty(xp) // второй вход в блок. Можно менять размеры окна + параметры тсб по переменной ob и This. среды окна ... ENDIF Return lRet } и исп. Record_SBrowse( oBrw, cTitle, bSetUp, aHead ) как самостоятельный вызов к любому тсб. PS Назвать ф-ю можно по традиции FUNCTION _Record_SBrowse( oBrw, cTitle, bSetUp, aHead, lNoCrLf ) или FUNCTION _SBrowse_Record( oBrw, cTitle, bSetUp, aHead, lNoCrLf )
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1972
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.12.21 22:42. Заголовок: SergKis пишет: Пред..
SergKis пишет: цитата: | Предлагаю правку SBrowse() |
| Принято
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3983
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.12.21 22:56. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет Я в тексте небольшую правку сделал, перенес вызов блока 2-ой раз еще ниже (строки //!!!) Пример сейчас делаю. Ф-ю для работы с записью назвал FUNCTION SBrowse_Record( oBrw, cTitle, bSetUp, aHead, lNoCrLf ) как приложение к основной SBrowse(), если надо пере назвать, скажите
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3984
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.12.21 01:11. Заголовок: SergKis пишет Пример..
SergKis пишет Пример тут https://TransFiles.ru/jg78m PS Еще вариант вызова в примере bSetUp := {|ob,xp| IF !Empty(xp) ob:SetNoHoles() ob:SetFocus() ENDIF Return .T. } sBrowse( Alias(), "DEMO. Test new SBrowse", bSetUp, , Sys.ClientWidth, Sys.ClientHeight )
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3985
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.12.21 09:36. Заголовок: gfilatov2002 Сделал..
gfilatov2002 Сделал др. вариант SBrowse, привязал размеры к размеру фонта Пример тут https://TransFiles.ru/7xea7 PS не оч. нравится место (может др. предложите) lRec := HB_ISARRAY( uAlias ) .and. Len( uAlias[1] ) == 2 .and. Len( aCols ) == 2 .and. ; aCols[1] == "Key" .and. aCols[2] == "Value" возможно, надо добавить MODAL окно через параметр FUNCTION SBrowse( uAlias, cTitle, bSetUp, aCols, nWidth, nHeight, lSql, lModal ) // idea from xBrowse PS2 Забыл убрать опыт, надо поправить SBrowse DEFAULT uAlias := Alias(), ; ... lSql := .F., ; bAfter := {|ob| ob:SetNoHoles(), ob:SetFocus() } ... и FUNCTION SBrowse_Record( oBrw, cTitle, bSetUp, aHead, nWidth, nHeight, lNoCrLf ) ... SBrowse( aArr, "Record View", bSetUp, { "Key", "Value" }, nWidth, nHeight ) ...
| |
|
PSP
|
| постоянный участник
|
Пост N: 1623
Зарегистрирован: 27.01.07
|
|
Отправлено: 10.12.21 10:04. Заголовок: SergKis пишет: Сдел..
SergKis пишет: Разрешите встрять) Если в примере нажать кнопку Excel, но экселя нет на компе, появляется окно с ошибкой, после закрытия которого бровс ломается.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3986
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.12.21 10:14. Заголовок: PSP пишет Если в при..
PSP пишет цитата: | Если в примере нажать кнопку Excel, но экселя нет на компе, появляется окно с ошибкой, после закрытия которого бровс ломается |
| Еще раз проверил, работает у меня и таблица и запись => все в Excel уходит, но если нет excel, надо в методе тсб добавлять проверку, но это другое , пока эти места идут, как есть.
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|