Автор | Сообщение |
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
[только новые]
|
|
Dima
|
| |
Пост N: 6596
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.09.17 17:07. Заголовок: Andrey Попробуй пои..
Andrey Попробуй поиграть с nfreeze и lLockFreeze
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5535
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.09.17 12:55. Заголовок: Dima пишет: Попробу..
Dima пишет: цитата: | Попробуй поиграть с nfreeze и lLockFreeze |
| У меня уже стоит : oBrw1:nFreeze := 1 // Заморозить столбец oBrw1:lLockFreeze := .T. // Избегать прорисовки курсора на замороженных столбцах А если убрать, то всё равно пустой столбец появляется, последним и вся таблица с пустым столбцом становиться.
|
|
|
Петр
|
| постоянный участник
|
Пост N: 1560
Зарегистрирован: 09.10.06
|
|
Отправлено: 25.09.17 13:06. Заголовок: Andrey пишет: У мен..
Andrey пишет: цитата: | У меня уже стоит : oBrw1:nFreeze := 1 |
| Ну так все 8 или сколько там есть попробуйте заморозить.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5536
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.09.17 14:44. Заголовок: Петр пишет: Ну так ..
Петр пишет: цитата: | Ну так все 8 или сколько там есть попробуйте заморозить. |
| Сразу не понял что нужно заморозить ВСЕ столбцы. Сделал ! Получилось !!! Таблица вправо перестала сдвигаться. Спасибо БОЛЬШОЕ !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5537
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.09.17 15:27. Заголовок: Рано радовался. Табл..
Рано радовался. Таблица заморозилась и выбора в колонках теперь НЕТ !!! Значит заморозку использовать НЕЛЬЗЯ для этих целей...
|
|
|
Петр
|
| постоянный участник
|
Пост N: 1561
Зарегистрирован: 09.10.06
|
|
Отправлено: 25.09.17 15:54. Заголовок: Andrey пишет: выбо..
Andrey пишет: цитата: | выбора в колонках теперь НЕТ |
| И при oBrw1:lLockFreeze := .F. ?
|
|
|
Dima
|
| |
Пост N: 6597
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.09.17 15:54. Заголовок: oBrw1:lLockFreeze :=..
oBrw1:lLockFreeze := .F. PS Хэх одновременно написали
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5538
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.09.17 16:27. Заголовок: Dima пишет: oBrw1:l..
Dima пишет: Enter заработал, двойной клик мышки нет ! Ерунда опять получается... Писать отдельную функцию на срабатывание мышки - не есть хорошо, когда уже стандартная подключена по умолчанию. Дело в том что хочется обойтись стандартным кодом. У меня везде на нужных колонках стоит только: // обработка до ввода oBrw1:aColumns[2]:bPrevEdit := {|| FieldEditFile(1), FALSE } oBrw1:aColumns[5]:bPrevEdit := {|| FieldImageEdit(), FALSE } oBrw1:aColumns[6]:bPrevEdit := {|| FieldEditFile(2), FALSE }
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1633
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.09.17 12:57. Заголовок: SergKis пишет STATI..
SergKis пишет цитата: | STATIC FUNC On_DrawLine( oBr ) ... |
| Правильно так STATIC FUNC On_DrawLine( oBr ) LOCAL nRow If oBr:lPainted nRow := oBr:nPaintRow If nRow == 1 AFill(oBr:aRowPosRec, 0) EndIf oBr:aRowPosRec[ nRow ] := (oBr:cAlias)->( RecNo() ) EndIf RETURN Nil
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 736
Зарегистрирован: 13.10.05
|
|
Отправлено: 06.12.17 10:40. Заголовок: oBrw1:aColumns:bPre..
цитата: | oBrw1:aColumns[2]:bPrevEdit := ... |
| А можно сделать вызов общий для всех колонок, без указания № колонки ? Т.е. при выходе с редактирования из любой колонки вызывается одна функция или блок.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1659
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.12.17 10:52. Заголовок: Vlad04 1. AEval(oBr..
Vlad04 1. AEval(oBrw1:aColumns, {|oCol| oCol:bPrevEdit := {|val, brw | Prev( val, brw ) }, ; oCol:bPostEdit := {|val, brw, add| Post( val, brw, add ) } ) 2. или FOR ... применить
|
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 737
Зарегистрирован: 13.10.05
|
|
Отправлено: 06.12.17 11:06. Заголовок: Ниже неправильно (вы..
Ниже неправильно (выдает ошибку) AEval(Brw_3:aColumns, {|oCol| oCol:bPostEdit := {|val, brw, add| brw_3:Upstable() } ) Но как-то так хочется, т.е. для всех колонок Brw_3 при выходе с редактирования выполнять стабилизацию Бровса
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1660
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.12.17 11:12. Заголовок: Vlad04 в блок кода ..
Vlad04 в блок кода передаются параметры val, brw, add, используйте их {|val, brw| brw:Upstable() }
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1661
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.12.17 11:17. Заголовок: PS Vlad04 пишет Но к..
PS Vlad04 пишет цитата: | Но как-то так хочется, т.е. для всех колонок Brw_3 при выходе с редактирования выполнять стабилизацию Бровса |
| усложните блок кода, если надо после 2-ой колонки, то AEval(Brw_3:aColumns, {|oCol,nCol| oCol:bPostEdit := iif( nCol == 2, {|val, brw, add| brw:Upstable() }, NIL ) )
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 738
Зарегистрирован: 13.10.05
|
|
Отправлено: 06.12.17 11:20. Заголовок: Скобка одна } пропу..
Скобка одна } пропущена, а так нормально цитата: | AEval(Brw_3:aColumns, {|oCol| oCol:bPostEdit := {|val, brw | brw:Upstable() }} ) |
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5613
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.12.17 14:40. Заголовок: Пробежаться для чтен..
Пробежаться для чтения по колонке для oBrw := SetArrayTo(...) можно так: // Итог по колонке FUNCTION ItogoColumn( oBrw, cNameColumn ) LOCAL nCol := oBrw:nColumn(cNameColumn) LOCAL oCol, nItg := 0 aEval(oBrw:aArray, { |aVal,nElm| nItg += aVal[ nCol ] }) oCol:GetColumn(cNameColumn):cFooting := hb_ntos(nItg) oBrw:DrawFooters() // или // oCol := oBrw:GetColumn(nCol) // oCol:cFooting := hb_ntos(nItg) RETURN NIL или так LOCAL nCol := oBrw:nColumn(cNameColumn) LOCAL nItg := 0 FOR nI := 1 TO LEN(oBrw:aArray) // или oBrw:nLen nItg += oBrw:aArray[ nI, nCol ] NEXT Пробежаться для записи по всей таблице для oBrw := SetArrayTo(...) можно так: ( Запись осуществляется средствами таблицы !) // допустим колонка LMETKA nCol := oBrw:nColumn("LMETKA") FOR nI := 1 TO LEN(oBrw:aArray) // или oBrw:nLen lMark := oBrw:aArray[nI,nCol] oBrw:aArray[nI,nCol] := !lMark NEXT А как такую же операцию сделать для обычного TBROWSE, средствами таблицы ? И не средствами драйвера базы - (oBrw:cAlias)->LMETKA := !lMark
|
|
|
Haz
|
| |
Пост N: 1137
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.12.17 16:36. Заголовок: Andrey пишет: А как..
Andrey пишет: цитата: | А как такую же операцию сделать для обычного TBROWSE, средствами таблицы ? |
| Примерно так FOR nI := 1 TO oBrw:nLen AEval( oBrw:aColumns, {|oCol| Eval(oCol:bData, !Eval(oCol:bData)) }) NEXT
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5614
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.12.17 16:59. Заголовок: Haz пишет: Примерно..
Haz пишет: А позиционирование по строке таблицы - разве не нужно ? По массиву же стоит - oBrw:aArray[nI,nCol] = Или я просто не понял... Можешь написать без Eval() ...
|
|
|
Haz
|
| |
Пост N: 1138
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.12.17 17:36. Заголовок: Andrey пишет: А поз..
Andrey пишет: цитата: | А позиционирование по строке таблицы - разве не нужно |
| нужно добавить oBrw:GoTop() а в цикле oBrw:Skip(1) и указать по какой колонке . в моем примере - по всем ( да и пример этот только показывает как использовать ::bData ) Без Eval() только через драйвер базы, да и Eval тоже неявно использует драйвер. Зачем такой изврат , если драйвер самое быстрое и надежное решение ?
|
|
|
Haz
|
| |
Пост N: 1139
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.12.17 17:47. Заголовок: Haz пишет: пример э..
Haz пишет: цитата: | пример этот только показывает как использовать ::bData |
| bData - это блок выборки / записи , такой же как и в Clipper , он же возвращается функцией FieldWBlock(). при предаче в блок парамера как Eval( ::bData, x ) -этот параметр присваивается в поле. При вызове без параметра - как Eval(::bdata ) возвращает значение поля. в классическом виде это примерно так {|x| if(pCount() == 0, FieldGet(nCol), FieldPut(nCol, x))}. Замечу - блок не заботится о блокировке записи. PS впрочем именно этот блок мы с тобой уже неоднократно обсуждали на форуме. PPS Оно тебе надо ? чем драйвер не угодил то if (oBrw:cAlias)->(Rlock()) (oBrw:cAlias)->&(oBrw:aColumns[oBrw:nCell]:cName) := 'новое значение' (oBrw:cAlias)->(dbUnlock()) end
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|