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

Ответов - 82, стр: 1 2 3 4 5 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 пишет: исключаем из обработки бровсом сообщения от спайнера Принимается

SergKis: gfilatov2002 [pre2] METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse ... If ( nClickRow == ::nRowPos .and. nClickRow > 0 ) .or. ( nClickRow == ::nRowPos .and. ! ::lDrawHeaders ) If ::lCellBrw .and. ::IsEditable( nCol ) ::nColSpecHd := 0 If ValType( Eval( ::aColumns[ nCol ]:bData ) ) == "L" .and. ; ::aColumns[ nCol ]:lCheckBox // virtual checkbox ::PostMsg( WM_CHAR, VK_SPACE, 0 ) ElseIf ::aColumns[ nCol ]:oEdit != Nil ::PostMsg( WM_KEYDOWN, VK_RETURN, 0 ) ElseIf ::bLDblClick != Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self ) Else ::PostMsg( WM_KEYDOWN, VK_RETURN, 0 ) EndIf ... [/pre2] по мне, так правильнее будет. bLDblClick задан, но не срабатывает в этой ситуации (так было)

gfilatov2002: SergKis пишет: bLDblClick задан, но не срабатывает в этой ситуации Понимаю Вашу логику, но у автора библиотеки этот кодовый блок используется только для НЕ редактируемых TSBrowse Это явно следует из кода метода LDblClick

SergKis: gfilatov2002 пишет но у автора библиотеки этот кодовый блок используется только для НЕ редактируемых Мне кажется, у автора не до конца продумано. При наличии :nFireKey посылать надо oBr:PostMsg( WM_KEYDOWN, VK_F4, 0 ) а не VK_RETURN К примеру edit включаем VK_F4 ( :nFireKey := VK_F4 ), а VK_RTUEN назначить надо выбор строки. При работе со справочниками это сплошь и рядом - на окне где ТОЛЬКО справочник VK_RETURN может включать edit, а в вызове справочника (GrtBox) для выбора из списка (все операции по ведению спр. присутствуют) - VK_ENTER\bDblClick - это выбор строки для занесения данных в документ. В сегодняшней версии это затруднительно сделать простым способом

SergKis: PS правильно посылать надо oBr:PostMsg( WM_KEYDOWN, oBr:nFireKey, 0 )

gfilatov2002: SergKis пишет: При работе со справочниками это сплошь и рядом Тогда принимается - Вам виднее Благодарю за дополнительное разъяснение

Andrey: Что то перестал отображаться чекбокс в Tsbrowse. Версия MiniGUI Extended Edition 16.11 - работает отлично ! Версия MiniGUI Extended Edition 17.04 - не отображает.... Вот скрин экрана: Мышкой по чекбоксу кликаешь - нет отображения... Что там нужно доп. сделать у себя в коде чтобы отображалась ? В коде создаю колонку так: [pre2] // создать 3-ю колонку ADD COLUMN TO oBrw2 HEADER "Печать"+CRLF+"в таблице" ; DATA FieldWBlock( "VIEW", Select() ) ; ...... oBrw2:aColumns[3]:bPrevEdit := {|| HeadCheckField(), FALSE } // проверка до ввода[/pre2] В функции HeadCheckField() в конце обработки ставлю: [pre2] oBrw1:Reset() oBrw1:Refresh(.T.) oBrw2:Refresh(.T.) RETURN NIL[/pre2] Больше никаких функций не использую...

Dima: Andrey пишет: Версия MiniGUI Extended Edition 17.04 - не отображает.... Чеканул пример C:\MiniGUI\SAMPLES\Advanced\Tsb_array_2\ Все кажет норм !

Andrey: Dima пишет: Чеканул пример C:\MiniGUI\SAMPLES\Advanced\Tsb_array_2\ Все кажет норм ! Там по другому создаётся бровс. У меня конкретно в версии 16.11 работает, а в 17.04 - не отображает чекбокс. Что там сделали в исходниках я не знаю, но правка была же, если перестало работать ! По пробелу или по клику мышке ПЕРЕСТАЛ работать чекбокс после версии 16.11 ! Может быть из-за того что использую сразу ДВА бровса ? Как можно перерисовать конкретно 3 колонку после ввода ? Поможет ли это ? Попробовал поставить - oBrw2:aColumns[3]:bPostEdit := {|| oBrw2:DrawSelect(), FALSE } // проверка после ввода НЕ ПОМОГАЕТ !!!

Dima: Andrey пишет: По пробелу или по клику мышке ПЕРЕСТАЛ работать чекбокс после версии 16.11 ! Долго же ты ждал пока понял что не пашет :)

Andrey: Dima пишет: Долго же ты ждал пока понял что не пашет :) Да это не главное меню в программе. Редко кто пользуется. Вот и обнаружил с таким промежутком времени. Попробую проверить другие версии...

Andrey: Проверил. В версии 17.02 работает, а в 17.03 - уже не отображает чекбокс. Т.е. - по пробелу или по клику мышке ПЕРЕСТАЛ работать чекбокс после версии 17.02 ! Что нужно мне добавить в свой код чтобы по клику мышки стал отображаться чекбокс ? Использую сразу ДВА бровса на одном окне.

Dima: Andrey пишет: Т.е. - по пробелу или по клику мышке ПЕРЕСТАЛ работать чекбокс после версии 17.02 Так это не чекбокс по ходу а просто BMP как и на другом бровсе в твоем скрине

gfilatov2002: Andrey пишет: oBrw2:aColumns[3]:bPrevEdit := {|| HeadCheckField(), FALSE } // проверка до ввода Попробуй изменить это кодовый блок таким образом oBrw2:aColumns[3]:bPrevEdit := {|| HeadCheckField(), TRUE }

Andrey: gfilatov2002 пишет: Попробуй изменить это кодовый блок таким образом Так заработало ! Спасибо большое ! Хотя если только ОДИН бровс, то работает и со старым синтаксисом. Смотри пример Tsb_composite_(1.2).7z который я высылал... Там в 3х местах используется: [pre2] oBrw1:aColumns[3]:bPrevEdit := {|| FieldCheckBoxEdit(), FALSE } oBrw1:aColumns[4]:bPrevEdit := {|| FieldCheckBoxEdit(), FALSE } oBrw1:aColumns[5]:bPrevEdit := {|| FieldCheckBoxEdit(), FALSE } [/pre2]

Andrey: Ха, в версии 17.03 и выше перестал работать пример Tsb_composite_(1.2).7z - там где выбор флагов производиться... Один раз выбрать можно, на втором - программа НАГЛУХО ВИСНЕТ !!! Вот сам проект - https://cloud.mail.ru/public/2SXc/UtNfso4gf Что-то в коде нужно добавить ?

Andrey: Опять непонятка в работе функций.... Григорий, проект у тебя есть - Send2Mail.hbp Там вызов функции в модуле Tsb_send.prg строка: [pre2] oBrw:Excel2(cFile, lActivate, NIL, "_"+Space(70)+Form_0.Title, lSave )[/pre2] Версия 17.02 - работает, а в других уже НЕТ !!! Что там докрутить/исправить нужно, чтобы заработало ?

Andrey: Разобрался сам... Оказывается если нет такого пути к файлу, то Ексель и не создаёт и не открывает его ! Григорий, там можно в исходниках поставить проверку на создания по пути файла ?

Dima: Andrey пишет: Разобрался сам... Оказывается если нет такого пути к файлу, то Ексель и не создаёт и не открывает его Про это уже писалось и не раз ! Бывает :)

Vlad04: Haz Редактирование Ключевого поля в TsBrows. Я писал, что после выхода из редактирования курсор не поднимается на нужную строку Игорь, как-то выкладывал пример редактирования ключевого поля, но в примере были особенности- вторая форма для редактирования, программное построение Бровса и т.д. Посмотрите пример построенный в основном в Дизайнере - click here, может удастся заставить курсор подниматься ? И еще , при входе в редактирование сетка пропадает.

Dima: Vlad04 пишет: И еще , при входе в редактирование сетка пропадает. Почитай начиная с поста 6376 этой темы

Vlad04: Dima Все темы читаю. В примере кода практически нет, все должно работать по- умолчанию ( или почти всё) без танцев с бубном.

SergKis: Vlad04 пишет В примере кода практически нет, все должно работать по- умолчанию ( или почти всё) без танцев с бубном. Танцы вы сами придумали себе кодом: oBrw_1:aColumns[1]:bPrevEdit := { || oBrw_1:Upstable() , oBrw_1:Refresh(.T.) , oBrw_1:ResetVScroll() , .t. } запустив перед edit кучу процедур по прорисовке тсб, при этом совершенно забыв про очередь сообщений, по которой и происходят действия прорисовки. Все темы читаю но чуть чуть по диагонали. В примере Tsb_addrecord_3 ситуация с обработкой очереди для прорисовки показана была:[pre2] STATIC FUNC Add_Rec( oBrw ) ... If ! Empty(aResult) dbSelectArea(cAls) dbAppend() If ! NetErr() .and. RLock() nRec := RecNo() REPL KODS with aResult[1], ; NAME with aResult[2] If oBrw:nLen == oBrw:nRowCount() oBrw:oHScroll:SetRange(0,0) EndIf oBrw:GotoRec(nRec) nCol := oBrw:nColumn("NAME") If nCol != oBrw:nCell oBrw:nCell := nCol oBrw:DrawSelect() EndIf oBrw:lChanged := .T. oBrw:PostEdit(aResult[2], nCol, Nil) DO EVENTS oBrw:PostMsg(WM_KEYDOWN, VK_F4, 0) EndIf EndIf ... [/pre2] т.е. если убрать DO EVENTS много разного увидите

Haz: Vlad04 пишет: может удастся заставить курсор подниматься ? И еще , при входе в редактирование сетка пропадает. Нет ничего проще 1) в Form_0.fmg удалить это ON INIT Init_Form_0() и соответственно саму функцию в програмном модуле tsb.prg 2) в tsb.prg сделать так LOAD WINDOW Form_0 oBrw_1:SetIndexCols( 1 ) oBrw_1:SetOrder( 1 ) Form_0.Center Form_0.Activate PS Сергей прав по поводу танцев, но уверен со временем все уляжется в голове и танцы будут не нужны

Vlad04: SergKis примере Tsb_addrecord_3 Конечно,смотрел и этот пример. Многое не понял. Для такого простого результата - на форме одна таблица с 4-мя кнопками, код очень сложный. А если на форме несколько таблиц, а в программе десяток форм.... Haz oBrw_1:SetIndexCols( 1 ) oBrw_1:SetOrder( 1 ) просто и работает

Vlad04: Курсор поднимается , но на одно строку промахивается. При движении вниз так же ошибка на одну строку.

SergKis: Vlad04 пишет А если на форме несколько таблиц Код в примере практически не изменится для всех таблиц, используемых на окне(ах). Изменятся параметры задания колонок, валидности и др. не стандартных действий. И в примере есть ввод, едит и удаление (все сводится к примерно tsb_array_2 для таблиц). В вашем нет (якобы кода) ничего,кроме едит, но будет куча fmg для справочников в чилд\модал окнах, привязанных к железным алиасам. Не уверен, что это проще. Многое не понял Так лучше спросить, чем оставаться в не понятках. просто и работает Так это работало со времен примера Tsb_addrecord_2 [pre2] oBrw:SetIndexCols( oBrw:nColumn("ID"), ; oBrw:nColumn("INFO") ) oBrw:SetOrder( oBrw:nColumn("ID") ) [/pre2]

SergKis: Vlad04 пишет но на одно строку промахивается. После редактирования у колонки есть свойство, куда деть курсор после, по умолчанию переместиться дальше ... Потому такой результат. Поставьте [pre2] oBrw_1:aColumns[1]:nAlign := DT_LEFT oBrw_1:aColumns[ 1 ]:nEditMove := DT_DONT_MOVE oBrw_1:SetIndexCols(1) oBrw_1:SetOrder(1) oBrw_1:SetFocus() Form_0.Center Form_0.Activate [/pre2]

Vlad04: SergKis куча fmg для справочников в чилд\модал окнах, привязанных к железным алиасам. Не уверен, что это проще. Это и хорошо , что есть варианты.У меня есть одна универсальная форма для типовых справочников и отдельные формы для остальных случаев. Так это работало со времен примера Tsb_addrecord_2 Не понял сразу, в Делфи для Бровса( там это грид) несколько другая идеология - отображать данные, а не управлять ими.Да и консольный Харбор ведет себя по-другому.

Vlad04: Уф!! Теперь все нормально ! Спасибо всем !

SergKis: Vlad04 пишет У меня есть одна универсальная форма для типовых справочников и отдельные формы для остальных случаев. т.е. из меню главного окна у вас нельзя вызвать несколько окон справочников одновременно, только по очереди, т.к. в fmg прописан конкретный алиас в одной унив. форме ?

Andrey: SergKis пишет: т.е. из меню главного окна у вас нельзя вызвать несколько окон справочников одновременно А зачем юзеру редактировать/смотреть сразу несколько справочников ? Я тоже сделал одно модальное окно для справочника и туда передаю параметры из ини-файла (алиасы, поля базы и т.д.) для различных справочников. Иначе юзера начинают путаться с большим количеством справочников на экране.

SergKis: Andrey пишет А зачем юзеру редактировать/смотреть сразу несколько справочников ? Загнать в рамки дос пользователя - это вариант. А при работе с док. и спр. номенклатуры, разве не может возникнуть вопрос (по тел., от др. службы) по клиентскому спр., по автотранспорту (свой\чужой), по адресам погрузки\разгрузки, по ценнику клиента ...Что бросать (выходить) из того с чем работал или откладывать ответы на потом ... Иначе юзера начинают путаться с большим количеством справочников на экране Так это твое дело организация, что бы не путался, не дублировался, не используемый убирался. Ведь excel с sheetами не запрещают одновременно работать (типа можно но только последовательно). А ты выходит запрещаешь. Не демократично как то.

Andrey: SergKis пишет: Не демократично как то. Не... с юзерами демократию разводить не надо ! Сказали бурундук птичка и никаких зверьков и все ! С другой стороны, действительно можно дать возможность юзеру вернуться к отложенному справочнику. Интересно а как в 1С это реализовано или в других системах ? Но это наверное уже для другой ветки обсуждения, а не здесь.

PSP: Andrey пишет: Интересно а как в 1С это реализовано или в других системах ? Демократично)

Vlad04: SergKis у главного окна у вас нельзя вызвать несколько окон справочников одновременно Можно, форма универсальная для простых справочников, типа - код, наименование и т.д. В такой Форме алиасы , поля не прописаны и у меня считываются из файла при открытии формы.Эта форма описана полностью в виде кода, т.е. без дизайнера ( в нем в этом случае точно нет смысла) .

Andrey: Есть мой тестировочный проект. Раньше работал, сейчас нет. С какой версии перестал работать, даже не знаю. Сейчас вешается ВЕСЬ проект вот с таким сообщением: Вот сам проект - https://cloud.mail.ru/public/2SXc/UtNfso4gf Виснет - там где выбор флагов производиться... Один раз выбрать можно, на втором - программа НАГЛУХО ВИСНЕТ !!! Там даже второй выбор не нужно производить. Первый раз выбираем меню с флагами, потом мышкой кликаем на другой колонке (или стрелкой вверх/вниз) и тоже программа НАГЛУХО виснет !! Методом отладки определил, что перестают работать вот эти функции ПОСЛЕ выбора из модуля Form_Lang.prg: [pre2]_SetMenuItemBitmap ( "MYTABLERECNOMARK" , cForm , "CheckF28" ) _SetMenuItemBitmap ( "MYTABLERECNOPRINT", cForm , "CheckF28" ) _SetMenuItemBitmap ( "MYTABLERECNOSAVE" , cForm , "CheckF28" ) _SetMenuItemBitmap ( "MYTABLERECNOMAIL" , cForm , "CheckF28" ) [/pre2] Модуль demo.prg - строка 534 Помогите пожалуйста разобраться....

Vlad04: Выбор правой мышкой из контекстного меню ? Все работает !

Andrey: Vlad04 пишет: Выбор правой мышкой из контекстного меню ? НЕТ ! Vlad04 пишет: Все работает ! Виснет - там где выбор флагов производиться... Один раз выбрать можно, на втором - программа НАГЛУХО ВИСНЕТ !!! Там даже второй выбор не нужно производить. Первый раз выбираем меню с флагами, потом мышкой кликаем на другой колонке (или стрелкой вверх/вниз) и тоже программа НАГЛУХО виснет !!

Andrey: Привет всем ! Забыл как сделать чтобы после выбора из tsbrowse оставалась серая линия на выбранной строке таблицы. Подскажите пожалуйста ?



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