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

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

Haz: Andrey пишет: Народ, отзовитесь ... Как это можно реализовать ? FreeImage в помощь. Смотри примеры , как минимум Advanced\Freeimage , там как раз загрузка картинки из базы.

Andrey: Спасибо за ссылку. Посмотрел примеры, ну там и наворочено... Не знаю как и прикрутить это к ТСБ...

Haz: Andrey пишет: Посмотрел примеры, ну там и наворочено... Не знаю как и прикрутить это к ТСБ Ты притворяешься? Один из самых мелких примеров. Получить картинку из базы, грузнуть в память и получив хендл указать в uBmpCell. В примере картинку берут из базы sql запросом , с этой строки чуть ниже всего одна строчка кода для получения хендла. Удачи.


Andrey: Haz пишет: Ты притворяешься? Да нет. Не совсем ясен будет механизм показа. Haz пишет: Получить картинку из базы, грузнуть в память и получив хендл указать в uBmpCell И как это сделать - грузнуть в память ? Если в базе будет 10 тыс. записей, то все картинки нужно будет грузить в память ? А она выдержит столько ? Пример давал выше - там все картинки уже в базе. Если не сложно, покажи пожалуйста на примере, как это сделать. Думаю, что и другим будет интересно.

Haz: Andrey пишет: Если в базе будет 10 тыс. записей, то все картинки нужно будет грузить в память Хендл картинки нужен в момент прорисовки строки.Нет надобности весь миллиард держать в памяти. При желании можно динамичную подкачку сделать и загрузку хендлов в хеш по номеру записи на пару страниц бровса вверх и вниз и отслеживать диапазон по событиям бровса.

Haz: Andrey пишет: Не совсем ясен будет механизм показа. LoadImage() в блоке ubmpCell вопросов же не вызовет с механизмом. И тут тоже самое, вместо LoadImage() функция freeimage которая выдаёт хендл по строке.

Haz: Haz пишет: FreeImage в помощь. Андрей! Плохие новости , через FI не получится в ТСБ скормить хендл картинки, ТСБ не понимает хендл возвращаемый FI_LoadImage...() Не трать время, ищи другой способ

Andrey: Haz пишет: Плохие новости , через FI не получится в ТСБ скормить хендл картинки, ТСБ не понимает хендл возвращаемый FI_LoadImage...() Не трать время, ищи другой способ Огромное СПАСИБО за то что проверил это. А то я бы ... и нифига бы не понял.

Haz: В FW есть функция загрузки битмапа из строки, в MG нет такой. Здесь только LoadImage() из файла или ресурсов. Поэтому решение будет кривым : Из блоба писать в файл , а из Файла LoadImage() Более того, сам код TsBrowse использует именно такой подход. Функция StockBmp() из ТСБ для графических иконок пользует последовательность кода [pre2] nHandle := FCreate( cBmpFile ) nWrite := FWrite( nHandle, cBmp, Len( cBmp ) ) FClose( nHandle ) hBmp := LoadImage( cBmpFile ) FErase( cBmpFile ) [/pre2]

Andrey: Haz пишет: В FW есть функция загрузки битмапа из строки, в MG нет такой. А взять такую функцию и добавить в МиниГуи можно ? Или кто-то поможет это сделать ? Без нарушения авторских прав FW....

Haz: Andrey пишет: А взять такую функцию и добавить в МиниГуи можно ? Ну если кто возьмётся с код править, то можно добавить.

Andrey: Буду думать над этим вопросом. Может кто из наших форумчан поможет ?

Andrey: Ещё один вопрос по ТСБ. При первом показе ТСБ делаю показ ПУСТОЙ таблицы (ну юзер так привык), как а Экселе. Мешают/раздражают значки логического поля. Как их можно убрать на время ?

Haz: Andrey пишет: Как их можно убрать на время oCol:bDecode := { lxl if( время не прошло, nil, x )}

Andrey: Спасибо ! Нашёл ещё одно решение. При старте делаю так: [pre2] oBrw:aCheck := { LoadImage("CheckT28"), /*LoadImage("CheckF28")*/ } // заменяем колонку CHECKBOX на свои картинки[/pre2] А потом, после заполнения таблицы делаю так: [pre2] IF oBrw:Cargo:n1Start > 0 // не пустая таблица oBrw:aCheck := { LoadImage("CheckT28"), LoadImage("CheckF28") } ENDIF [/pre2]

Andrey: Что то не получается сделать ширину в экселе при экспорте в ТСБ штатными средствами. Вот такой код: [pre2] oBrw:ExcelOle( cXlsFile, lActivate, hProgress, aTitle, hFont, lSave, bExternXls, aColSel, bPrintRow ) For nI := 1 To oBrw:nColCount() oCol := oBrw:aColumns[ nI ] nW := oCol:nWidth oSheet:Columns(nI):ColumnWidth := nW // строка 246 Next[/pre2] Вылет вот такой:[pre2] Error BASE/1004 Метод не экспортирован: COLUMNS Args: [1] = U [2] = N 1 --------------------------------- Stack Trace --------------------------------- Called from COLUMNS(0) Called from TOEXCEL2(246) in module: Form_7Btn.prg Called from (b)MYCONTEXMENUEXPORT(48) in module: Form_7Btn.prg Called from _DOCONTROLEVENTPROCEDURE(0) [/pre2] Эксель не закрыт, на экране висит. Перезапускать эксель не хочется. Что ещё забыл ? Там в исходнике METHOD ExcelOle() вот это стоит: [pre2] IF bExtern != NIL Eval( bExtern, oSheet, Self ) ENDIF oRange:Borders():LineStyle := xlContinuous oRange:Columns:AutoFit()[/pre2] Т.е. если я дам функцию в bExtern, свои размеры колонок, эксель потом сам переформатирует колонки ?

SergKis: Andrey пишет Эксель не закрыт, на экране висит. Может и висит, но сообщение говорит, что в переменной oSheet нет объекта или он, метод, написан неверно, т.е. метод Columns не найден. Почему сразу не задаешь размеры, при описании колонок Header ? В конце формирования Sheet обычно делают AutoFit для выравнивания размеров колонок к размеру текстов в них

Andrey: SergKis пишет: Почему сразу не задаешь размеры, при описании колонок Header ? Да в штатном oBrw:ExcelOle() это вроде нельзя... SergKis пишет: Может и висит, но сообщение говорит, что в переменной oSheet нет объекта Да там в этом методе все переменные локальные: [pre2]METHOD ExcelOle( cXlsFile, lActivate, hProgress, cTitle, hFont, lSave, bExtern, aColSel, bPrintRow ) CLASS TSBrowse LOCAL oExcel, oBook, oSheet, nRow, nCol, uData, nEvery, oRange, cRange, cCell, cLet, nColHead, ;[/pre2] Были бы переданны в PUBLIC - было бы хорошо.... Но это опять править исходники МиниГуи надо.

SergKis: Andrey пишет Да там в этом методе все переменные локальные: Тебе дан ТВОЙ блок кода с параметрами, в нем и НАДО все делать Eval( bExtern, oSheet, Self ), т.е. Задай bExtern, а oSheet, oBrw получишь. Твое oBrw:ExcelOle( cXlsFile, lActivate, hProgress, aTitle, hFont, lSave, bExternXls, aColSel, bPrintRow ) For nI := 1 To oBrw:nColCount() oCol := oBrw:aColumns[ nI ] nW := oCol:nWidth oSheet:Columns(nI):ColumnWidth := nW // строка 246 Next конечно нет объекта в oSheet

Andrey: SergKis пишет: Задай bExtern, а oSheet, oBrw получишь. Твое oRange:Columns:AutoFit() стоит после Eval( bExtern, oSheet, Self ) Наверное моя ширина колонок замениться ? Вот я про это и спрашиваю...



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