Форум » GUI » TsBrowse в Минигуи (продолжение) » Ответить

TsBrowse в Минигуи (продолжение)

Vlad04: TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру [quote] 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 [/quote] Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Andrey: Haz пишет: а oBrw:nAt не подходит ? А если добавляется/удаляется запись ? Он автоматом пересчитывается ?

Haz: Andrey пишет: Он автоматом пересчитывается ? ХЗ попробуй

Andrey: Попробовал так: nI := 1 oBrw:aColumns[ nI ]:cHeading := "№№" oBrw:aColumns[ nI ]:bData := {|| oBrw:nLogicPos } Вроде работает правильно, при удалении/добавлении записи счетчик ставиться правильно. Это при сортировке по скрытой колонке по содержимому STR(NKVAR)+CKVAR - oBrwA:SetOrder(2, , .F. )


Andrey: Заметил такую особенность. Если есть первые скрытые столбцы, то при движение маркера/курсора на первые столбцы, он пропадает. Юзер не видит курсор, у него паника.... Как исправить пропадание курсора из таблицы ?

Haz: Andrey пишет: Как исправить пропадание курсора из таблицы ? Не использовать скрытые столбцы или менять исходники TS я отказался от скрытых...

Andrey: Нашёл один вариант. Если колонки скрытые стоят первыми, то можно делать так: oBrwA:nFreeze := 3 // Заморозить первых ХХ столбца И ещё тогда наверно можно скрытые колонки переместить в первые ряды и заморозить их.

Haz: Andrey пишет: Нашёл один вариант зачем они вообще нужны если их скрыли, их лучше удалить . Потребуется - добавить Удаляются ведь только колонки , поля в алиасе остаются

Haz: Григорий . можно в метод ::Edit() первыми строками добавить [pre2] IF !IsInsertActive() iif( _HMG_IsXPorLater, KeyToggleNT( VK_INSERT ), KeyToggle( VK_INSERT ) ) END [/pre2] Не все владеют слепой печатью, пользователи плачут что печатают уткнувшись в клаву, а когда глаза поднимают, то видят что был режим замены и стерто половина того что было в длинном текстовом поле Как универсальный вариант, можно добавить флаг oBrw:lInsert и если его выставили в .Т. как oBrw:lInsert := .T. при инициализации бровса , то так [pre2] IF ValType(::lInsert) == "L" IF IsInsertActive() <> ::lInsert iif( _HMG_IsXPorLater, KeyToggleNT( VK_INSERT ), KeyToggle( VK_INSERT ) ) END END [/pre2] тогда можно не только назначать по умолчанию, но и отключать обработку как oBrw:lInsert := NIL

gfilatov2002: Haz пишет: IF ValType(::lInsert) == "L" IF IsInsertActive() <> ::lInsert iif( _HMG_IsXPorLater, KeyToggleNT( VK_INSERT ), KeyToggle( VK_INSERT ) ) END END Дельное предложение! Принимается

Andrey: Привет всем ! Работаю с SetArrayTo(). В процессе удаляю все записи с таблицы. Одна всегда остаётся. И не редактируется. Наверно это мираж-запись, чтобы SetArrayTo() не сломался. Как определить что юзер удалил все записи из таблицы и закрыть таблицу ? oBrw:nAt возвращает всегда 1.

Haz: Andrey пишет: Наверно это мираж-запись, чтобы SetArrayTo() не сломался. Сейчас придет SergKis и расскажет зачем он туда миражей напихал ... я воздержусь, скажу только по следующему вопросу Andrey пишет: oBrw:nAt возвращает всегда 1. ::nAt используется в исходнике TS как индекс массива , к примеру строка 1252 исходника [pre2] ::aArray[ ::nAt, 1 ] ) [/pre2] Вывод думаю очевиден Andrey пишет: Как определить что юзер удалил все записи из таблицы и закрыть таблицу ? или переходить на ARRAYRDD какой нить и смотреть на RecCount() или в самом массиве держать признак и анализировать его

SergKis: Andrey пишет:В процессе удаляю все записи с таблицы. Одна всегда остаётся. И не редактируется А посмотреть, что прописано в TsBrowse при удалении слабо ? Ты используешь метод DeleteRow(lAll) для удаления, и вряд ли бы ты хотел, что бы всегда сваливалась программа при удалении последней записи. поэтому сделано для массива:[pre2] METHOD DeleteRow(lAll) CLASS TSBrowse ... If Len( ::aArray ) == 0 ::aArray := { AClone( ::aDefValue ) } ::lPhantArrRow := .T. If ::aArray[ 1, 1 ] == Nil ARRDEL_( ::aArray[ 1 ], 1 ) EndIf EndIf ... [/pre2] Проверять удаление последней записи и др. валидности за тебя никто делать не будет.

SergKis: Andrey пишет:Работаю с SetArrayTo() Ты работаешь\используешь TsBrowse, а не SetArrayTo(), SetArray(), SetFields() - это методы установки начальных данных для работы TsBrowse, чем отличаются можно глянуть текст, для ясности в голове, что и как применять, а то складывается впечатление и примеров много сделал, а суть (откуда ноги растут) пропустил

Andrey: SergKis пишет: а то складывается впечатление и примеров много сделал, а суть (откуда ноги растут) пропустил Это точно !

SergKis: Andrey пишет:Это точно ! Надеюсь ты увидел в приведенном куске текста ::lPhantArrRow := .T. можешь для массива воспользоваться после вызова метода удаления If oBrw:lPhantArrRow // тек.\последняя\первая запись фантомная // тут дейсвия по закрытию TsBrowse EndIf Другой (общий) вариант задать oBrw:bDelete := {| nAt,oBr,lAll | lDeleteRec := .T., .T. } и в функции удаления делаем: Private lDeleteRec := .F. oBrw:DeleteRow() If lDeleteRec .and. Len(oBrw:aArray) == 1 // тут дейсвия по закрытию TsBrowse EndIf

Andrey: SergKis , спасибо за разъяснения ! Понял куда двигаться !

SergKis: Andrey пишет:Понял куда двигаться ! Тогда не забудь, что есть и oBrw:bPostDel := {|oBr| ... } и если в oBrw:bDelete обрабатывается логический возврат ( при .F. отменяется удаление), то bPostDel выполняется всегда после удаления. Устанавливать режим удаления желательно oBrw:SetDeleteMode( lOnOff, lConfirm, bDelete, bPostDel )

Haz: SergKis пишет: Тогда не забудь Ну все разжевал Тогда и я спрошу, вдруг мне так же повезет Как отловить событие изменения ширины колонки мышкой? Хочу автосохранение для пользователя сделать. Вчера озадачился не успел закончить. Отложил на послепраздники. Пока лезу через событие мыши - отпускание левой кнопки. Прямого признака колонки типа bHeightChange нет. Есть просто прорисовка вертикали vertline() Блок напрашивается туда, но пока хочу подобраться стандартными путями

SergKis: Haz пишет: вдруг мне так же повезет повезло или нет, сам решай - протокол сообщений (вывод вставлен в TSBROWSE:HANDLEEVENT и TCONTROL:HANDLEEVENT): ... TSBROWSE:HANDLEEVENT 135 WM_GETDLGCOD TSBROWSE:HANDLEEVENT 513 WM_LBUTTONDO TCONTROL:HANDLEEVENT 513 WM_LBUTTONDO TSBROWSE:HANDLEEVENT 512 WM_MOUSEMOVE TCONTROL:HANDLEEVENT 512 WM_MOUSEMOVE ... TCONTROL:HANDLEEVENT 512 WM_MOUSEMOVE TSBROWSE:HANDLEEVENT 512 WM_MOUSEMOVE TCONTROL:HANDLEEVENT 512 WM_MOUSEMOVE TSBROWSE:HANDLEEVENT 514 WM_LBUTTONUP TCONTROL:HANDLEEVENT 514 WM_LBUTTONUP TSBROWSE:HANDLEEVENT 533 WM_CAPTURECHANGED // думаю это TCONTROL:HANDLEEVENT 533 WM_CAPTURECHANGED TSBROWSE:HANDLEEVENT 132 WM_NCHITTEST TCONTROL:HANDLEEVENT 132 WM_NCHITTEST

SergKis: Haz На мой вхгляд мудришь, воспользуйся уже готовым[pre2] METHOD Destroy() CLASS TSBrowse LOCAL i Default ::lDestroy := .F. If ::bDestroy != Nil Eval(::bDestroy, Self) EndIf [/pre2] т.е. при завершении работы с Tsb сохраняй размеры колонок (с кол-вом их), а перед созданием tsb, считывай, а в процессе работы пусть двигают колонки сколько хотят



полная версия страницы