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



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

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




Пост N: 2393
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.04.19 16:02. Заголовок: Andrey Посмотри исх..


Andrey
Посмотри исходник :Enabled(), думаю, увидишь
Можешь найти тему "Новая версия ...", посвященную :Enabled()

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




Пост N: 6262
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.04.19 16:57. Заголовок: Хотелось бы простого..


Хотелось бы простого написания, как то так - oBrw:Enabled( .F. , {BLACK,SILVER} )
А так придётся писать отдельную внешнюю функцию.
Не совсем удобно...
И в METHOD Enabled() нет сохранения
oBrw:nClrLine := ???  // цвет линий между ячейками таблицы


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




Пост N: 2394
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.04.19 18:10. Заголовок: Andrey Ты, точно, п..


Andrey
Ты, точно, посмотрел исходник и пост в теме ?
Григорий делал переменные объекта, для уст. цветов закраски.

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


Так заработала, только вверху шапки и внизу подвала за границей таблицы НЕ КРАСЯТСЯ ячейки.

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




Пост N: 2402
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.04.19 20:27. Заголовок: Andrey пишет А как э..


Andrey пишет
 цитата:
А как это использовать - не понимаю.


Внимательно, медленно просмотри метод :Enabled()
Найди переменные, сравни со своим текстом ...

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

Что я не так делаю ?

Спасибо: 0 
Профиль
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()))

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

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




Пост N: 6268
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.04.19 17:11. Заголовок: SergKis - СПАСИБО ! ..


SergKis - СПАСИБО !

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


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




Пост N: 6274
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.04.19 21:04. Заголовок: Haz пишет: тогда в..


Haz пишет:

 цитата:

тогда в своей программе при определении бровса достаточно указать
oBrw:bEditLog := { |a,b,c| WriteEditLog( a, b, c:cAlias ) }



Поставил у себя такую замечательную эту штуку в тестовый пример !
Отличное решение, юзера будут просто в восторге.
Я ещё сделал поиск по номеру записи - вообще все претензии что программа сама удалила и исправила - пропадут !
Правда не по всем полям происходит запись. Нужно разбираться.

Спасибо БОЛЬШОЕ Haz !

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




Пост N: 1494
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.04.19 21:24. Заголовок: Andrey пишет: Правд..


Andrey пишет:

 цитата:
Правда не по всем полям происходит запись. Нужно разбираться.


Рад что пригодилось.
Запись не идет по тем полям где используется bPrevEdit с последующим отказом от редвктирования., но с изменением значения. Тут нужно самому позаботиться, т. к. метод Edit не вызывается.
В целом использую подобный функционал несколько лет. Мотивирует пользователя лучше чем пинок, особенно когда все видят героя.

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




Пост N: 1495
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.04.19 21:42. Заголовок: Haz пишет: В целом ..


Haz пишет:

 цитата:
В целом использую подобный функционал несколько лет.


Добавлю, что из объекта tsBrosе который передается блоку третьим параметром, легко достать номер колонки и соответственно имя Поля, которое изменили.
Никак не доходят руки до контрольного примера запятая будет посвободнее обязательно что-нибудь простое напишу

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




Пост N: 6275
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.04.19 22:20. Заголовок: Да мне Сергей посове..


Да мне Сергей посоветовал так сделать:
  // запись в лог-файл всех изменений полей БД 
oBrw1:bEditLog := { |xo,xn,ob| WriteEditLog( xo, xn, ob ) }

Вот мой код записи Скрытый текст

Только мне пришлось делать nCol := oBrw:nCell - 1

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




Пост N: 1496
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.04.19 22:42. Заголовок: Andrey пишет: Тольк..


Andrey пишет:

 цитата:
Только мне пришлось делать nCol := oBrw:nCell - 1


Возможно используешь :Selector по этому нумерация едет. Попробуй выдернуть имя поля через oCol:cName

Продолжу тут.
Я лог веду в dbf, с указанием имени поля и тайм штампа времени изменения. Это позволяет вне завистмости в каком бровсе поменяли значение, всегда правильно показывать хронологию.
Показ реализован прямо в бровсе по правой кнопке.
Имя колонки в логе меня не особо интересует, т. к. показываю лог именно в ней.

Спасибо: 0 
Профиль
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 для начала

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

т.е. подготовлена работа со след. колонкой

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


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




Пост N: 1497
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.04.19 13:05. Заголовок: SergKis пишет: т.е...


SergKis пишет:

 цитата:
т.е. подготовлена работа со след. колонкой


Может обработку bEditLog поднять перед этой подготовкой?
Посмотрю с работы, с телефона не реально.

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