Автор | Сообщение |
Vlad04
|
| постоянный участник
|
Пост N: 420
Зарегистрирован: 13.10.05
|
|
Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)
TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру цитата: | DEFINE TBROWSE oBrw2 ; AT 60,450 ; ALIAS cAlias ; OF Form1 ; WIDTH 330 ; HEIGHT 340 ; FONT "Verdana" ; SIZE 9 ; ON DBLCLICK CopyRec(); ON GOTFOCUS fModelo_Hab(2) ; AUTOFILTER ; CELLED EDIT; VALUE nRec; GRID |
| Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
Andrey
|
| постоянный участник
|
Пост N: 6261
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.04.19 15:44. Заголовок: SergKis пишет: oBrw..
SergKis пишет: цитата: | oBrw:Enabled( lEnable ) - с закраской тсб |
| А как свою закраску установить ? Хочется черный фон и серые буквы. Можно сделать как то так - oBrw:Enabled( .F. , {BLACK,SILVER} ) ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2393
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.04.19 16:02. Заголовок: Andrey Посмотри исх..
Andrey Посмотри исходник :Enabled(), думаю, увидишь Можешь найти тему "Новая версия ...", посвященную :Enabled()
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6262
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.04.19 16:57. Заголовок: Хотелось бы простого..
Хотелось бы простого написания, как то так - oBrw:Enabled( .F. , {BLACK,SILVER} ) А так придётся писать отдельную внешнюю функцию. Не совсем удобно... И в METHOD Enabled() нет сохранения oBrw:nClrLine := ??? // цвет линий между ячейками таблицы
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2394
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.04.19 18:10. Заголовок: Andrey Ты, точно, п..
Andrey Ты, точно, посмотрел исходник и пост в теме ? Григорий делал переменные объекта, для уст. цветов закраски.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6263
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.04.19 20:04. Заголовок: SergKis пишет: Ты, ..
SergKis пишет: цитата: | Ты, точно, посмотрел исходник и пост в теме ? |
| Да вроде да ! По теме нашёл gfilatov2002 пишет: цитата: | Для этого я добавил в класс DATA nClr_Gray AS NUMERIC INIT CLR_GRAY DATA nClr_HGray AS NUMERIC INIT CLR_HGRAY |
| А как это использовать - не понимаю. У себя сделал тест: oBrw:Enabled( .F. ) // блокировка таблицы с закраской nClrLine := TsbColorRepl(oBrw, BLACK, SILVER) MsgDebug(...) oBrw:nClrLine := nClrLine // восстановить цвет линий между ячейками таблицы oBrw:Enabled( .T. ) // разблокировка таблицы с закраской .... /////////////////////////////////////////////////////////////////// // заменить текущий цвет TBROWSE FUNCTION TsbColorRepl(oBrw, aBackColor, aFontColor) LOCAL nJ, nBackColor, nFontColor, nSaveColor nFontColor := ToRGB( aFontColor ) nBackColor := ToRGB( aBackColor ) // ------ изменить цвета Tsbrowse ------------ FOR nJ := 1 to LEN(oBrw:aColumns) // меняем цвет по всем колонкам oBrw:SetColor( { 1}, { { || nFontColor } } ) // 1 , текста в ячейках таблицы oBrw:SetColor( { 2}, { { || nBackColor } } ) // 2 , фона в ячейках таблицы oBrw:Setcolor( { 3}, { nFontColor } ) // 3 , текста шапки таблицы oBrw:SetColor( { 4}, { { || nBackColor } } ) // 4 , фона шапка таблицы oBrw:SetColor( { 9}, { nFontColor } ) // 9 , текста подвала таблицы oBrw:SetColor( {10}, { { || nBackColor } } ) // 10, фона подвала таблицы //oBrw:SetColor( {15}, { { || CLR_WHITE } } ) // 15, линий между ячейками таблицы NEXT nSaveColor := oBrw:nClrLine // сохранить цвет линий между ячейками таблицы oBrw:nClrLine := nFontColor // новый цвет линий между ячейками таблицы // цвет фона под таблицей oBrw:hBrush := CreateSolidBrush( aBackColor[1], aBackColor[2], aBackColor[3] ) RETURN nSaveColor Так заработала, только вверху шапки и внизу подвала за границей таблицы НЕ КРАСЯТСЯ ячейки.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2402
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.04.19 20:27. Заголовок: Andrey пишет А как э..
Andrey пишет цитата: | А как это использовать - не понимаю. |
| Внимательно, медленно просмотри метод :Enabled() Найди переменные, сравни со своим текстом ...
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6267
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.04.19 15:12. Заголовок: Всем привет ! Всех п..
Всем привет ! Всех поздравляю с праздниками ! Вопрос возник. Делаю у себя в проге на главной таблице: oBrw:Enabled( .F. ) // блокировка таблицы с закраской Таблица становиться серой и на первом же поле вывода прога сваливается: Error BASE/1003 Переменная не существует: MARK // это первое поле в таблице Called from (b)LISTFIELDTABLE(847) in module: Tbrw_table.prg Called from TSBROWSE:BDATAEVAL(1584) in module: h_tbrowse.prg Called from TSBROWSE:DRAWSELECT(3797) in module: h_tbrowse.prg Called from TSBROWSE:PAINT(9779) in module: h_tbrowse.prg Called from TCONTROL:HANDLEEVENT(878) in module: TControl.prg Called from TSBROWSE:HANDLEEVENT(8328) in module: h_tbrowse.prg Called from EVENTS(95) in module: h_events.prg Called from DOEVENTS(0) Called from CREATEBROWSEPRINTF5(441) in module: form_f5print.prg Called from FORM_F5PRINT(221) in module: form_f5print.prg Called from FORMPRINTF5(105) in module: form_f5print.prg Called from (b)BUTTON_UPMENUTABLE(2152) in module: Tbrw_table.prg Вот код: Дата_2 = '{|| (Alias())->MARK }' // это текстовый ини-файл For nI := 1 To Len(aTable) cHeadName := aTable[nI,1 ] // 1 Шапка_ cDateBlock := aTable[nI,2 ] // 2 Дата_ ...... // ------ преобразовать на знаки ------ cHeadName := STRTRAN(cHeadName,";", CRLF ) cDateBlock := STRTRAN(cDateBlock,'CRLF', '"' + CRLF + '"' ) xVal := Eval( &( cDateBlock ) ) aAligh := &(cAlighColum) // выравнивание: cells, header, footer ADD COLUMN TO TBROWSE oBrw // добавить новую колонку в TBROWSE oBrw:aColumns[nI]:cHeading := cHeadName // заголовок колонки oBrw:aColumns[nI]:bData := &( cDateBlock ) // поля в колонке 847 строка oBrw:aColumns[nI]:nAlign := aAligh[1] // выравнивание: cells Что я не так делаю ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2438
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.04.19 16:04. Заголовок: Andrey пишет Что я н..
Andrey пишет Для таких действий в объект колонки внесена переменная\свойство cAlias, т.е. oCol:bData := MacroBlock('MARK') oCol:cAlias := 'MY1' если алиас совпадает с алиасом тсб, то oCol:cAlias := oBrw:cAlias или обычный вариант oCol:bData := FieldWBlock('MARK', Select(Alias()))
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2439
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.04.19 16:44. Заголовок: PS Расшифровка cData..
PS Расшифровка cDataBlock := '{|| MARK }' bVal := &( cDataBlock ) xVal := Eval( bVal ) ? cDataBlock, xVal, bVal oCol:bData := bVal If ! '->' $ cDataBlock oCol:cAlias := oBrw:cAlias EndIf
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6268
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.04.19 17:11. Заголовок: SergKis - СПАСИБО ! ..
SergKis - СПАСИБО !
|
|
|
Haz
|
| |
Пост N: 1487
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.04.19 10:30. Заголовок: CheckBox по ENTER
Вопрос поднял Сергей, я немного перефразирую и спрошу тут С какой целью в METHOD TSBrowse:Edit() в CheckBox игнорируется VK_RETURN ? Кроме как защита от дурака , когда пользователь тыкает бездумно по кнопкам и не смотрит что происходит у меня другого объяснения нет. Ведь до кнопки VK_SPACE нужно типа "осмысленно" дотянуться. Только мне кажется что если бездумно , то все равно куда тянуться, до 1, 0, Y, N, S, ENTER, SPACE но только ENTER в этом случае игнорируется. В итоге пользователь до изнеможения долбит ENTER , забывая про SPACE и устав кликает мышью. Может восстановим VK_RETURN в правах ? для совместимости можно с флагом типа ::lCheckBoxIgnoreReturn по умолчанию TRUE , а можно и без тогда If nKey != VK_RETURN .OR. # ::lCheckBoxIgnoreReturn If Upper( Chr( nKey ) ) $ "YCST1" ::lChanged := uVar == .F. uVar := .T. ElseIf Upper( Chr( nKey ) ) $ "FN0" ::lChanged := uVar == .T. uVar := .F. ElseIf nKey == VK_SPACE uVar := ! uValue ::lChanged := .T. Else Return 0 EndIf ::lHasChanged := If( ::lChanged, .T., ::lHasChanged ) ::oWnd:nLastKey := VK_RETURN ::PostEdit( uVar, nCell ) ::lPostEdit := .F. Return 0 Else ::lPostEdit := .T. ::lChanged := .F. ::oWnd:nLastKey := nKey ::PostEdit( uValue, nCell ) ::lPostEdit := .F. Return 0 EndIf
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6274
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.04.19 21:04. Заголовок: Haz пишет: тогда в..
Haz пишет: цитата: | тогда в своей программе при определении бровса достаточно указать oBrw:bEditLog := { |a,b,c| WriteEditLog( a, b, c:cAlias ) } |
| Поставил у себя такую замечательную эту штуку в тестовый пример ! Отличное решение, юзера будут просто в восторге. Я ещё сделал поиск по номеру записи - вообще все претензии что программа сама удалила и исправила - пропадут ! Правда не по всем полям происходит запись. Нужно разбираться. Спасибо БОЛЬШОЕ Haz !
|
|
|
Haz
|
| |
Пост N: 1494
Зарегистрирован: 20.02.11
|
|
Отправлено: 27.04.19 21:24. Заголовок: Andrey пишет: Правд..
Andrey пишет: цитата: | Правда не по всем полям происходит запись. Нужно разбираться. |
| Рад что пригодилось. Запись не идет по тем полям где используется bPrevEdit с последующим отказом от редвктирования., но с изменением значения. Тут нужно самому позаботиться, т. к. метод Edit не вызывается. В целом использую подобный функционал несколько лет. Мотивирует пользователя лучше чем пинок, особенно когда все видят героя.
|
|
|
Haz
|
| |
Пост N: 1495
Зарегистрирован: 20.02.11
|
|
Отправлено: 27.04.19 21:42. Заголовок: Haz пишет: В целом ..
Haz пишет: цитата: | В целом использую подобный функционал несколько лет. |
| Добавлю, что из объекта tsBrosе который передается блоку третьим параметром, легко достать номер колонки и соответственно имя Поля, которое изменили. Никак не доходят руки до контрольного примера запятая будет посвободнее обязательно что-нибудь простое напишу
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6275
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.04.19 22:20. Заголовок: Да мне Сергей посове..
Да мне Сергей посоветовал так сделать: // запись в лог-файл всех изменений полей БД oBrw1:bEditLog := { |xo,xn,ob| WriteEditLog( xo, xn, ob ) } Вот мой код записи Скрытый текст
///////////////////////////////////////////////////////////////////// // запись в лог-файл всех изменений полей БД FUNCTION WriteEditLog( xOld, xNew, oBrw ) LOCAL cFileLog := ChangeFileExt( Application.ExeName, ".log" ) LOCAL nCol, cHead, cStr, CRZ := "; " nCol := oBrw:nCell - 1 // номер колонки в таблице cHead := oBrw:aColumns[ nCol ]:cHeading // имя шапки колонки IF LEN(ALLTRIM(cHead)) == 0 cHead := HB_NtoS(nCol) ENDIF cStr := DToC( Date() ) + CRZ + Time() + CRZ cStr += NetName()+"/"+hb_UserName()+"/User-"+HB_NtoS(M->nPubUser) + CRZ // Кто изменил данные cStr += oBrw:cAlias + CRZ + "ID=" + HB_NtoS( (oBrw:cAlias)->ID ) + CRZ cStr += "Запись: " + HB_NtoS( (oBrw:cAlias)->(RecNo()) ) + CRZ cStr += "Колонка: " + cHead + CRZ IF VALTYPE(xOld) == "C" cStr += "замена: [" + ALLTRIM(xOld) + "] на: [" + ALLTRIM(xNew) + "]" + CRZ ELSE cStr += "замена: [" + cValToChar(xOld) + "] на: [" + cValToChar(xNew) + "]" + CRZ ENDIF cStr += CRLF STRFILE(cStr, cFileLog, .T.) RETURN NIL
| Только мне пришлось делать nCol := oBrw:nCell - 1
|
|
|
Haz
|
| |
Пост N: 1496
Зарегистрирован: 20.02.11
|
|
Отправлено: 27.04.19 22:42. Заголовок: Andrey пишет: Тольк..
Andrey пишет: цитата: | Только мне пришлось делать nCol := oBrw:nCell - 1 |
| Возможно используешь :Selector по этому нумерация едет. Попробуй выдернуть имя поля через oCol:cName Продолжу тут. Я лог веду в dbf, с указанием имени поля и тайм штампа времени изменения. Это позволяет вне завистмости в каком бровсе поменяли значение, всегда правильно показывать хронологию. Показ реализован прямо в бровсе по правой кнопке. Имя колонки в логе меня не особо интересует, т. к. показываю лог именно в ней.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2475
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.04.19 11:34. Заголовок: Haz пишет Имя колонк..
Haz пишет цитата: | Имя колонки в логе меня не особо интересует, т. к. показываю лог именно в ней |
| Посмотрел на примере, oBrw:nCell и nCol в METHOD PostEdit, разные. Добавил в вызов nCol METHOD PostEdit( uTemp, nCol, bValid ) CLASS TSBrowse ... xNewEditValue := ::bDataEval( ::aColumns[ nCol ], , nCol ) //Igor Nazarov If hb_isBlock( ::bEditLog ) .and. ::aColumns[ nCol ]:xOldEditValue != xNewEditValue Eval( ::bEditLog, ::aColumns[ nCol ]:xOldEditValue, xNewEditValue, Self, nCol ) EndIf Return Nil В задаче oBrw1:bEditLog := { |xo,xn,ob,nc| WriteEditLog( xo, xn, ob, nc ) } ... FUNCTION WriteEditLog( xOld, xNew, oBrw, nCell ) LOCAL cFileLog := ChangeFileExt( Application.ExeName, ".log" ) LOCAL nCol, cHead, cStr, CRZ := "; ", oCol, cAls, cName, oC WITH OBJECT oBrw DEFAULT nCell := :nCell oC := :aColumns [ nCell ] oCol := :GetColumn( nCell ) // - iif( :lSelector, 1, 0 ) ) cName := oCol:cName nCol := :nColumn( cName ) cAls := iif( Empty(oCol:cAlias), :cAlias, oCol:cAlias ) cHead := oCol:cHeading END WITH ? cAls , oBrw:lSelector, oBrw:nCell ? nCell, oC:cName, oC:cHeading ? nCol , cName , cHead ... получил в _MsgLog.txt MAIN .F. 8 7 FTEXT Text 7 FTEXT Text правилась колонка 7 FTEXT Думаю надо добавить в вызов номер колонки редактирования в вызов :bEditLog для начала
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2476
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.04.19 11:54. Заголовок: Причина другого знач..
Причина другого значения :nCell понятна, уже выполнены команды If nLastKey == VK_UP .and. ::lPostEditGo ::GoUp() ElseIf nLastkey == VK_RIGHT .and. ::lPostEditGo ::GoRight() ElseIf nLastkey == VK_LEFT .and. ::lPostEditGo ::GoLeft() ElseIf nLastkey == VK_DOWN .and. ::lPostEditGo ::GoDown() ::Refresh( .F. ) ElseIf ::aColumns[ nCol ]:nEditMove >= 1 .and. ::aColumns[ nCol ]:nEditMove <= 5 // excel-like behaviour post-edit movement Eval( aMoveCell[ ::aColumns[ nCol ]:nEditMove ] ) ElseIf ::aColumns[ nCol ]:nEditMove == 0 ::DrawSelect() EndIf т.е. подготовлена работа со след. колонкой
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2477
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.04.19 12:13. Заголовок: Можно сделать так ..
Можно сделать так If hb_isBlock( ::bEditLog ) .and. ::aColumns[ nCol ]:xOldEditValue != xNewEditValue uTemp := ::nCell ::nCell := nCol Eval( ::bEditLog, ::aColumns[ nCol ]:xOldEditValue, xNewEditValue, Self ) ::nCell := uTemp EndIf
|
|
|
Haz
|
| |
Пост N: 1497
Зарегистрирован: 20.02.11
|
|
Отправлено: 28.04.19 13:05. Заголовок: SergKis пишет: т.е...
SergKis пишет: цитата: | т.е. подготовлена работа со след. колонкой |
| Может обработку bEditLog поднять перед этой подготовкой? Посмотрю с работы, с телефона не реально.
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|