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

SergKis: Andrey пишет А как можно отдельно задать фонт для суперхидера, сразу. Пробовал так: :hFontSupHdSet := GetFontHandle("CardSuperH") // 5-доп.фонт Прога вылетает с ошибкой: У тебя богатая фантазия Делай так как написал выше, команда и метод

Andrey: SergKis пишет: У тебя богатая фантазия Да не фантазия, а простая невнимательность. Слишком тороплюсь сделать. Понял в чём дело, нужно так: [pre2] :hFontSupHdSet( , GetFontHandle("TsbSuperH") ) // 5-доп.фонт [/pre2] Спасибо !

SergKis: Andrey Это будет на 1-ю колонку, а остальные ... + высота у фонта будет другая, т.е. этого мало. Лучше команда или метод AddSuperHeader(), в них "букав больше"


Andrey: SergKis пишет: Лучше команда или метод AddSuperHeader(), в них "букав больше" Тогда так примерно ? [pre2] // суперхидер //:AddSuperHead( nFromCol, nToCol, uHead, nHeight, aColors, l3dLook, uFont, uBitMap, lAdjust, lTransp, ...) :AddSuperHead( 1 , :nColCount() , aSupHd[1], , , , GetFontHandle("TsbSuperH") ) [/pre2]

SergKis: Andrey пишет Понял в чём дело, нужно так: :hFontSupHdSet( , GetFontHandle("TsbSuperH") ) // 5-доп.фонт 5-ый фонт и 6-ой можно сделать тоже, в целом, наверно, удобно будет[pre2] FUNCTION _DefineTBrowse( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ; ... IF ! Empty( FontName ) .and. HB_ISARRAY( FontName ) AEval( FontName, { |cf| AAdd( aFonts, cf ) } ) aFont := ASize( aFonts, 6 ) FontName := aFont[1] ... oBrw := TSBrowse():New( ControlName, nRow, nCol, nWidth, nHeight, ; bFields, aHeaders, aWidths, ParentFormName, ; change, bDblClick, bRClick, fontname, fontsize, ; hCursor, aTmpColor, aBmp, cMsg, update, uAlias, uWhen, value, cell, ; nStyle, bLClick, aFlds, aHeadClick, nLineStyle, lRePaint, ; Delete, aJust, lock, appendable, lEnum, ; lAutoSearch, uUserSearch, lAutoFilter, uUserFilter, aPicture, ; lTransparent, uSelector, lEditable, lAutoCol, aColSel, tooltip ) IF HB_ISARRAY( aFont ) .and. Len(aFont) > 3 IF HB_ISCHAR(aFont[ 4 ]) oBrw:hFontSpcHd := GetFontHandle(aFont[ 4 ]) ENDIF IF HB_ISCHAR(aFont[ 5 ]) oBrw:hFontSupHd := GetFontHandle(aFont[ 5 ]) ENDIF IF HB_ISCHAR(aFont[ 6 ]) oBrw:hFontEdit := GetFontHandle(aFont[ 6 ]) ENDIF ENDIF ... CLASS TSBrowse FROM TControl ... DATA hFontSpcHd AS NUMERIC // special header font DATA hFontSupHd // super header font ... Method AddSuperHead( nFromCol, nToCol, uHead, nHeight, aColors, l3dLook, uFont, uBitMap, lAdjust, lTransp, ; ... Default lAdjust := .F., ; ... uHead := "", ; uFont := ::hFontSupHd ... [/pre2]

Andrey: SergKis пишет: 5-ый фонт и 6-ой можно сделать тоже, в целом, наверно, удобно будет Да удобней и логичней ! И проще программировать, один раз задать и не делать потом различных манипуляций ! Везде параметры задал и всё, а с фонтами фокусами нужно заниматься...

Andrey: Григорий, а можно описать порядок загрузки фонтов по новому в ChangeLog.txt ? А то сейчас помню, а потом забуду. А так будет напоминалка для всех !

Dima: Andrey пишет: А то сейчас помню, а потом забуду. Ты по любому забудешь

krutoff: Не могу побороть в TBrowse один неприятный момент: Если установлен SET AUTOADJUST ON -> изменяю (увеличиваю Height) размеры окна -> затем при редактировании ячейка улетает вверх! Я хочу програмно увеличить окно в зависимости от разрешения монитора - и тут такой казус ): Протестировал от h_tbrowse.prg - > TGetBox.prg -> h_getbox.prg -> координаты передает правильные. Пример: miniGui\SAMPLES\Advanced\Tsb_BitMaps\demo.prg - сделал поле "Name" редактируемым и вот результат:

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

Andrey: Подскажите как можно самому ПРАВИЛЬНО рассчитать высоту ТСБ. Что-то не учитываю в расчётах. Задаю фонты для таблицы: [pre2] DEFINE FONT TsbNorm FONTNAME "DejaVu Sans Mono" SIZE 12 DEFINE FONT TsbBold FONTNAME "Tahona" SIZE 12 BOLD DEFINE FONT TsbSuperH FONTNAME "Comic Sans MS" SIZE 18 BOLD aTsbFont := { "TsbNorm", "TsbBold", "TsbBold", "TsbSpecH", "TsbSuperH", "TsbEdit" } DEFINE TBROWSE oBrw ; ............ FONT aTsbFont ;[/pre2] Высота одной строки таблицы: [pre2] nHCell := GetTextHeight( 0, "B", GetFontHandle( "Norm" ) ) + 10 [/pre2]Кол-во строк в таблице nTsbMaxRow = 8 Добавляем высоту суперхидера + шапки + подвала: [pre2] nHFSupHd := GetTextHeight( 0, "B", GetFontHandle( "TsbSuperH" ) ) nHFHead := GetTextHeight( 0, "B", GetFontHandle( "TsbBold" ) ) nHFFoot := 0 nTsbHeight := nHCell * nTsbMaxRow + nHFSupHd + nHFHead + nHFFoot nHFntSupHd = 35 nHFntHead = 19 nTsbHeight = 303 [/pre2] При создании ТСБ прописываю любые параметры, кроме высоты ячейки, всё равно они игнорируются кроме 0: [pre2] :nHeightSuper := 16 // можно задать, если не определен фонт при построении :nHeightHead := 20 // можно задать, если не определен фонт при построении :nHeightFoot := 0 // можно задать, если не определен фонт при построении :nHeightCell := nHCell // высота ячейки берется ТОЛЬКО отсюда // :nHeightCell := 0 - прога повисает и всё, нет проверки на 0[/pre2] Вывод отладки из таблицы на форме: [pre2] 1) :nHeight = 303 2) :nHeightSuper = 49 3) :nHeightHead = 32 4) :nHeightFoot = 0 5) :nHeightSpecHd = 0 6) :nHeightCell = 29 7) GetHScrollBarHeight() = 17 8) :nRowCount() Кол-во строк = 7 [/pre2] Т.е. на форме всего 7 строк таблицы из заданных 8 !!! Почему ? Что не учитываю ? Почему меняется автоматом высота HeightSuper и HeightHead ? Исходник h_tbrowse.prg смотрел, нифига не понял, как они считаются. Как вручную можно рассчитать :nHeightSuper ? Если отключить метод убирания дырки внизу ТСБ [pre2] END TBROWSE // ON END {|ob| ob:SetNoHoles() }[/pre2] то тогда :nHeightHead получается правильно заданным, но суперхидер всё равно сам по себе считается. Ради интереса задал [pre2] :nHeightSuper := 0 :nHeightHead := 0 :nHeightFoot := 0 [/pre2] Шапки нет, а суперхидер всё равно показывается в ТСБ. Почему ?

Andrey: Пытаюсь сделать курсор с окантовкой черного цвета. Не получается... Как этот цвет задать ? [pre2] :nHRED := CLR_HRED :n_HRED := -CLR_HRED :n_HBLUE := -RGB(128,225,225) :nHBLUE := RGB(128,225,225) :nBLACK := CLR_BLACK :n_BLACK := -CLR_BLACK[/pre2] -0 же не бывает

Andrey: Блин, не сообразил сразу... Сделал вот так -RGB(1,1,1)

Andrey: А как править ключевое поле по индексу в ТСБ ? Сделал вот такой код: [pre2] nI := :nColumn( 'NN' ) :aColumns[nI]:lEdit := .T. :aColumns[nI]:nEditMove := 0 oCol := :GetColumn('NN') // обработка до ввода oCol:bPrevEdit := { |lR,ob| nRecno := (ob:cAlias)->( RecNo() ) ,; lR := (ob:cAlias)->( RLock() ) ,; iif( lR, nil , MsgInfo("Запись заблокирована!") ) ,; lR } // обработка после ввода oCol:bPostEdit := { |uv,ob| uv := (ob:cAlias)->( dbUnLock() ) ,; ob:Reset() , ob:Refresh(.T.) ,; ob:GoToRec( nRecno ), ob:Setfocus() }[/pre2] В таблице 24 записей, помещается 20. Беру 3-ю запись с NN=3 меняю на 15. В ТСБ остаётся только одна запись 15 - остальных нет ... Стрелкой вверх/вниз и другие записи появляются. Меняем NN=15 обратно на 3. В таблице опять только одна запись - 3. Как сделать правильно ?

Andrey: Заработало ! Вот так надо: [pre2] DEFINE TBROWSE oBrw ; .... LOADFIELDS LOCK // блокировка записей в автомате ..... oCol := :GetColumn('NN') // обработка до ввода oCol:bPrevEdit := { |lR,ob| lR := (ob:cAlias)->( RLock() ), ; nRecno := (ob:cAlias)->( RecNo() ) , lR } // обработка после ввода oCol:bPostEdit := { |xv,ob| xv := nil, ob:Refresh(.T.) , ob:GoToRec( nRecno ), ; ob:Upstable() , ob:Setfocus() }[/pre2]

SergKis: Andrey пишет Заработало ! Вот так надо: Взял пример Tsb_Basic\demo2.prg, поменял структуру dbf, сделал tag на поле F2 назвав NN[pre2] FUNCTION UseOpenBase() ... IF ( lDbfNo := ! File( cDbf+'.dbf' ) ) AAdd( aStr, { 'F1', 'D', 8, 0 } ) AAdd( aStr, { 'F2', 'C', 10, 0 } ) AAdd( aStr, { 'F3', 'N', 10, 2 } ) AAdd( aStr, { 'F4', 'L', 1, 0 } ) dbCreate( cDbf, aStr ) ENDIF IF lDbfNo .OR. !File( cIndx+'.cdx' ) USE ( cDbf ) ALIAS TEST EXCLUSIVE NEW WHILE TEST->( RecCount() ) < 30 TEST->( dbAppend() ) TEST->F1 := Date() + n++ TEST->F2 := StrZero( n, 2 ) TEST->F3 := n TEST->F4 := ( n % 2 ) == 0 END GO TOP INDEX ON F2 TAG NN FOR !Deleted() INDEX ON RECNO() TAG NN2 FOR !Deleted() INDEX ON RECNO() TAG DEL FOR Deleted() USE ENDIF ... [/pre2] Добавил LOCK в[pre2] DEFINE TBROWSE oBrw AT 5 + Form_0.Button_Ins.Height + 5, 5 ; ... GRID LOCK ; ... [/pre2] Режимы Insert и Edit работают и отображают тсб нормально без добавок, т.е. аналог твоего примера на изменение ключа работает.

SergKis: PS работает и без добавки LOCK и USE ( cDbf ) ALIAS TEST SHARED NEW

Andrey: SergKis пишет: Режимы Insert и Edit работают и отображают тсб нормально без добавок, т.е. аналог твоего примера на изменение ключа работает. У меня в задаче 2 индекса по базе: [pre2] cFldKey := "NN" cFilter1 := "PART==1 .AND. !Deleted()" cFilter2 := "PART==2 .AND. !Deleted()" INDEX ON &cFldKey TAG PART1 TO (cFileIndx) FOR &cFilter1 INDEX ON &cFldKey TAG PART2 TO (cFileIndx) FOR &cFilter2[/pre2] Может из-за этого ?

SergKis: Andrey пишет Может из-за этого ? Поправил, по мне, так правильнее работать, ставить SET SCOPE TO ... [pre2] IF ( lDbfNo := ! File( cDbf+'.dbf' ) ) AAdd( aStr, { 'F0', 'N', 1, 0 } ) AAdd( aStr, { 'F1', 'D', 8, 0 } ) AAdd( aStr, { 'F2', 'C', 10, 0 } ) AAdd( aStr, { 'F3', 'N', 10, 2 } ) AAdd( aStr, { 'F4', 'L', 1, 0 } ) dbCreate( cDbf, aStr ) ENDIF IF lDbfNo .OR. !File( cIndx+'.cdx' ) USE ( cDbf ) ALIAS TEST EXCLUSIVE NEW WHILE TEST->( RecCount() ) < 30 TEST->( dbAppend() ) TEST->F0 := (n % 2) + 1 TEST->F1 := Date() + n++ TEST->F2 := StrZero( n, 2 ) TEST->F3 := n TEST->F4 := ( n % 2 ) == 0 END GO TOP INDEX ON STR(F0)+F2 TAG NN FOR !Deleted() INDEX ON RECNO() TAG NN2 FOR !Deleted() INDEX ON RECNO() TAG DEL FOR Deleted() USE ENDIF SET AUTOPEN ON USE ( cDbf ) ALIAS TEST SHARED NEW OrdSetFocus('NN') SET SCOPE TO "1","1" GO TOP [/pre2] Работает

Andrey: Всем привет ! Можно ли при открытие базы в ТСБ (метод dbf) создать 6 своих виртуальных колонок перед колонками dbf ? Одну колонку можно же делать через COLNUMBER { 1, 50 } , а ещё 6 нужно. И как им присвоить имена и размеры ? a1ColTitle := {"(1)","(2)","(3)","(4)","(5)","(6)","#"} a1Name := {"CF1","CF2","CF3","CF4","CF5","CF6","ORDKEYNO"} a1Type := {"N","N","N","N","N","N","N"} a1Size := {50,50,50,50,50,50,50}



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