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

Ответов - 43, стр: 1 2 3 All

Dima: Andrey Рассчитывай ширины столбцов так , что бы не было виртуального столбца , тогда и красить ни чего не придется. PS Или юзай nAdjColumn

Andrey: Dima пишет: Рассчитывай ширины столбцов так , что бы не было виртуального столбца , тогда и красить ни чего не придется. Есть справочники состоящие из 2 колонок всего. Так что без виртуального столбца на экране никак не обойтись.

Haz: Andrey пишет: Так что без виртуального См obrw:hBrush в примерах

Dima: Andrey Где то была процедура заливки фантома (строки и столбца) , Has показывал , но с ходу не найду Еще можно попробовать поиграть с фантомным столбцом через объект oPhant (это я по быстрому на сырец глянул)

Andrey: Haz пишет: См obrw:hBrush в примерах Нашёл. Поставил себе - не работает !!! Делаю у себя 10 колонку: [pre2] ADD COLUMN TO oBrw1 HEADER "Lang" ; .......... COLOR CLR_BLACK, CLR_WHITE ; ..... [/pre2] Потом ставлю для блокировки цвета ещё 11 колонку: [pre2] // для избавления от белого цвета конца таблицы ADD COLUMN TO oBrw1 HEADER "" ; DATA {|| NIL } ; SIZE 0 ; COLOR nBackTable, nBackTable ; NAME ZERO [/pre2] Только тогда цвет виртуального столбца становиться в цвет фона таблицы. Но на экране некрасиво это выглядит, да и курсор туда убегает (становиться невидимым) - юзер теряться будет.....

Dima: Andrey пишет: Только тогда цвет виртуального столбца становиться в цвет фона таблицы. Но на экране некрасиво это выглядит, да и курсор туда убегает (становиться невидимым) - юзер теряться будет..... Растягивай первую колонку что бы не было фантомной.

Haz: Andrey пишет: Нашёл. Поставил себе - Тогда до понедельника

Haz: Andrey пишет: Только тогда цвет виртуального столбца становиться в цвет фона таблицы. Но на экране некрасиво это выглядит, да и курсор туда убегает (становиться невидимым) - юзер теряться будет..... А в исходники посмотреть? Там же буквами написано, что фантомная колонка ВСЕГДА красится в цвет той, которая перед ней. Другого указания цвета фантому в TS нет. Это было к вопросу почему фантом белый Теперь как исправить. Так же посмотреть в исходники и увидеть что после назначения цвета фантому по последней колонке выполняется ::bOnDrawLine ( если он определен ) и тогда исправить цвет становится просто - в этом блоке вызываем функцию , которая все лечит oBrw:bOnDrawLine := {|oBrw| SetPhantomBackcColor(oBrw) } [pre2] FUNC SetPhantomBackcColor(oBrw) IF oBrw:oPhant <> Nil oBrw:oPhant:nClrBack := RGB( 111, 183, 155 ) // к примеру пусть будет грязно голубой end RETURN NIL [/pre2]

Haz: Ну и напоследок бонус трек Самое простое и очевидное решение, просто поражающее простотой. Сделать колонку 11 скрытой

Dima: Haz пишет: Сделать колонку 11 скрытой Игорь крась яйца уже

Haz: Dima пишет: крась яйца Все покрашено с утра И яйца и фантом, хожу с кисточкой и думаю гдеб еще мазнуть

Dima: Haz

Andrey: Haz пишет: Самое простое и очевидное решение, просто поражающее простотой. Сделать колонку 11 скрытой Да подумал я об этом, сразу не сделал так как посчитал SIZE 0 будет 0, а не 2-3 пиксела как на экране. Спасибо за решение !

SergKis: gfilatov2002 Добавил, у себя, возмозможность уст. высоту Edit отличную от высоты Cell [pre2] CLASS TSBrowse FROM TControl ... DATA nHeightEdit AS NUMERIC INIT 0 // GetBox cell height ... METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, nClrBack ) CLASS TSBrowse ... IF ::nColSpecHd != 0 nRow := ::nHeightHead + ::nHeightSuper + If( oCol:l3DLook, 2, 0 ) nCol := nStartX + If( oCol:l3DLook, 2, 0 ) nWidth := ::GetColSizes()[ nCell ] - If( oCol:l3DLook, 2, 1 ) nHeight := ::nHeightSpecHd - If( oCol:l3DLook, 1, -1 ) else nRow := ::nRowPos - 1 nRow := ( nRow * ::nHeightCell ) + ::nHeightHead + ; ::nHeightSuper + ::nHeightSpecHd + If( oCol:l3DLook, 2, 0 ) nCol := nStartX + If( oCol:l3DLook, 2, 0 ) nWidth := ::GetColSizes()[ nCell ] - If( oCol:l3DLook, 2, 0 ) nHeight := ::nHeightCell - If( oCol:l3DLook, 1, -1 ) If ::nHeightEdit > 0 nI := nHeight - ::nHeightEdit If nI > 4 nHeight := ::nHeightEdit nRow += int(nI / 2) EndIf EndIf endif If oCol:cResName != Nil .or. oCol:lBtnGet ... [/pre2] Полезно при исп. тсб как аналог списка пар Label+GetBox без линий и с исп. image > 24

Dima: SergKis Так ее же можно установить в bPrevEdit с помощью SetGetAdjustBrw , нет ?

SergKis: Dima если ты имеешь ввиду aEditCellAdjust := {0,0,0,0}, то да, так можно управлять, но в моей версии этого нет и ... тогда предложение снимаю.

Dima: SergKis я имел в виду примерно такой код [pre2] obrw3:GetColumn("cod"):bPrevEdit := { |a, b, lLock| SetGetAdjustBrw(b,{2,0,-2,-3}) ............. [/pre2]

SergKis: Дима, где есть SetGetAdjustBrw(...) ? Просканировал MiniGui, не получил результата. Потом bPrevEdit исп. для простой ситуации (а если много колонок) ..., слишком сложно. В целом имея высоту getbox мне хватает того, что у себя сделал. А ширина всегда по ширине cell, этим манипулирует пользователь, а я - picture

Dima: Сергей я тупанул Это я свою функцию заюзал Func SetGetAdjustBrw(o,amas) o:aEditCellAdjust[1]:=amas[1] o:aEditCellAdjust[2]:=amas[2] o:aEditCellAdjust[3]:=amas[3] o:aEditCellAdjust[4]:=amas[4] return .t. Ты был прав насчет aEditCellAdjust

SergKis: Дима, зачем ты в это делаешь в bPrevEdit, разве не достаточно простого на весь tsb nHget := 22 nH := :nHeightCell - nHget If nH > 4 :aEditCellAdjust[1] := int(nH / 2) :aEditCellAdjust[4] := nHget EndIf для мультистрок будет своя высота пересчитана, а для др. ситуаций сделанного, достаточно

SergKis: PS :aEditCellAdjust[4] := -nH

SergKis: Похоже :aEditCellAdjust - возможность задать отступы в Cell (:aEditCellAdjust := {-2,-1,-1,-2}), а размеры редактирования это свойства колонки и должны быть в TColumns. Что то такое [pre2] DATA nEditWidth AS NUMERIC INIT 0 // editing width DATA nEditHeight AS NUMERIC INIT 0 // editing height [/pre2] с вытекающими из этого действиями ...

Dima: SergKis пишет: Дима, зачем ты в это делаешь в bPrevEdit Кто то подсказал в свое время , так и прижилось.

Haz: Dima пишет: Кто то подсказал в свое время , так и прижилось. прижилось с каких-то давних версий , где еще не было корректирующего массива размеров. В PrevEdit я ровнял окно редактирования , т.к. она раньше категорически не хотело выравниваться под ячейку. Потом проблема была решена и с тех пор не тспользую

Dima: Haz У меня проблема была другого плана. После выхода из режима редактирования ячейки , "сетка" по периметру ячейки исчезала , поэтому координаты GET пришлось изменить что бы он не налазил на края ячейки.

SergKis: Dima пишет координаты GET пришлось изменить что бы он не налазил на края ячейки. Так это Григорий подправлял и сейчас все нормуль

Dima: SergKis пишет: Так это Григорий подправлял и сейчас все нормуль У меня версия еще от июня 2016 года , он правил позже ?

SergKis: Дима, трудно сказать, надо искать (там было GoLeft() и что то еще) Но уже давно, переносил изм. к себе помню ...

Dima: SergKis пишет: надо искать (там было GoLeft() и что то еще) Пороюсь. А GoLeft() был в 2008 году

SergKis: Dima пишет А GoLeft() был в 2008 году Позже было и GoRight и GoDown Нашел http://clipper.borda.ru/?1-1-40-00000454-000-180-0 пост N 848 от 06.11.15 21:33. gfilatov2002 пишет Вроде удалось поправить прорисовку разделительной линии в методах GoRight и GoDown С тех пор прорисовка линий после edit нормальная.

Dima: SergKis пишет: Позже было и GoRight и GoDown Да я чисто шарил по C:\MiniGUI\Doc\ChangeLog.txt а там только 8 год всплыл , да и фиг с ним )) SergKis пишет: пост N 848 от 06.11.15 21:33. И да , версия Минигуи у меня была уже старше и точно не 15 год )) SergKis пишет: С тех пор прорисовка линий после edit нормальная. Не понятно зачем я тогда правил все это дело на свежем Минигуи 2016 года Но глючило 100 %

Haz: Dima пишет: Но глючило 100 % И сейчас глючит. Без белых засветов вокруг закрытого гет обьекта, но линии гряды трет

SergKis: Haz пишет но линии гряды трет В какой ситуации ? Погонял примеры - не трет. У меня версия, тоже не трет.

Haz: SergKis пишет: В какой ситуации ? В ситуации обычного гетбокса. Сейчас точно сказать не могу т. к не на работе. Стандартная библиотека, прошлая или позапрошлая. Без выравнивани границ гет обьекта. После редактирования затирается одна из горизонтальных границ. Из дополнительных условий- двойной курсор с градиентом и браш на бровсе в цвет фона строк. Завтра погоняю, напишу подробнее. Но в принципе не напрягает, белых засветов нет и при желании легко исправляется выравниванием границ гет поля.

SergKis: Haz пишет Но в принципе не напрягает Только не хотелось, что бы клиент носом ткнул в эту ситуёвину

Haz: SergKis пишет: Только не хотелось, что бы клиент носом Перед сдачей клиенту всех мелких тараканов обычно принято давить. Но иногда и не до них бывает т. к есть и не мелкие) К примеру иногда наблюдаю традиционное залипание нижней строки. Понятно что исправимо, и не на всех рабочих местах у клиента проявляется. Такие вещи полирую уже при тестовой эксплуатации, т. к. с вероятностью больше 50% будут изменения в интерфейсе когда люди начнут работать.

gfilatov2002: Haz пишет: Но иногда и не до них бывает т. к есть и не мелкие Подтверждаю Вот набрел на ошибку, возникающую при использовании SPINNER внутри GetBox поля (при использовании метода oBrw:SetSpinner()). Проблема заключается в том, что при нажатии на ползунки этого Spinnerа начинает убегать указатель с текущей записи Haz Может, поможите побороть эту бяку

Haz: gfilatov2002 пишет: Может, поможите побороть эту бяку Григорий завтра посмотрю. Сейчас сижу болею дома

Dima: Haz пишет: Сейчас сижу болею дома Выздоравливай !!!

Haz: gfilatov2002 пишет: Проблема заключается в том, что при нажатии на ползунки этого Spinnerа начинает убегать указатель с текущей записи Это следствие , причина в том, что бровс получает команду сдвинуть этот указатель ползунками или кнопками не важно. Если в METHOD Command( nWParam, nLParam ) CLASS TControl закоментировать убиение фокуса [pre2] case nNotifyCode == EN_KILLFOCUS ::LostFocus() [/pre2] сразу видно как управляется бровс , а убиение фокуса просто делает это невидимым Пол дня проковырялся - безрезультатно. Не могу понять кто и где эту команду бровсу посылает Позже еще продолжу.

Haz: Поправлюсь не закоментить KillFoсus а нооборот показать добавив ниже case nNotifyCode == EN_SETFOCUS ::SetFocus() Пока все что выяснил - При нажатии какой-либо стрелки спина он посылает родительскому окну сообщение WM_VSCROLL. а родительским заявлено окно бровса и это заставляет бровс бегать по записям. Можно попробовать использовать флаг ::lDontChange , который учитывать при обработке событий в TSBrowse:HandleEvent() , можно попробовать в событиях просто фильтрануть lParam в котором будет передан дескриптор спина ( он определяется как ::hWndChild в METHOD TBtnBox:New() но в нем и хоронится и никуда не передается ) На скорую руку попробовал , частично помогает , но при выходе из режима редактирования чтото уперто сдвигает указатель на ::GoTop()

Haz: Григорий По поводу спиннера и дергания записей это частично решает проблему ( просто фильтруем в бровсе сообщения от спеннера) [pre2] * ============================================================================ * METHOD TSBrowse:HandleEvent() Version 9.0 Nov/30/2009 * ============================================================================ METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TSBrowse #ifdef __HARBOUR__ ElseIf nMsg == WM_KEYUP Return ::KeyUp( nWParam, nLParam ) ElseIf nMsg == WM_VSCROLL If ::lDontchange Return Nil EndIf if nLParam == 0 Return ::VScroll( Loword( nWParam ), HiWord( nWParam ) ) endif #EndIf [/pre2] т.е. исключаем из обработки бровсом сооющения от спенера, но пока частично решает при первом клике в колонке со спином и выходе из редактирования запись улетает на GoTop() потом сколько не редактируй и не кликай по спину - все ОК скорее всего после первого редактирования выставляется какой нить внутренний флаг и потом его обрабатывает правильно что переводит запись в GoTop - так и не нашел, тк не смог поймать пока это единственное первое событие

gfilatov2002: Haz Благодарю за реальную помощь в этом вопросе! Haz пишет: исключаем из обработки бровсом сообщения от спайнера Принимается



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