| Автор | Сообщение |
|
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно  ).
|
 |
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 4682
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.03.25 12:57. Заголовок: gfilatov2002 Предло..
gfilatov2002 Предложение добавить FUNCTION _TBrowse( oParam, uAlias, cBrw, nY, nX, nW, nH ) ... IF HB_ISOBJECT( uAlias ) .and. "TODBC" $ uAlias:ClassName oParam:oTODBC := uAlias oParam:aHead := {} IF HB_ISARRAY( oParam:oTODBC:Fields ) .and. Len( oParam:oTODBC:Fields ) > 0 FOR EACH o IN oParam:oTODBC:Fields AAdd( oParam:aHead, o:FieldName ) NEXT ELSE AAdd( oParam:aHead, "Fields not found !" ) ENDIF o := oParam:oTODBC IF HB_ISARRAY( o:aRecordset ) .and. Len( o:aRecordset ) > 0 uAlias := o:aRecordset ELSE uAlias := { Array( Len( oParam:aHead ) ) } ENDIF ELSEIF HB_ISCHAR( uAlias ) .AND. ! "." $ uAlias dbSelectArea( uAlias ) ... Пример BASIC\ODBC может быть такой Скрытый текст
/* * MiniGUI ODBC Demo * Based upon code from: * ODBCDEMO - ODBC Access Class Demonstration * Felipe G. Coury <fcoury@flexsys-ci.com> * MiniGUI Version: * Roberto Lopez * * Updated for HMG Extended Edition by MiniGUI Team */ #define _HMG_OUTLOG #include "minigui.ch" #xcommand WITH <oObject> DO => Self := <oObject> #xcommand ENDWITH => Self := NIL Memvar Self PROCEDURE Main LOCAL cConStr := "DBQ=" + GetStartupFolder() + "\bd1.mdb;" + ; "Driver={Microsoft Access Driver (*.mdb)}" LOCAL oo := TODBC():New( cConStr ) LOCAL cFont := "Arial", nSize := 12 SET FONT TO cFont, nSize // TsBrowse bold italic _DefineFont("Normal" , cFont, nSize , .F., .F. ) _DefineFont("Bold" , cFont, nSize , .T., .F. ) _DefineFont("Italic" , cFont, nSize-2, .F., .T. ) DEFINE WINDOW Form_1 AT 0,0 WIDTH 400 HEIGHT 400 ; TITLE 'MiniGUI ODBC Demo' ; MAIN TOPMOST ; ON INIT {|| This.Topmost := .F. } ; ON RELEASE {|| This.Hide, oo:Destroy() } DEFINE MAIN MENU DEFINE POPUP 'File' MENUITEM 'Test' ACTION Test (oo) MENUITEM 'Test 2' ACTION Test2(oo, "table1") SEPARATOR MENUITEM 'Exit' ACTION Form_1.Release END POPUP END MENU END WINDOW ACTIVATE WINDOW Form_1 RETURN Function TEST2(oo, cTbl) LOCAL cForm := "Form_2", oBrw, oTsb := oHmgData() LOCAL y := ThisWindow.Row, ; x := ThisWindow.Col, ; w := ThisWindow.Width, ; h := ThisWindow.Height, ; t := ThisWindow.Title + " _TBrowse(...)" oo:SetSQL( "SELECT * FROM " + cTbl ) IF !oo:Open() MsgStop("SELECT * FROM " + cTbl + " NOT OPEN !") RETURN Nil ENDIF oTsb:uSelector := 20 oTsb:aNumber := { 1, 30 } oTsb:aFoot := .T. oTsb:lZebra := .T. DEFINE WINDOW &cForm AT y,x WIDTH w HEIGHT h TITLE t ; CHILD BACKCOLOR YELLOW This.Cargo := oHmgData() y := x := 0 w := This.ClientWidth h := This.ClientHeight oBrw := _TBrowse( oTsb, oo, , y, x, w, h ) oBrw:SetFocus() END WINDOW ACTIVATE WINDOW &cForm oo:Close() RETURN Nil Function TEST(dsFunctions) WITH dsFunctions DO ::SetSQL( "SELECT * FROM table1" ) if ::Open() // Put data in fields array ::LoadData( ::nRecNo ) MsgInfo( ::FieldByName( "field1" ):Value ) ::Skip() MsgInfo ( ::FieldByName( "field1" ):Value ) ::GoTo( 1 ) MsgInfo ( ::FieldByName( "field1" ):Value ) ::Prior() MsgInfo ( ::FieldByName( "field1" ):Value ) ::First() MsgInfo ( ::FieldByName( "field1" ):Value ) ::Last() MsgInfo ( ::FieldByName( "field1" ):Value ) ::Close() endif ENDWITH Return NIL
|
|
 |
|
|
gfilatov2002
|
| moderator
|
Пост N: 2404
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.03.25 13:19. Заголовок: SergKis пишет: Пред..
SergKis пишет: Добавил эти изменения Благодарю за помощь 
|
 |
|
|
SergKis
|
| постоянный участник
|
Пост N: 4683
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.03.25 16:57. Заголовок: gfilatov2002 Если д..
gfilatov2002 Если добавить в пример (выше) строки ... oTsb:lZebra := .T. oTsb:cSuperHd := "Table name: " + cTbl oTsb:lSuperHd := .T. oTsb:aSuperHdColor := {CLR_YELLOW, CLR_BLUE} // {CLR_BLUE} ... таблица будет иметь более законченный вид
|
 |
|
|
gfilatov2002
|
| moderator
|
Пост N: 2405
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.03.25 17:27. Заголовок: SergKis пишет: доба..
SergKis пишет: | цитата: | | добавить в пример (выше) строки |
| OK 
|
 |
|
|
Andrey
|
| постоянный участник
|
Пост N: 7945
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.03.25 19:06. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: | цитата: | | - добавлена возможность вносить комментарии в файлы JPG; |
| А это как делать и для чего ? 
|
 |
|
|
gfilatov2002
|
| moderator
|
Пост N: 2406
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.03.25 20:19. Заголовок: Andrey пишет: для ч..
Andrey пишет: Файлы формата JPEG поддерживают создание текстового комментария, в который можно записать данные о создателе файла или любую другую информацию. Теперь доступна возможность записи или удаления такого комментария из файла. Примечание. Для использования этой возможности потребуется подключение бесплатной freeimage.dll 
|
 |
|
|
gfilatov2002
|
| moderator
|
Пост N: 2407
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.03.25 10:51. Заголовок: Опубликована финальн..
|
 |
|
|
Haz
|
| |
Пост N: 1988
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.03.25 18:43. Заголовок: Завис последней строки в Tsb
в методе ::Paint() Замена строки WHILE nI <= nLines .AND. nSkipped == 1 на WHILE nI <= ::nRowCount() .AND. nSkipped == 1 Решает вопрос. Почему nLines получает некорректное значение не разбирался
|
 |
|
|
gfilatov2002
|
| moderator
|
Пост N: 2409
Зарегистрирован: 11.02.10
|
|
Отправлено: 07.03.25 20:00. Заголовок: Haz пишет: в методе..
Haz пишет: Поправил Благодарю за помощь 
|
 |
|
|
Haz
|
| |
Пост N: 1989
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.03.25 22:46. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Григорий, это заплатка, показывающая в каком месте проблема. Поскольку, я ::lAppendMode не пользую, меня устраивает, но скорее-всего перед циклом нужно тупо повторить строчку инициализации nLines и использовать эту переменную в условиях цикла. В общем у себя оставлю так пока.
|
 |
|
|
SergKis
|
| постоянный участник
|
Пост N: 4684
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.03.25 12:31. Заголовок: Haz пишет скорее-все..
Haz пишет | цитата: | | скорее-всего перед циклом нужно тупо повторить строчку инициализации nLines и использовать эту переменную в условиях цикла |
| Возможно, надо значение переменной получать в цикле, т.к. прорисовка процесс длительный и появление новой строки в этот момент вносит разницу nLine и ::nRowCount(), что приводит к завису. Но нужна стабильная ситуация для проверки - у меня такого не происходит (::lAppendMode не пользую)
|
 |
|
|
|
|
Haz
|
| |
Пост N: 1990
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.03.25 13:40. Заголовок: SergKis пишет: Но ..
SergKis пишет: | цитата: | | Но нужна стабильная ситуация для проверки |
| Поймать завис последней строки легко , просто нужно чтоб совпало , что под последнюю строку осталось места чуть меньше ( на пару пикселей ) чем высота строки. И не используется метод динамичекого подбора высоты ::SetNoHoles() В методе ::Paint() расчёт nLines правильный, происходит до ::DrawHeading() и возможно это влияет на результат возврата ::nRowCount() в последующем Это явно видно если сравнивать значение nLines и ::nRowCount() перед циклом - к примеру nLines = 29 а ::nRowCount() = 28. Отсюда и попытка норисова лишнюю строку. Разбираться в трёх строчках кода я не вижу смысла, тк ::nRowCount() в условии цикла WHILE меня полностью устраивает
|
 |
|
|
SergKis
|
| постоянный участник
|
Пост N: 4685
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.03.25 14:39. Заголовок: Игорь, спасибо, за р..
Игорь, спасибо, за разъяснение ситуации ошибки  . У меня не происходит такого по причине использования всегда ::SetNoHoles(), даже, если все высоты строк заданы и от них размера высоту тсб (клиентской области) считаю (от кол-ва row)
|
 |
|
|
gfilatov2002
|
| moderator
|
Пост N: 2410
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.03.25 17:57. Заголовок: SergKis пишет: надо..
SergKis пишет: | цитата: | | надо значение переменной получать в цикле |
| Так и сделал. Поигрался с высотой строк в примере SAMPLES\Advanced\Tsb_lastrow, пример отработал нормально - залипания последнего ряда не было. Благодарю за помощь 
|
 |
|
|
Haz
|
| |
Пост N: 1991
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.03.25 15:11. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: | цитата: | Так и сделал. Поигрался с высотой строк в примере SAMPLES\Advanced\Tsb_lastrow, пример отработал нормально - залипания последнего ряда не было |
| Пересчет переменной внутри цикла рабочая , но не эффективная идея Это приведет к увеличению времени прорисовки бровса, не значительно но все же. Что делает этот пересчет - вызывает метод ::nRowCount(), который вызывает С-функцию CountRows(). Функция арифметически считает сколько целых строк при заданной высоте строки поместится в клиентском окне бровса между хидингами и футингами. Если хидинги и футинги инициализированы и заданы их высоты, то никакие новые строки не влияют на эту арифметику. А вот что реально влияет на арифметику , так это изменение размера клиентской области окна ::hWnd GetClientRect( ::hWnd, @aRect ) после вызова ::oHScroll:SetRange( 1, Len( ::aColumns ) ) После прорисовки горизонтального скролбара происходит уменьшение клиентской области окна бровса и соответственно ::nRowCount() уже выдаст другое значение Тоже поигрался - работает Вывод - 1 убрать расчет из тела цикла 2 Вернуть nLines в параметр цикла WHILE nI <= nLines .AND. nSkipped == 1 3 Иницилизировать nLines после строки ::oHScroll:SetRange( 1, Len( ::aColumns ) )
|
 |
|
|
gfilatov2002
|
| moderator
|
Пост N: 2411
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.03.25 16:15. Заголовок: Haz пишет: Haz пише..
Haz пишет: | цитата: | | После прорисовки горизонтального скролбара происходит уменьшение клиентской области окна бровса |
| Понял Haz пишет: | цитата: | Вывод - 1 убрать расчет из тела цикла |
| Убрал. Haz пишет: | цитата: | | 3 Иницилизировать nLines после строки |
| Рассчитываю значение nLines прямо перед циклом WHILE nI <= nLines .AND. nSkipped == 1 Благодарю за помощь 
|
 |
|
|
SergKis
|
| постоянный участник
|
Пост N: 4703
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.03.25 20:50. Заголовок: gfilatov2002 Поправ..
gfilatov2002 Поправьте FUNCTION _TBrowse(...) :ResetVScroll( .T. ) IF !Empty( :oHScroll ) :oHScroll:SetRange( 0, 0 ) ENDIF END TBROWSE
|
 |
|
|
gfilatov2002
|
| moderator
|
Пост N: 2413
Зарегистрирован: 11.02.10
|
|
Отправлено: 25.03.25 22:39. Заголовок: SergKis пишет: Попр..
SergKis пишет: | цитата: | | Поправьте FUNCTION _TBrowse(...) |
| ОК Благодарю за помощь 
|
 |
|
|
gfilatov2002
|
| moderator
|
Пост N: 2414
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.04.25 11:30. Заголовок: Опубликована финальн..
|
 |
|
|
SergKis
|
| постоянный участник
|
Пост N: 4704
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.04.25 12:42. Заголовок: gfilatov2002 Правка..
gfilatov2002 Правка не большая в ZipToMem ON RELEASE _wSend(90) // Send event 90 on release При Post, в завершении, окно с данными может destroy сделать раньше, чем выполнится код event 90 и других вызовов, если они есть в :Event(90,...), тут все события должны работать по Send В Tsb_MergeRowCells WITH OBJECT This.Object :Event( 0, {|ow,ob| ob := ow:Cargo:oTbl, ob:SetFocus(), ob:DrawSelect(), ob:Show(), DoEvents() }) ... STATIC FUNCTION TablePatam(...) ... oTsb:bInit := {|ob| ob:Hide() } oTsb:bAfter := {|ob| ... мелькания будет меньше
|
 |
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|