Форум » 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: Всем привет ! Обнаружил в методе ExcelOle() баг. Удаляет часть данных из Второй колонке в конце таблицы. Версия МиниГуи последняя. Пробовал в нескольких задачах. Вот так это выглядит, 0-к съедает в последней ячейке 2-ой колонки: Если стоит 001, то удаляет два нолика. Как бы исправить это ? В Tsb4xlsOle.prg экспорт отрабатывает на отлично.

Andrey: Ещё обнаружил в методе ExcelOle() баг. Если буквы при экспорте в эксель больше Z, т.е. колонок больше 26 - то ломается экспорт. Попробую сделать свою функцию для названия колонок и заменить везде CHR(64 +....

SergKis: Andrey пишет Попробую сделать свою функцию для названия колонок и заменить везде CHR(64 +.... Паша тебе дал хорошие функции, зачем велосипед гонять[pre2] Function ExcelAdr(nRow, nCol) Return if(nCol>26,Chr(Int((nCol-1)/26)+64),'')+Chr((nCol-1)%26+65) + LTrim(Str(Int(nRow))) и до кучи еще одну функцию (для адреса диапазона ячеек): Function ExcelAdr2(nRow1, nCol1, nRow2, nCol2) Return ExcelAdr(nRow1, nCol1) + ':' + ExcelAdr(nRow2, nCol2)[/pre2] Под них скорее надо method ExcelOle заточить, вместо[pre2] aCol := { 26, 52, 78, 104, 130, 156 }, ; aLet := { "", "A", "B", "C", "D", "E" }, ; ... cLet := aLet[ AScan( aCol, {|e| Len( If( aColSel != Nil, aColSel, ::aColumns ) ) <= e } ) ] If ! Empty( cLet ) nCol := AScan( aLet, cLet ) - 1 cLet += Chr( 64 + Len( If( aColSel != Nil, aColSel, ::aColumns ) ) - aCol[ Max( 1, nCol ) ] ) Else cLet := Chr( 64 + Len( If( aColSel != Nil, aColSel, ::aColumns ) ) ) EndIf ... [/pre2]


Andrey: SergKis пишет: Паша тебе дал хорошие функции, зачем велосипед гонять Да забыл про них. А где давал уже и не помню !

Dima: Andrey пишет: А где давал уже и не помню тут )) http://clipper.borda.ru/?1-1-0-00000531-000-0-0-1531592334

Andrey: Григорий, я исправил h_tbrowse.prg У меня заработал экспорт с большим количеством колонок. Исправленный h_tbrowse.prg - оправил к тебе на почту.

gfilatov2002: Andrey пишет: заработал экспорт с большим количеством колонок Проверил на базе с 28 полями - экспорт работает нормально. Благодарю за помощь Andrey пишет: Исправленный h_tbrowse.prg Обрати внимание, что у тебя старая версия этого файла

Andrey: gfilatov2002 пишет: Обрати внимание, что у тебя старая версия этого файла Да, я брал из предыдущей версии. Буду ждать новую версию МиниГуи.

Andrey: SergKis пишет: И еще, если добавить в TsColumn DATA bDecode // Charset decode or other DATA bEncode // Charset encode or other Не совсем понятно зачем это нужно. Можно пояснить ?

SergKis: Andrey пишет Можно пояснить ? см. http://clipper.borda.ru/?1-1-0-00000532-000-80-0-1535705309 пост 1960 и далее Можно применить для др. действий, к примеру своя шифровка\расшифровка символьных полей

SergKis: PS Обрати внимание на пример поста 1962

SergKis: PS Описание примера - пост 1940, тема та же

Andrey: SergKis пишет: Можно применить для др. действий, к примеру своя шифровка\расшифровка символьных полей Давно об этом мечтал. Пример будет на эту тему ?

SergKis: Andrey пишет Пример будет на эту тему ? [pre2] 1. :lEdit := .T. :bData := FieldWBlock('NAME', select(cAlias)) :bDecode := {|cv| sx_Decrypt(cv, 'MyPassword') } :bEncode := {|cv| sx_Encrypt(cv, 'MyPassword') } 2. oKey := oKeyData() oKey:Set(1, 'Name 1') oKey:Set(2, 'Name 2') oKey:Set(3, 'Name 3') ... oKey:Set(9, 'Name 9') :lEdit := .F. :bData := FieldWBlock('NUMKEY', select(cAlias)) :bDecode := {|nk| oKey:Get(nk, '????????') } [/pre2]

Andrey: Всем привет ! Пытаюсь понять метод oBrw:DeleteRow() для DBF. Что-то не работает... Модифицировал пример Tsb_linedrag для вставки/удаления записей. Вставка работает, удаление нет. Что не так делаю ? Проект вот - https://cloud.mail.ru/public/4kmS/Ad1Xf9Sy2 И ещё пара вопросов: 1) Не отрабатывает вставка вертикального скролинга - oBrw:ResetVScroll(). Почему ? 2) Как сделать заново полное считывание базы для этой программы ? можно обойтись без удаления объекта, а просто заново считать базу в готовый объект ?

SergKis: Andrey пишет Пытаюсь понять метод oBrw:DeleteRow() для DBF Для этого определись с режимом работы SET DELETED ON\OFF Если OFF, то записи удаленные так же на экране, только помечаются deleted, :DeleteRow() тогда делает recall для удаленной, для разделения при показе вкл. цвета для удаленных. Если ON и без индекса, то сам управляй переменной :nLen, т.е. уст. блок :bLogicLen для "правильного" счета записей в просмотре. Если с индексом, то делай его FOR ! deleted() - тогда тсб кое что сделает сама, это кое что иногда нужно менять. В этом примере для исчезновения строк при удалении сделать[pre2] GO TOP INDEX ON RecNo() TAG ID FOR ! Deleted() GO TOP DEFINE WINDOW Form_0 ; ... STATIC FUNCTION RecnoInsert(oBrw) ... // IF INDEXORD() == 0 oBrw:GoToRec( nRecno ) // ENDIF // oBrw:Refresh( .T. ) // перечитать записи таблицы ? "Insert=", nRecno ENDIF oBrw:SetFocus() ... STATIC FUNCTION RecnoDelete(oBrw) LOCAL nRow := oBrw:nRowPos ... lDelete := oBrw:DeleteRow() ? "Delete=",nRecno, lDelete If nRow == oBrw:nRowCount() oBrw:PostMsg( WM_KEYDOWN, VK_END, 0 ) EndIf oBrw:SetFocus() ... [/pre2]

SergKis: PS и SET DELETED ON поставить конечно

SergKis: PPS оговорюсь сразу, что[pre2] If nRow == oBrw:nRowCount() oBrw:PostMsg( WM_KEYDOWN, VK_END, 0 ) EndIf [/pre2] не решает всех проблем, это только пример варианта, т.к. есть еще значение :nLen его тоже учитывать надо.

Andrey: SergKis пишет: Для этого определись с режимом работы SET DELETED ON\OFF Спасибо большое за разъяснения ! А как быть с : 2) Как сделать заново полное считывание базы для этой программы ? можно обойтись без удаления объекта, а просто заново считать базу в готовый объект ?

SergKis: Andrey пишет Не отрабатывает вставка вертикального скролинга - oBrw:ResetVScroll() [pre2] FUNCTION CreateBrowse() ... // oBrw:ResetVScroll() // показ вертикального скролинга можно не ставить если ставить, то лучше парой строк // oBrw:ResetVScroll() // показ вертикального скролинга // oBrw:oHScroll:SetRange( 0, 0 ) VScroll появляется при :nLen > :nRowCount() и потом остается. При задании ширины тсб это надо учитывать. Если VScroll не нужен в твоем примере, то делаем oBrw:lNoVScroll := .T. // у тебя он уже так стоит и STATIC FUNCTION RecnoInsert(oBrw) ... If oBrw:lNoVScroll oBrw:oVScroll := Nil EndIf oBrw:GoToRec( nRecno ) ... STATIC FUNCTION RecnoDelete(oBrw) ... lDelete := oBrw:DeleteRow() ? "Delete=",nRecno, lDelete If oBrw:lNoVScroll oBrw:oVScroll := Nil EndIf If nRow == oBrw:nRowCount() ... [/pre2]



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