Форум » 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: Победил сваливание так: IF nStaticViewRecno # 0 // при первом показе - не выводить cCaption1 := "File open 1: " + (oBrw1:cAlias)->FILE1 cCaption2 := "File open 2: " + (oBrw1:cAlias)->FILE2 _SetMenuItemCaption ( "MYNAMEOPENFILE1" , cForm , cCaption1 ) _SetMenuItemCaption ( "MYNAMEOPENFILE2" , cForm , cCaption2 ) oBrw1:aColumns[1]:cFooting := { || ALLTRIM(Transform( nLen, "9 999" )) } cText := IIF( M->nPubLang == 1, " Записи: ", " Recno: ") oBrw1:aColumns[4]:cFooting := { || cText + cVal + "/" + cLen } oBrw1:DrawFooters() // выполнить прорисовку подвала TblFocus() ENDIF Но всё равно в контекстном меню нет имени файла ? В лог-файл выводится имена файлов, а в менюшку нет.

Haz: Andrey пишет: Но всё равно в контекстном меню нет имени файла ? В лог-файл выводится имена файлов, а в менюшку нет. Дарю ( вместо _SetMenuItemCaption ), вешай на ::bChange. Проверил на своем примере , все работает как надо [pre2] Func MenuCaptionSet( ItemName , FormName, Caption ) LOCAL a := _GetMenuIds ( ItemName , FormName ) LOCAL x := GetControlIndex ( ItemName , FormName ) LOCAL Id := _HMG_aControlIds [ x ] ModifyMenuItem ( a [1] , a [2] , Id , Caption ) return nil [/pre2] PS. подсмотрено в исходниках minigui - h_menu.prg - FUNCTION _ModifyMenuItem ( ItemName , FormName , Caption , action , name , Image )

Andrey: Haz пишет: Дарю ( вместо _SetMenuItemCaption ), вешай на ::bChange. Благодарю ! Сделаю пример - выложу. Только функцию _GetMenuIds() придётся тоже тащить из исходников к себе в проект. Там она STATIC FUNCTION _GetMenuIds().


Haz: Andrey пишет: Только функцию _GetMenuIds() придётся тоже тащить из исходников к себе в проект. Там она STATIC FUNCTION _GetMenuIds(). да придется

Andrey: Кодировка базы 866. Выводил таблицу всю сразу на экран, было отлично. Юзера захотели чтобы последний поиск (фильтр по базе) сохранялся и потом сразу показывался вместо всей базы. Сделал. Использую условную индексацию, т.е. показ базы по индексу. Теперь при показе таблицы на несколько секунд все записи в кракозябах (другая кодировка), потом строится индекс и всё записи показываются нормально ! Вопрос - как убрать показ этих кракозяб на экран ? Пробовал делать: SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .F.) TsbNewIndex(cForm,nTable,aFilter[2], aFilter[1], aFilter[3] ) SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .T.) Если ставишь отладку через MsgDebug() - кракозяб не видно !

Haz: Andrey пишет: Вопрос - как убрать показ этих кракозяб на экран ? Зачем в windows задаче кодировка 866 ? перекодируй в 1251 и проблема сама исчезнет. А по сути вопроса - лучше выложи самодостаточный, а то не получается угадать какой код и где что не так

Andrey: Haz пишет: Зачем в windows задаче кодировка 866 ? перекодируй в 1251 и проблема сама исчезнет. Не могу. Терминалку перевожу постепенно, сразу все таблицы не перевести. Некоторые не хотят нового интерфейса, оставь им старый, привычный. Так что год-два придётся использовать базы с 866 кодировкой. Проблему решил таким кодом: InkeyGui(10) и всё .... Я сам в шоке от такой простоты.

Haz: Andrey пишет: Проблему решил таким кодом: InkeyGui(10) и всё .... Заплатку поставил. Ведь причина глюка осталась неясной, значит выскочит в другом месте. Andrey пишет: Не могу. Терминалку перевожу постепенно, сразу все таблицы не перевести. Некоторые не хотят нового интерфейса, оставь им старый, привычный. Так что год-два придётся использовать базы с 866 кодировкой. Если консольную программу уже не развивать то нет и смысла сползать с 866 Я уже много много лет не использую 866 , а только 1251 и никаких проблем ни в консоли ни в гуи. Правда с консолью почти не работаю , только мелкие сервисные утилиты, да и базы у меня все нативные от RDDADS. в ADS кодировка ANSI используется по умолчанию , а OEM требует вызова перекодирования, это по исходникам видно.

Andrey: 1) Как в Tsbrowse заменить картинки для oCol:lCheckBox := .T. // virtual checkbox ? 2) Как организовать в Tsbrowse свои дополнительные поля со своими картинками ? т.е. в одной таблице нужен стандартный CheckBox и еще 2 дополнительных CheckBox со своими картинками. Примерно так же как в The Bat! И менюшку обработки по мышке:

Haz: Andrey пишет: 1) Как в Tsbrowse заменить картинки для oCol:lCheckBox := .T. // virtual checkbox ? 2) Как организовать в Tsbrowse свои дополнительные поля со своими картинками ? т.е. в одной таблице нужен стандартный CheckBox и еще 2 дополнительных CheckBox со своими картинками. Примерно так же как в The Bat! элементарно только не чеквокс это Организовать в базе 3 логических поля и по значению в них показывать или не показывать картинку см в примерах tsb_cursor я там календарь в текущей строке рисовал, замени lDrawSelect на значение из поля значение в поле должно инвертиться в bPrevEdit , который должен вернуть ложь чтоб не пустить в редактирование PS. если картинок в поле должно быть много то логическое поле не подойдет, сделай числовое и показывай нужную картинку в зависимости от числа в поле PSS в чекбоксе картинки определены из массива функции StockBmp() менять их там еще тот гемор ... но если есть желание - то желающие могут попробовать.

SergKis: Haz пишет: в чекбоксе картинки определены из массива функции StockBmp() менять их там еще тот гемор это не совсем так [pre2] METHOD DrawLine( xRow ) CLASS TSBrowse ... If lCheck Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )} hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ] [/pre2] делаем просто oBrw:aCheck := {LoadImage(<для .T.>), LoadImage(<для .F.>)} и все работает с новыми "галочками" (это может быть и файл и ресурс)

SergKis: Andrey пишет:InkeyGui(10) и всё .... Я сам в шоке от такой простоты. ты просто дал возможность обработать очередь, приостановив код на 10 мс., DO EVENTS тоже помогло бы, надо в гуи иногда давать возможность обрабатывать очередь сообщений

Haz: Andrey пишет: И менюшку обработки по мышке: мат в форуме запрещен ? тогда иди пожалуйста почитай хелп по контекстному меню

Haz: SergKis пишет: делаем просто oBrw:aCheck := {LoadImage(<для .T.>), LoadImage(<для .F.>)} и все работает с новыми "галочками" (это может быть и файл и ресурс) Сергей , это да... но позволяет задать общий aCheck на все колонки, а Андрею нужны свои на каждую если бы было так aColumns[]:aCheck := ... надо подумать над этой идеей

Andrey: Haz пишет: мат в форуме запрещен ? тогда иди пожалуйста почитай хелп по контекстному меню Да понял я.... Не надо матерится. Пример ты давал, я реализовал эту идею. Просто хотелось бы попроще эти галочки в контекстном меню реализовать. Может что то изменить в самом Tsbrowse ? Уж больно код выглядит не очень понятно для новичков ! Тестовый пример делаю. Как сделаю - выложу.

Dima: Haz пишет: мат в форуме запрещен ? Нет

Haz: Andrey пишет: Просто хотелось бы попроще эти галочки в контекстном меню реализовать. Может что то изменить в самом Tsbrowse ? я и не матерюсь контекстное меню реализовано проще некуда. А с картинками в колонках - только так , я пока не вижу как проще сделать кроме как Сергей навел на мысль про aColumns[]:aCheck И потом TS не для новмчков , также как browse класс в clipper / harbour т.к. не только новички а и некоторые старички в этот класс не лезут. То что имеет внутри множество инструментов для реализации почти любой хотелки - простым быть не может.

Haz: Dima пишет: Нет а чего ты молчал? теперь многие посты на форуме будут короткими и четкими как выстрел )

SergKis: Haz пишет:если бы было так aColumns[]:aCheck := ... надо подумать над этой идеей так вроде не сложно:[pre2] 1. добавляем в TsColumn DATA aCheck 2. чуть правим METHOD DrawLine( xRow ) CLASS TSBrowse ... If lCheck Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )} If Valtype(oColumn:aCheck) =="A" .and. Len(oColumn:aCheck) > 1 hBitMap := oColumn:aCheck[ If( Upper( uData ) == "T", 1, 2 ) ] Else hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ] EndIf [/pre2] и все

SergKis: SergKis пишет:и все надо добавить [pre2] METHOD Destroy() CLASS TSBrowse ... If ::aCheck != Nil //V90 DeleteObject ( ::aCheck[ 1 ] ) DeleteObject ( ::aCheck[ 2 ] ) EndIf AEval(::aColumns, {|oCol| If( Valtype(oCol:aCheck) == "A", AEval(oCol:aCheck, {|hBmp| DeleteObject (hBmp) }), ) }) [/pre2]



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