Форум » 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:....

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

Haz: Andrey пишет: Или это сделать нельзя ? похоже что невозможно , сам остановился на варианте с PrevEdit

Andrey: Хочу сделать обработку полей в своей ОТДЕЛЬНОЙ функции. //* | наименование | алиас | поле | формат поля | AADD( aPole, { "Дата" , "" , "DATE" , "99.99.9999" , .... AADD( aPole, { "Время" , "" , "TIME" , "99:99:99" , ... AADD( aPole, { "Код" , "" , "NEVENT" , "@Z 999" , ... ..... aPole := ListFieldsTbrws() // считать структуру таблицы FOR nI := 1 TO LEN(aPole) ADD COLUMN TO TBROWSE oBrw // добавить новую колонку в TBROWSE .... aDimPole := aPole[nI] oBrw:aColumns[nI]:lEdit := .T. oBrw:aColumns[nI]:bPrevEdit := {|| MyEditPole( aDimPole ) } .... NEXT ... При вызове MyEditPole( aDimPole ) всегда показывается последний массив aPole[ПОСЛЕДНИЙ!!!]. FUNCTION MyEditPole( aPole ) LOCAL lRet := .F. MsgDebug("Здесь хочу сделать обработку ВСЕХ полей БД !",aPole) RETURN lRet Почему ? Как сделать правильно ? Пример тут - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample

gfilatov2002: Andrey пишет: Как сделать правильно ? Ответ отправил по почте


Haz: Andrey пишет: Как сделать правильно ? gfilatov2002 пишет: Ответ отправил по почте думаю в почте примерно так oBrw:aColumns[nI]:bPrevEdit := &("{|| MyEditPole( " + NTOC(nI) + ") }" ) FUNCTION MyEditPole( nI ) ... aDimPole := aPole[nI] ...

gfilatov2002: Haz пишет: oBrw:aColumns[nI]:bPrevEdit := &("{|| MyEditPole( " + NTOC(nI) + ") }" ) Да, так сработает... Но я предложил не использовать макроподстановку, и выкрутился с помощью массива oBrw:aColumns[oBrw:nCell]

Andrey: Спасибо за помощь ! Что выбрать даже и не знаю... Глаза разбегаются... Я сделал еще вариант: oBrw:aColumns[nI]:Cargo := aPole[nI] oBrw:aColumns[nI]:bPrevEdit := {|| MyEditPole( oBrw:aColumns[oBrw:nCell]:Cargo ) }

Haz: Andrey пишет: oBrw:aColumns[nI]:Cargo Андрей, выведи чему равно значение ::cData для каждой колонки и у тебя появится четвертый вариант

Andrey: Не совсем понял для чего выводить - значение ::cData для каждой колонки.... Мне вообще то нужно передать всю строку (текущую) массива aPole[nI], для дальнейшего анализа. Более подробно функция MyEditPole() в примере - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample А как получить допустим по нажатии Enter или мышки в функцию MyEditPole() координаты МАРКЕРА/КУРСОРА ? И длину маркера тоже как получить ?

Haz: Andrey пишет: Не совсем понял для чего выводить - значение ::cData для каждой колонки чтобы убедиться что cData после значка алиаса содержит имя поля базы Alias->FieldName по которому эта колонка построена . Т.к. колонки можно менять местами , удалять и пр. то номер колонки бровса очень часто НЕ совпадает с номером поля базы . И попытки вытянуть поле по номеру приведут к ошибке. Правильным будет решение выделять имя поля например как сFieldName := Substr( oBrw:aColumns[x]:cData, ">") или найти номер колонки , соответствующий полю nCol := Ascan( oBrw:aColumns, {|e| Substr(e:cData, ">") == cField ) }) Andrey пишет: координаты МАРКЕРА/ при нажатии Enter попадаем в oEdit объект и читаем его переменные oEdit:oWnd:nTop. oEdit:oWnd:nLeft и тд

Andrey: Спасибо Haz за разъяснения ! Haz пишет: и читаем его переменные oEdit:oWnd:nTop. oEdit:oWnd:nLeft и тд НЕ читаются. Пишет Метод не экспортирован: OWND или другую хрень. Покажи пожалуйста как правильно прочитать для моего примера ?

Haz: Andrey пишет: НЕ читаются. Похоже добраться до объекта oEdit можно только через :SetBtnGet(), а точнее через его bAction. Андрей , зачем тебе это , поделись что удумал. Может есть какой выход

Andrey: Haz пишет: Андрей , зачем тебе это , поделись что удумал. Может есть какой выход Хочу для юзеров сделать показ подсказки типа такой: А то при редактировании юзера не будут закрывать поле и данные не сохранятся. А еще есть всплывающие подсказки, их тоже можно прикрутить. Только координаты маркера нужны ! Как их получить ?

Haz: Andrey пишет: А то при редактировании юзера не будут закрывать поле и данные не сохранятся. стандартными средствами похоже не сделать , надо менять исходники или TGetBox или TSBrowse. я для таких забывчивых пользователей так и делаю в каждом релизе HMG чтоб было как в Excel сдвинул фокус и данные уже сохранились

Andrey: Haz пишет: стандартными средствами похоже не сделать , надо менять исходники или TGetBox или TSBrowse. я для таких забывчивых пользователей так и делаю в каждом релизе HMG чтоб было как в Excel сдвинул фокус и данные уже сохранились А почему дополнительный флаг не сделать сразу в исходники ? Григорий бы внес и все пользовались бы ? Не только у меня проблемы такие, у всех....

SergKis: Andrey пишет:А почему дополнительный флаг не сделать сразу в исходники ? Григорий бы внес и все пользовались бы ? Сам внеси или на весь объект TsBrowse или в каждую колонку (объект) : [pre2] IF ! __objHasData(oBrw, 'nModify_Rec') // добавим переменну в oBrw __objAddData (oBrw, 'nModify_Rec' ) ENDIF oBrw:nModify_Rec := 0 при модификации +1 и обрабатывай когда надо и не забываем в 0 ставить или на колонки FOR i := 1 TO len(oBrw:aColumns) oCol := oBrw:aColumns[ i ] IF ! __objHasData(oCol, 'nModify_Col') // добавим переменну в oCol __objAddData (oCol, 'nModify_Col' ) ENDIF oCol:nModify_Col := 0 NEXT во When на колонку oCol:nModify_Col := 0 в OnChange +1 [/pre2]

SergKis: PS это делаешь в своем коде, после создания oBrw или всех колонок - смотря что выбрал для реализации

Haz: SergKis пишет: это делаешь в своем коде, после создания oBrw Думаю, Андрей имел в виду "флаг" при переключении которого запись в редактируемую ячейку происходила бы при потере фокуса get объектом даже если LastKey() <> VK_ENTER (просто ткнули мышом в другую ячейку) . В TSB сейчас редактирование прерывается и значение не сохраняется ,Get закрыт и значение его буфера потеряно.

SergKis: Haz пишет:запись в редактируемую ячейку происходила бы при потере фокуса get объектом даже если Я тоже это имел ввиду, т.е. если не хватает флага, то можно добавить на oBrw или на каждую колонку oTsColumn. Можно добавить новый или изменить сущест. метод объекта (см. Harbour для начинающих), без обращения к Григорию Я с TsBrowse не работаю, но GetBox использую, а в него из TsColumn передается блок LostFocus, а в нем (блоке) спокойно, получив oGet проделать операции по сохранению ...

Haz: SergKis пишет: получив oGet проделать операции по сохранению ... спасибо за идею, я просто менял исходники постояннно

Andrey: Возвращаюсь дальше к моему примеру. Вот возник следующий вопрос: Как мне сделать редактирование ТОЛЬКО первой колонки ("Код") ТОЛЬКО по клавише F10 ? Вот пример тут - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample



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