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

Ответов - 230, стр: 1 2 3 4 5 6 7 8 9 10 11 12 All

Andrey: SergKis пишет: Убрал в самый низ Поторопился я ... Как всегда.

Andrey: Сделал пример ! Tsb кладу на уже готовую форму в другом модуле. Всё показывает нормально, кроме вертикального скролинга. Должен быть, а не показывает при старте. Если стрелками(мышкой) подёргать, то линия скролинга появляется... обгрызанная, без стрелки вверху и внизу. Можно ли как то перерисовать весь вертикальный скролинг ?

Andrey: Новая версия МиниГуи - 18.04 Метод oBrw:ExcelOle(). При экспорте в таблице столбец с номерами домов (примерно такой порядок: 1, 2, 5, 9/2 и т.д.) неправильно экспортирует. Превращает этот столбец в 1,2,5, 09 февраля. Григорий, я сделаю тестовый пример с этим и вышлю на почту.


Andrey: Как указать правильно формат показа в Tsbrowse для текстового поля (значения "123300") по шаблону "@R 99:99:99" ? Для числового поля показ идёт правильный, а как задать такой же шаблон для текстового поля ? Если создаём aPict := { nil, nil, nil, nil, nil, "@R 99:99:99", nil } и передаём в [pre2]oBrw:SetArrayTo(aArray, aFontHF, aHead, aSize, aFoot, aPict, aAlign, aName)[/pre2] То показ 6 колонки будет так - "123300" Если сделать [pre2] oBrw:SetArrayTo(aArray, aFontHF, aHead, aSize, aFoot, aPict, aAlign, aName) oBrw:aColumns[6]:cPicture := '@R 99:99:99' [/pre2] То показ в 6 колонке будет уже "12:33:00" Опять глюк нашёл в Tsb ?

SergKis: Andrey пишет Опять глюк нашёл в Tsb ? Это от того, что игнорируешь исходники. :SetArrayTo не обрабатывает сложные Picture, а делает расчет ширины колонок для размещения правильно данных header, строк, footer (что бы помещалось все в колонке при просмотре), превращая Picture в простой вид для строки к примеру cPict := Replicate( "X", Len( ::aDefValue[ nI ] ) ). Все что не устраивает, в полученном варианте, правишь сам после создания тсб. К примеру, в массиве в колонке мах длина всех элементов 20 символов, но в процессе работы может быть 30 длина, тогда можешь регулировать колонкой задав ширину в пикселях или задав aPict[6] := repl('X', 30), ::aDefValue[ 6 ], будет от заданного aPict[6].

Andrey: Предложение по METHOD Excel2() - сделать как у METHOD ExcelOle() в самом конце метода: [pre2] If lActivate ShellExecute( 0, "Open", If( lSave, cFile, cWork ),,, 3 ) EndIf ::Display() If hProgress != Nil SendMessage( hProgress, PBM_SETPOS, 0, 0 ) EndIf Return Nil [/pre2] В METHOD ExcelOle() предлагаю сделать в самом начале: [pre2] Default lSave := ! lActivate .and. ! Empty( cXlsFile ), ; cXlsFile := "", ; hFntTitle := hFont CursorWait() // Check the file name for the number of points If AtNum( ".", HB_FNameName( cFile ) ) > 0 cMsg := 'Calling from: ' + ProcName(0) + '(' + hb_ntos( ProcLine(0) ) cMsg += ') --> ' + ProcFile(0) + ';;' cMsg += 'Output File Name - "' + HB_FNameName( cFile ) + '";' cMsg += 'contains several signs dot !;' cMsg += 'Excel can "truncate" the file name !;;' cMsg := AtRepl( ";", cMsg, CRLF ) MsgStop( cMsg , "Error" ) Endif If ::lSelector[/pre2] Только это обязательно нужно сделать, я ОЧЕНЬ ДОЛГО не мог понять почему у меня режет имя файла, а на некоторых компах нет ! Чтобы потом другим было легче это понять !!! Если в имени файла использовать несколько точек, то САМ EXCEL "режет" имя файла. Можно конечно сделать немного по другому: переименовать входящее имя файла, но тогда нужно будет потом закрывать Ole-Эксель, и открывать его заново с переименованным файлом. Не очень красивое решение здесь для Экселя. Этот вариант сделал для Экспорта Dbf-файла.

Haz: Andrey пишет: предлагаю сделать Поддержу Андрея. По первому предложению лишним не будет. В принципе хорошийстиль за собой все проводить в исходное состояние. По второму думаю все сложнее, проблема может быть не только в количестве точек. Как вариант - может сообщать о недопустимости такого имени файла, а со временем критерии могут быть расширены.

SergKis: Andrey пишет If AtNum( ".", HB_FNameName( cFile ) ) > 0 ... Не уверен, скорее уверен, что этого в ExelOle делать не надо. Как пишет Игорь варианты возможны разные, все не засунешь, да и процедура ExelOle вызывается где то, вот там как надо и лепим имя файла, если очень надо, то и excel можно запустить отдельно не в ExcelOle. Второе предложение это перегруз

Andrey: SergKis пишет: процедура ExelOle вызывается где то, вот там как надо и лепим имя файла, если очень надо, то и excel можно запустить отдельно не в ExcelOle. Второе предложение это перегруз Я проверял поведение Excel. Имя файла с несколькими точками - режется ТОЛЬКО при вызове через OLE ! Если делать вызов Excel по другому, то всё нормально. Меню экспорта 1 и 3 в программе работает нормально. В конце метода ExcelOle() вызов экселя запускается НЕ ОТДЕЛЬНО !!! [pre2] If ! Empty( cXlsFile ) .and. lSave oBook:SaveAs( cXlsFile, xlWorkbookNormal ) // вот здесь и режется... If ! lActivate CursorArrow() oExcel:Quit() ::Reset() Return Nil EndIf EndIf CursorArrow() If lActivate oSheet:Range( "A1" ):Select() oExcel:Visible := .T. // показ Экселя EndIf[/pre2] Из-за этого я и предлагаю для ЭТОГО варианта разместить предупреждения, чтобы потом кто-то не налетел на ! Я Григория замучил - что режется имя файла, месяца 2 не мог понять почему. А решение оказывается совсем ПРОСТОЕ !

PSP: Андрей, нужно абстрагироваться от конкретного случая. Все обработки вариантов нужно делать "до того, как". Методу нужно предоставить данные в том виде, в котором они будут на 100% обработаны предсказуемым образом без всяких MsgStop(...)

Dima: PSP +1

Haz: PSP пишет: Все обработки вариантов нужно делать "до того, как" +500 Под конкретный случай, нужно конкретно и решать

Andrey: Понял ваше мнение ! Andrey пишет: Новая версия МиниГуи - 18.04 Метод oBrw:ExcelOle(). При экспорте в таблице столбец с номерами домов (примерно такой порядок: 1, 2, 5, 9/2 и т.д.) неправильно экспортирует. Превращает этот столбец в 1,2,5, 09 февраля. А как это исправить ? В методе :Excel2(...) выгрузка идёт правильно.

Andrey: Пробовал задавать явно формат столбца, всё равно не помогает.[pre2] // только для 6 и 10 колонки oBrw:aColumns[6]:cPicture := '@R 99:99:99' // без этого нет показа в колонке ":" oBrw:aColumns[10]:cPicture := 'xxxxxxxxx' [/pre2]

Dima: Andrey глянь

Andrey: Спасибо Дима ! Не получается... добавить перед числом апостроф (‘). Например: ’11-53 или ‘1/47. Апостроф не отображается после нажатия клавиши ВВОД; Поставил в колонке 10 апостроф (‘) - выгружате через Оле-Эксель так же ‘3/2 или ‘9/3 Конечно как самый примитив пойдёт, только юзера будут очень недовольны таким номером дома... Можно сделать первым символом знак "_" или "~" ставить. Но потом бы из документа этот знак желательно убрать... Тогда нужно ставить обработку удаления, после вставки из буфера... А лучше надо бы в конвертацию формата для текстового поля явно в исходниках указать, типа: [pre2]oSheet:Cells( nLine, nI ):SET( "NumberFormat", '@' ) // текстовая ячейка[/pre2] Пытался разобраться сaм, ничего не понял... Там идёт накопление в буфер, а потом идёт вставка из буфера. Как до этого указать формат столбца не знаю.

Andrey: Ура ! Получилось... Нужна правка в исходнике h_tbrowse.prg: [pre2] For nCol := 1 To Len( ::aColumns ) If aColSel != Nil .and. AScan( aColSel, nCol ) == 0 Loop EndIf uData := Eval( ::aColumns[ nCol ]:bData ) If ValType( uData ) == "C" oSheet:Cells( nLine, nCol ):SET( "NumberFormat", '@' ) // text cell EndIf If ValType( uData ) == "C" .and. At( CRLF, uData ) > 0 uData := StrTran( uData, CRLF, "&&" ) If AScan( aRepl, nCol ) == 0 AAdd( aRepl, nCol ) EndIf EndIf[/pre2] В METHOD ExcelOle() предлагаю сделать эту правку ! Pasha пишет: Как вариант: перед заполнением таблицы по строкам можно установить NumberFormat для тех столбцов, для которых это надо, т.е:

Dima: Andrey пишет: SET( "NumberFormat", '@' ) Может не сработать в ряде случаев когда много цифр в ячейке и Excel по своему покажет

Andrey: Dima пишет: Может не сработать в ряде случаев когда много цифр в ячейке и Excel по своему покажет В каких случаях ? Я тестировал столбец из номеров домов - вида: 1,2,3/2, 4, 5/3, 6А, 112Б, 94 стр.3 и т.д. ТОЛЬКО для текстового столбца делаю формат :SET( "NumberFormat", '@' ) // text cell Остальные столбцы НЕ ТРОГАЮ.

Dima: Andrey пишет: В каких случаях ? Да был случай лет 5 назад , вываливал в Excel коды морозильных камер (штук 500 примерно) В этих кодах были цифры , пробелы , точки и тире. Все коды разные. Из 500 штук , штуки 3 всегда показывало криво , и шаблон подобрать не удалось (руками тоже пробовали) . PS Это был файл формата CSV



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