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

Andrey: Haz пишет: тогда пример richEditEx в помощь ( уже вроде говорили про него в этом контексте месяца три назад ) там как раз показано как использовать _SetFont(), и правильно что туда заглянул Про него уже забыл. Увидел в h_tbrowse.prg : oBrw:hFont := _SetFont (ControlHandle,FontName,FontSize,bold,italic,underline,strikeout) Извиняюсь за повторные (тупые) вопросы. Память уже не та...

Andrey: Подскажи пожалуйста как сделать автоматический расчет ширины колонок ? Есть окно: DEFINE WINDOW Form_0 На нем DEFINE TBROWSE oBrw END TBROWSE hFont := oBrw:hFont // считать размер шрифта MsgDebug(hFont,GetFontParam(hFont)) // вроде правильно выдает... Хочу автоматом вычислять размер колонок в зависимости от шрифта: For nI := 1 TO ... oBrw:aColumns[nI]:cHeading := aTitleTbrw[nI] nLenPole := LEN( FIELDGET( FIELDNUM(aPole[nI]) ) ) nWidth := GetTextWidth( NIL, nLenPole, GetFontHandle(hFont) ) oBrw:SetColSize(nI, nWidth) oBrw:aColumns[nI]:nAlign := DT_CENTER ............. Только вот nWidth выдает всегда 0 ?

Andrey: Блин, разобрался... Нужно вместо nWidth := GetTextWidth( NIL, nLenPole, GetFontHandle(hFont) ) Задавать текст, а не число...


Andrey: Косяк при выводе таблицы - дублирование полей базы !!! В моей базе 14 полей (включая мемо поле), в таблицу вывожу только 10 ! А при выводе в таблице показывает 20 полей, причем 10 с русским заголовком + 10 с английским. Вот примерно код: aTbHead := { 'Дата' , 'Время' , 'Код' , 'Наименование события', .... } aTbField:= { 'DATE' , 'TIME' , 'NEVENT' , 'EVENT' , ... } aTbAlign:= { DT_CENTER, DT_CENTER, DT_CENTER, DT_LEFT , ... } */ // Стандартная функция загрузки базы LoadFields( "oBrw", 'Form_0', , aTbField ) FOR nI := 1 TO LEN(aTbHead) cStr := SPACE( FieldSize( FieldPos(aTbField[nI]) ) ) nTbColWidth := GetTextWidth( NIL, cStr, GetFontHandle(hFont) ) oBrw:aColumns[nI]:cHeading := aTbHead[nI] oBrw:SetColSize(nI, nTbColWidth) oBrw:aColumns[nI]:nAlign := aTbAlign[nI] NEXT .... Что не так делаю ?

Andrey: Разобрался. Мой косяк. Оказывается я два раза делал в программе загрузку файлов... LoadFields( oBrw, 'Form_0' ) oBrw:LoadFields( .F. ) // все поля НЕ редактируемые

Andrey: Как можно вывести МЕМО поле в TBROWSE в одну строчку, чтобы таблица не увеличивалась на две строки ?

Dima: написать свой блок кода для вывода этого поля

Andrey: Haz пишет: через oBrw_1:aColumns[1]:bData Что то не получается у меня.... Я отказался от функции (h_tbrowse.prg) : //LoadFields( "oBrw", 'Form_0', .F., aTbField ) // все поля НЕ редактируемые Воn мой код: END TBROWSE //* | наименование | алиас | поле | формат поля | AADD( aPole, { "Дата" , "" , "DATE" , "99.99.9999" , .... AADD( aPole, { "Время" , "" , "TIME" , "99:99:99" , ... AADD( aPole, { "Код" , "" , "NEVENT" , "@Z 999" , ... AADD( aPole, { "Наименование" , "" , "EVENT" , REPLICATE("x",60) , ... FOR nI := 1 TO LEN(aPole) cStr := aPole[nI,4] // шаблон вывода поля nTbColWidth := GetTextWidth( NIL, cStr, GetFontHandle(hFont) ) oBrw:aColumns[nI]:cHeading := aPole[nI,1] // Строка 106 oBrw:aColumns[nI]:bData := &('{ || "'+aPole[nI,3]+'" }') oBrw:SetColSize(nI, nTbColWidth) oBrw:aColumns[nI]:nAlign := aPole[nI,6] oBrw:aColumns[nI]:cPicture := aPole[nI,4] NEXT Выдает ошибку: Error BASE/1132 Переполнение массива: Неверное количество аргументов Called from MAIN(106) Где неправ, подскажите пожалуйста...

Dima: Примеры смотрел ? TsB_Mdi.prg TsBtest.prg

Andrey: Dima пишет: Примеры смотрел ? Вот мой исходник - https://cloud.mail.ru/public/6fedc2671caf/Tsb_Config0.prg Там удалил пару строк - теперь ошибка в 104 строке. В примере нужно наверно создавать колонки типа oBrw:AddColumn( TSColumn():New( If(.F., OemToAnsi(hb_eol() + "№№"), hb_eol() + "№№") ..... А как я не знаю... Подскажите пожалуйста, может я и не прав.

Andrey: Вот, разобрался. FOR nI := 1 TO LEN(aPole) ADD COLUMN TO TBROWSE oBrw // добавить новую колонку в TBROWSE cStr := aPole[nI,4] // шаблон вывода поля nTbColWidth := GetTextWidth( NIL, cStr, GetFontHandle(hFont) ) oBrw:aColumns[nI]:cHeading := aPole[nI,1] bBlock := FieldBlock( aPole[nI,3] ) IF VALTYPE(FIELDGET(FIELDNUM(aPole[nI,3]))) == "M" ELSE oBrw:aColumns[nI]:bData := bBlock ENDIF oBrw:SetColSize(nI, nTbColWidth) oBrw:aColumns[nI]:nAlign := aPole[nI,6] oBrw:aColumns[nI]:cPicture := aPole[nI,4] NEXT

Andrey: Хотелось бы сделать показ мемо в отдельном (дополнительном) окне Haz пишет: если примерно как на картинке то добавить в бровс пустую колонку , дать ей болк выборки { || 'MEMO'}. разрешить редактирование :lEdit := .T.и через oBrw_1:aColumns[11]:bPrewEdit := {|| ...} вызывать функцию которая в окне показывает мемо, Эта функция должна вернуть FALSE ( ну или через BtnBox делать чтоб совсем как на картинке) Что-то не получается это окно.... Пожалуйста помоги подправить... Вот исходник мой - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample/

Haz: Andrey пишет: Что-то не получается это окно... 1. EdtiBox value нужно присваивать не пустую строку а значение мемо поля 2. Forma_memo должна вернуть .F. чтоб не пустить в редактирование поля бровс

Andrey: Haz пишет: 1. EdtiBox value нужно присваивать не пустую строку а значение мемо поля 2. Forma_memo должна вернуть .F. чтоб не пустить в редактирование поля бровс Сделал и получилось ! Спасибо !!! А как теперь сделать: 1) Возврат и запись отредактированного мемо-поля ? 2) Кнопочку маленькую (квадратненькую, в размер ячейки) повесить на активное мемо-поле в TBROWSE как в DBFNavigator-e ? Пример там же - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample/ Только базу удалить старую нужно.

Haz: Andrey пишет: А как теперь сделать: 1) Возврат и запись отредактированного мемо-поля ? 2) Кнопочку маленькую (квадратненькую, в размер ячейки) повесить на активное мемо-поле в TBROWSE 1. При закрытии окна если мемо поле редактировалось - запросить сохранение и если пользователь скажет ДА - то присвоить значение Value из Editbox в мемо поле ( возможно через RLock() ). 2. Посмотри в примерах TsBrowse использование метода :SetBtnGet() это и есть кнопочка

Andrey: Haz пишет: 2. Посмотри в примерах TsBrowse использование метода :SetBtnGet() это и есть кнопочка В одно примере TsBtest.prg есть только одно использование: Brw_4:SetBtnGet( 5, "", { | oEdit, dVar | dVar := fBtnGet( dVar, oEdit:oWnd ),; oEdit:VarPut( dVar ), oEdit:Refresh() }, 16 ) В другом примере TsB_Mdi.prg все (кроме одного) закомментировано: // activating BtnGet to column 7 - not impement yet // Brw_6:SetBtnGet( 7, "Calen16", { | oGet, dVar | aRect := GetCoors( oGet:hWnd ), ; // dVar := FwCalendar( oGet:Value(), aRect[ 1 ], aRect[ 2 ], oGet:oWnd ),; // oGet:cText( dVar ), oGet:Refresh(), oGet:KeyDown( VK_RETURN, 0 ) }, 16 ) Как у себя сделать, вообще не пойму ... И почему текст закомментирован ? И вдобавок еще FwCalendar() - наверно из FiveWin'a дернули ? Помогите пожалуйста разобраться.

Haz: Andrey пишет: В одно примере TsBtest.prg есть только одно использование: Brw_4:SetBtnGet( 5, "", { | oEdit, dVar | dVar := fBtnGet( dVar, oEdit:oWnd ),; oEdit:VarPut( dVar ), oEdit:Refresh() }, 16 ) а чего тут разбираться колонке 5 назначается кнопка размером 16 пикселей, на нажатие которой вешаем кодовый блок . в сам блок передаем параметрами объект редактирования и значение до редактирования dVar. после редактирования dVar содержит новое значение и через VarPut присваиваем ее значение буферу редактора , потом делаем Refresh чтоб на экране значение поля ввода перерисовалось на значение буфера. В твоем случае dVar это значение мемо поля , fBtnGet - функция внешнего редактора которая возвращает - значение новое для мемо Но тогда :PrevEdit не надо использовать т.к. BtnGet появляется внутри ячейки редактируемой

Andrey: Нет не появляется кнопка при активном маркере, как картинке: oBrw:SetBtnGet( nI, "", { | oEdit, dVar | dVar := fBtnGet( dVar, oEdit:oWnd ),; oEdit:VarPut( dVar ), oEdit:Refresh() }, 16 ) oBrw:aColumns[nI]:bPrevEdit := {|| FORMA_MEMO( &( bBlock2 ) ) } Если убрать oBrw:aColumns[nI]:bPrevEdit := {|| FORMA_MEMO( &( bBlock2 ) ) } , то кнопка появляется ТОЛЬКО при редактировании. Пример там же - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample/

Haz: Andrey пишет: Если убрать oBrw:aColumns[nI]:bPrevEdit := {|| FORMA_MEMO( &( bBlock2 ) ) } , то кнопка появляется ТОЛЬКО при редактировании. так и должно быть это btnGET - т.е. кнопка в GET объекте , поэтому и писал что нужно не использовать PrevEdit (иначе GET не создается )

Andrey: Haz пишет: так и должно быть это btnGET - т.е. кнопка в GET объекте , поэтому и писал что нужно не использовать PrevEdit (иначе GET не создается ) А как тогда быть ? Кнопка на МАРКЕРЕ НЕ ПОКАЗЫВАЕТСЯ, только при редактировании ? А я хочу показ кнопки без редактирования, а при редактировании чтобы срабатывала функция FORMA_MEMO( &( bBlock2 ) ? Или это сделать нельзя ?



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