Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть V) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №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
[только новые]
|
|
Andrey
|
| постоянный участник
|
Пост N: 4612
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.12.15 16:47. Заголовок: Haz пишет: В качест..
Haz пишет: цитата: | В качестве подтверждения - твой свежий вопрос по TSBrowse : - "Как поменять картинку в уже сформированной таблице ?" Ответ есть и в исходниках и даже в примерах ..... |
| Я так и не нашёл... Сделал по другому... Если не сложно - ткни где это ? Haz пишет: цитата: | PS Притом мараторий же временный |
| Но если временный, то тогда ладно...
| |
|
Haz
|
| |
Пост N: 720
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.12.15 16:51. Заголовок: Andrey пишет: Если ..
Andrey пишет: цитата: | Если не сложно - ткни где это ? |
| в примере 3.5к размером Tsb_Cursor.prg в зависимости от условия If( oBrw:lDrawSelect ..... или рисуется или не рисуется . Вместо НЕ рисуется можно рисовать другую и по другому условию oBrw:GetColumn( 'DATE' ):uBmpCell := {|| If( oBrw:lDrawSelect, LoadImage( "Calendar.BMP" ), NIL ) }
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4613
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.12.15 17:34. Заголовок: Haz пишет: в пример..
Haz пишет: Спасибо БОЛЬШОЕ ! Смотрел же это пример.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 865
Зарегистрирован: 11.02.10
|
|
Отправлено: 16.12.15 11:25. Заголовок: Выпустил очередной р..
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4614
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.12.15 14:51. Заголовок: Пересобрал свой боль..
Пересобрал свой большой проект ! Полёт нормальный !
| |
|
gfilatov2002
|
| moderator
|
Пост N: 866
Зарегистрирован: 11.02.10
|
|
Отправлено: 17.12.15 15:29. Заголовок: Andrey пишет: Полёт..
Andrey пишет: Благодарю за подтверждение Для справки: основные изменения в новой сборке были связаны с перелопачиванием всего Си-кода для 64-битной совместимости и исправлением небольших неточностей в PRG-коде ядра библиотеки. Ожидаю отчета о переходе на новую версию и от других пользователей...
| |
|
Haz
|
| |
Пост N: 728
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.12.15 16:34. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Ожидаю отчета о переходе на новую версию и от других пользователей... |
| Пересобрал пару проектов , собираются без замечаний. Запускаются , работают. Все не тестировал, т.к. много , основное нормально пашет
| |
|
gfilatov2002
|
| moderator
|
Пост N: 869
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.01.16 13:04. Заголовок: Просто к сведению. В..
Просто к сведению. Выпустил сегодня RC для очередной сборки библиотеки, которая выйдет на следующей неделе... Полный список изменений см. ниже Скрытый текст
* Modified: Using of the C-function hb_vmPushNumInt() instead of hb_vmPushLong() for proper 64-bit handling in the MiniGUI core. Based upon a workaround of Przemyslaw Czerpak <druzus/at/priv.onet.pl>. Contributed by Dr. Claudio Soto <srvet@adinet.com.uy>. * Updated: Modified the application manifest for compatibility with Windows 10. A manifest file is common now for 32- and 64-bit builds. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see Windows7.Manifest in folder \Resources) * Updated: HbSQLite3 library: - update for using a recent SQLITE3 version 3.10.0. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - Fixed: Correction of the editable status in the method KeyDown. Problem was reported by Dusko Radojcin. Based upon a contribution of Janusz Pora <januszpora@onet.eu>. * Updated: Harbour Compiler 3.2.0dev (SVN 2016-01-09 20:57): * New: added HBFOXPRO library (see in folder \Harbour\Lib); * New: added HBGZIO library (see in folder \Harbour\Lib); * Updated: OpenSSL wrapper for using 1.0.2e version. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: HMGS-IDE v.1.3.0 Project Manager and Two-Way Visual Form Designer: - fixed minor typo in the Image control definition. Bug was reported by Pete Dionysopoulos <pete_westg@yahoo.gr>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: 'Vista Command Link Button' sample: - Command Link Button control was defined as user component below: @ <row>,<col> CLBUTTON <name> OF <parent> ; CAPTION <caption> NOTETEXT <notes> ; ACTION <action> [ <default: DEFAULT> ] - added pseudo-OOP method SetShield for showing of the Admin privilege requiring. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\CommandLink) * Updated: 'Print Pie Graph' sample: - updated the data for December 2015. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\GraphPrint) * Updated: 'NirCmd Dll Usage' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\NirCmdDll) * Updated: 'Volume Info' sample: - added a sample with using of the updated CallDll32 function. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo3.prg in folder \samples\Advanced\VOLUME_INFO) * Updated: 'Windows Version' sample: - fixed Windows 10 detection. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\WinVersion)
| Также убрал статус beta у 64-битной сборки (вроде, нареканий не было либо никто не пробовал )
| |
|
gfilatov2002
|
| moderator
|
Пост N: 870
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.01.16 11:19. Заголовок: Выпустил очередной р..
| |
|
Haz
|
| |
Пост N: 751
Зарегистрирован: 20.02.11
|
|
Отправлено: 21.01.16 12:33. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Григорий , спасибо! Постоянно , слежу и пробую "на вкус" все новое в твоем проекте.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4660
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.01.16 20:23. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | * Updated: Modified the application manifest for compatibility with Windows 10. A manifest file is common now for 32- and 64-bit builds. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see Windows7.Manifest in folder \Resources) |
| Теперь программы собираются сразу для Windows7 и выше ?
| |
|
|
gfilatov2002
|
| moderator
|
Пост N: 871
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.01.16 11:17. Заголовок: Andrey пишет: Тепер..
Andrey пишет: цитата: | Теперь программы собираются сразу для Windows7 и выше ? |
| Нет, это определяется не манифестом, а использованным Си-компилятором: - для ВСС 5.5 - от Win98 и выше; - для MinGW - от WinXP и выше; - для PellesC - от Win7 и выше.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4662
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.01.16 11:26. Заголовок: Некорректно спросил...
Некорректно спросил. Имел в виду, что размеры форм, шрифта будет правильно отображаться в Win7 по Win10 и не наезжать друг на друга под разными системами. Я уже протестировал - всё классно получается ! Спасибо !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4665
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.01.16 22:38. Заголовок: Читаю в MiniGUI.chm ..
Читаю в MiniGUI.chm "MiniGui 16 Extend" функции GetMyDocumentsFolder() и GetModuleFilename() Ставлю к себе в программу, не собирается: Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland Error: Unresolved external '_HB_FUN_GETMODULEFILENAME' referenced from ... Error: Unresolved external '_HB_FUN_GETMYDOKUMENTSFOLDER' referenced from ... hbmk2[IEntrepreneur]: Error: Running linker. 2 Поиск по всей папке MiniGUI не дал ничего ! Где эти функции ?
| |
|
Alex_Cher
|
| |
Пост N: 20
Зарегистрирован: 18.06.15
|
|
Отправлено: 28.01.16 12:38. Заголовок: Уважаемый Григорий, ..
Уважаемый Григорий, наткнулся в примерах ... сбой в программах на фукции MsgMiniGuiError() ... Например - Application: C:\MiniGUI\SAMPLES\BASIC\Histogram\demo.exe Date: 01/28/16 Time: 13:25:41 Time from start: 0 days 0 hours 0 mins 11 secs Error MGERROR/0 Control: Graph_Title Of Veamos Not defined. Program terminated. Called from MSGMINIGUIERROR(94) Called from SETPROPERTY(3661) Called from ELGRAFICO(139) Called from (b)PRESENTA(4) Called from _PROCESSINITPROCEDURE(1511) Called from _ACTIVATEWINDOW(1363) Called from PRESENTA(52) Called from (b)MAIN(699) Called from _DOCONTROLEVENTPROCEDURE(1670) Called from EVENTS(1583) Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1388) Called from MAIN(24) Описание этой фукции MsgMiniGuiError() выдачи наименования ошибки нигде не нашел ...
| |
|
Haz
|
| |
Пост N: 763
Зарегистрирован: 20.02.11
|
|
Отправлено: 28.01.16 12:42. Заголовок: Alex_Cher пишет: Оп..
Alex_Cher пишет: цитата: | Описание этой фукции MsgMiniGuiError() выдачи наименования ошибки нигде не нашел ... |
| Плохо искал MiniGui\Source\h_error.prg *-----------------------------------------------------------------------------* *-Date Created: 01-01-2003 *-Author: Antonio Novo <antonionovo@gmail.com> *-Modified by Grigory Filatov at 24-08-2014 *-----------------------------------------------------------------------------* FUNCTION MsgMiniGuiError( cMessage, lAddText ) *-----------------------------------------------------------------------------* cMessage += iif( hb_defaultValue( lAddText, .T. ), " Program terminated.", "" ) RETURN Eval( ErrorBlock(), _HMG_GenError( cMessage ) ) А в примере MiniGUI\SAMPLES\BASIC\Histogram\demo.exe ошибка происходит потому, что гистограмма пытается вывести заголовок (Title), который был удален руками из поля редактирования.
| |
|
Alex_Cher
|
| |
Пост N: 21
Зарегистрирован: 18.06.15
|
|
Отправлено: 02.02.16 13:02. Заголовок: ВНИМАНИЕ ВСЕМ кто пе..
ВНИМАНИЕ ВСЕМ кто перегнал свои проекты под последнюю сборку 16.01 Функция конвертации текстового файла в DBF работает не корректно - append from _FailName.txt delimited with "," Файл DBF получается с совершенной измененным записями не соответсвующими исходнику. Срочно перегнал проект под сборку 15.12 - работает нормально. Уважаемый Григорий прошу обратить вниманине ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 872
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.02.16 16:10. Заголовок: Alex_Cher пишет: пр..
Alex_Cher пишет: Эта проблема уже решена Пржемеком в последней версии Харбора на сервере GitHub цитата: | Last ChangeLog entry: 2016-02-01 14:55 UTC+0100 Przemyslaw Czerpak |
| Исправленная версия Харбора будет включена в следующую сборку минигуи 16.02
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4682
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.02.16 17:12. Заголовок: А проблемы с индекса..
А проблемы с индексами CDX нет случайно тоже ? А то второй день борюсь с кодом... Индекс ломается при закрытии... Ну точно, откатился на старую версию, работает...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 846
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.02.16 20:20. Заголовок: gfilatov2002 У себя..
gfilatov2002 У себя с TsBrowse сделел правку: METHOD DrawHeaders( lFooters ) ... было If lOrder //V90 Default lDescend := .F., ::aSortBmp := { StockBmp( 4 ), StockBmp( 5 ) } hBitMap := ::aSortBmp[ If( lDescend, 2, 1 ) ] nAlign := nMakeLong( DT_LEFT, DT_RIGHT ) ... стало nAlign := nMakeLong( nAlign, DT_RIGHT )
| |
|
SergKis
|
| постоянный участник
|
Пост N: 847
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.02.16 20:31. Заголовок: gfilatov2002 еще вв..
gfilatov2002 еще ввел в TSColumn.prg DATA lNoDescend AS LOGICAL INIT .F. // No descending order flag ( dbf ) и в TsBrowse для работы с ордером METHOD SetOrder( nColumn, cPrefix, lDescend ) ... было If ::lIsDbf .and. ! Empty( oColumn:cOrder ) //V90 If nColumn == ::nColOrder .or. oColumn:lDescend == Nil //V90 If lDescend == Nil lDescend := If( Empty( ::nColOrder ) .or. oColumn:lDescend == Nil, .F., ! oColumn:lDescend ) EndIf ( ::cAlias )->( OrdDescend( ,, lDescend ) ) oColumn:lDescend := lDescend ... стало EndIf If oColumn:lNoDescend lDescend := .F. Else ( ::cAlias )->( OrdDescend( ,, lDescend ) ) EndIf oColumn:lDescend := lDescend ... не всегда мне descend нужет на dbf
| |
|
|
Haz
|
| |
Пост N: 768
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.02.16 10:36. Заголовок: Маленькое дополнение в TSBrowse
Григорий, добавил в метод SetBtnGet() поддержку символьного имени колонки. Если можно - включите это в сборку. METHOD SetBtnGet( nColumn, cResName, bAction, nBmpWidth ) CLASS TSBrowse Default nBmpWidth := 16 nColumn := if( ValType( nColumn ) == "C", ::nColumn( nColumn ), nColumn ) If nColumn == Nil .or. nColumn > Len( ::aColumns ) .or. nColumn <= 0 Return Self EndIf ::aColumns[ nColumn ]:cResName := cResName ::aColumns[ nColumn ]:bAction := bAction ::aColumns[ nColumn ]:nBmpWidth := nBmpWidth ::aColumns[ nColumn ]:lBtnGet := .t. Return Self Теперь можно вместо oBrw:SetBtnGet( oBrw:nColumn("TEST"), "", { |oEdit, xVar| ....... } , 32 ) так oBrw:SetBtnGet( "TEST", "", { |oEdit, xVar| ....... } , 32 ) , что гораздо читабельнее
| |
|
gfilatov2002
|
| moderator
|
Пост N: 875
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.02.16 12:01. Заголовок: Haz пишет: включите..
Haz пишет: Не вопрос - уже сделал SergKis Для отключения сортировки колонок есть переменная lNoChangeOrd в классе TSBrowse
| |
|
SergKis
|
| постоянный участник
|
Пост N: 848
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.16 13:16. Заголовок: gfilatov2002 Как я ..
gfilatov2002 Как я понял, флаг lNoChangeOrd - отменяет переключение ордеров при .T. вообще, а при .F. SetOrder(...) работает с переключением lDescend := .F.\.T. и если на теге dbf ключ по возрастанию, то обратную сортировку не отключить (в тек. версии), у меня не получилось. А что с постом 846 предыдущего листа. Там, на мой взгляд, ошибка, т.е. центрованный текст в шапке прыгает влево при SetOrder(...) на колонку, а nAlign определяется выше по тексту
| |
|
gfilatov2002
|
| moderator
|
Пост N: 876
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.02.16 13:45. Заголовок: SergKis пишет: на м..
SergKis пишет: цитата: | на мой взгляд, ошибка, т.е. центрованный текст в шапке прыгает влево |
| Благодарю за разъяснение! Действительно, при переключении сортировки игнорируется текущее выравнивание колонки (так - у автора библиотеки). Поправил для новой сборки SergKis пишет: цитата: | обратную сортировку не отключить (в тек. версии) |
| Да, все верно! Но, если обратная сортировка колонки пользователем не нужна, то тогда просто можно отменить сортировку, ведь остается только прямая сортировка Или я что-то упустил...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 849
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.16 14:07. Заголовок: gfilatov2002 пишет:т..
gfilatov2002 пишет: цитата: | тогда просто можно отменить сортировку |
| METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) ... ElseIf nClickRow == 0 .and. ::lDrawHeaders .and. ! ::lNoChangeOrd // GF 1.71 If ::bLDblClick != Nil .and. ::aActions == Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self ) Else ::SetOrder( ::nAtCol( nColPix, ! ::lSelector ) ) //V90 EndIf ... колонок со связанными тегами может быть от 2-х и больше, т.е. управление\переключение ими затруднено
| |
|
SergKis
|
| постоянный участник
|
Пост N: 850
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.16 14:33. Заголовок: PS. поставив oCol:cO..
PS. поставив oCol:cOrder := <тег наме> нескольким колонкам, далее по переключению все делает TsBrowse, без внешнего управления
| |
|
gfilatov2002
|
| moderator
|
Пост N: 877
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.02.16 15:05. Заголовок: SergKis пишет: пост..
SergKis пишет: цитата: | поставив oCol:cOrder := <тег наме> нескольким колонкам |
| Понял, добавлю переменную lNoDescend, как было предложено выше
| |
|
Haz
|
| |
Пост N: 769
Зарегистрирован: 20.02.11
|
|
Отправлено: 11.02.16 12:21. Заголовок: Григорий , еще попра..
Григорий , еще поправочка в TSBrowse Описание проблемки: Установку фильтра на базу обычно делаю так : (oBrw:cAlias)->dbSetFilter() (oBrw:cAlias)->dbGoTop() oBrw:Reset() Если фильтр возвращает 0 записей , то в методе ::Reset() по ::GoTop() или ::GoBottom() игнорируется выполнение блока bChange. т.к. в исходниках при ::nLen < 1 сразу идет Return Self Но по сути ведь произошло перепозиционирование записи с какой то до фильтра, на Bof() или Eof() и по логике bChange должен сработать. У меня по bChange висит вывод комментария по текущей записи в окно и получаю что записей нет, а коммент остался. Мне не сложно после Reset выполнить Eval( oBrw:bChange ) , но есть ощущение что это не наш метод Решение Можно подправить методы ::GoTop() или ::GoBottom() чтобы перед Return Self вызывался bChange, но думаю проще это один раз сделать в ::Reset(). Тем более эта ситуация возникает только в случае когда явно этот ::Reset() требуется Предлагаю такую концовку метода ::Reset() ::Refresh( .T., .T. ) If ::nLen <1 .and. ::bChange != Nil Eval( ::bChange, Self, 0 ) EndIf Return Self
| |
|
gfilatov2002
|
| moderator
|
Пост N: 878
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.02.16 12:45. Заголовок: Haz пишет: еще попр..
Haz пишет: цитата: | еще поправочка в TSBrowse |
| Принято с благодарностью
| |
|
gfilatov2002
|
| moderator
|
Пост N: 879
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.02.16 12:49. Заголовок: Просто к сведению. В..
Просто к сведению. Выпустил сегодня RC для очередной сборки библиотеки, которая выйдет на следующей неделе... Полный список изменений см. ниже Скрытый текст
* Fixed: The compilation of the MiniGUI core in the newer BCC versions (tested since 5.82 to 7.0). Problem was reported by Ivanil Marcelino <ivanil@linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Fixed: CallDll library source code: - renamed CallDll32() to HMG_CallDLL() for avoiding of the names conflict with the function in the HbMisc contrib library. Note: This is an INCOMPATIBLE change. Problem was reported by Pete Dionysopoulos <pete_westg@yahoo.gr>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Source\CallDll). * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - added handling of the variable :lNoDescend from TSColumn class; - fixed header aligning at the switching of the column order. Contributed by SergKis. * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.11.0dev (from 3.10.0). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2016-02-10 17:17): * Fixed: APPEND FROM ... DELIMITED and APPEND FROM ... SDF bugs; * Updated: HbNetIO contrib library; (see readme.txt in folder \samples\Basic\NETIO\Server); * Updated: most important differences between Harbour and xHarbour (see xhb-diff.txt in folder \harbour\doc) Contributed by Przemyslaw Czerpak <druzus/at/priv.onet.pl> (look at ReadMe.txt in folder \harbour) * Updated: HMGS-IDE v.1.3.0 Project Manager and Two-Way Visual Form Designer: - correction of 'out of array range' error in the internal function cTypeOfControl(). Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: 'Test Print a Plain Text File' sample. Based upon a contribution by Bicahi Esgici <esgici@gmail.com>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\MiniPrint_3) * New: 'Transfer Grid data to HTML file' sample. Based upon a contribution of S.Rathinagiri <srgiri@dataone.in>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\Grid2HTML) * New: 'SQLCipher usage' sample is based on SQLCipher encryption for SQLite (https://www.zetetic.net/sqlcipher). It is mingw32-based lib only. Based upon a contribution of S.Rathinagiri <srgiri@dataone.in>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\sqlcipher) * Updated: 'Vista Command Link Button' sample: - expanded syntax: @ <row>,<col> CLBUTTON <name> OF <parent> ; [ WIDTH <w> ] [ HEIGHT <h> ] ; CAPTION <caption> NOTETEXT <notes> ; ACTION <action> [ <default: DEFAULT> ] Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\CommandLink) * Updated: 'HMGTALK Client' sample for using of the function CallDll32() from the Harbour hbmisc library. (see demo in folder \samples\Advanced\HMGTALK)
| Кстати, мои результаты тестирования скорости текущей версии Харбора см. ниже Скрытый текст
2016.02.10 21:11:45 Windows 10 10.0.0 Harbour 3.2.0dev (r1602101617) Borland C++ 5.5.1 (32-bit) x86 THREADS: 0 N_LOOPS: 1000000 [ T000: empty loop overhead ]...................................0.05 ==================================================================== [ T001: x := L_C ]..............................................0.00 [ T002: x := L_N ]..............................................0.00 [ T003: x := L_D ]..............................................0.00 [ T004: x := S_C ]..............................................0.02 [ T005: x := S_N ]..............................................0.02 [ T006: x := S_D ]..............................................0.00 [ T007: x := M->M_C ]...........................................0.03 [ T008: x := M->M_N ]...........................................0.02 [ T009: x := M->M_D ]...........................................0.02 [ T010: x := M->P_C ]...........................................0.02 [ T011: x := M->P_N ]...........................................0.02 [ T012: x := M->P_D ]...........................................0.02 [ T013: x := F_C ]..............................................0.00 [ T014: x := F_N ]..............................................0.00 [ T015: x := F_D ]..............................................0.00 [ T016: x := o:Args ]...........................................0.08 [ T017: x := o[2] ].............................................0.06 [ T018: round( i / 1000, 2 ) ]..................................0.11 [ T019: str( i / 1000 ) ].......................................0.38 [ T020: val( s ) ]..............................................0.13 [ T021: val( a [ i % 16 + 1 ] ) ]...............................0.23 [ T022: dtos( d - i % 10000 ) ].................................0.27 [ T023: eval( { || i % 16 } ) ].................................0.19 [ T024: eval( bc := { || i % 16 } ) ]...........................0.13 [ T025: eval( { |x| x % 16 }, i ) ].............................0.16 [ T026: eval( bc := { |x| x % 16 }, i ) ].......................0.13 [ T027: eval( { |x| f1( x ) }, i ) ]............................0.20 [ T028: eval( bc := { |x| f1( x ) }, i ) ]......................0.19 [ T029: eval( bc := &("{ |x| f1( x ) }"), i ) ].................0.17 [ T030: x := &( "f1(" + str(i) + ")" ) ]........................1.36 [ T031: bc := &( "{|x|f1(x)}" ), eval( bc, i ) ]................1.81 [ T032: x := valtype( x ) + valtype( i ) ].....................0.22 [ T033: x := strzero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........0.42 [ T034: x := a[ i % 16 + 1 ] == s ].............................0.16 [ T035: x := a[ i % 16 + 1 ] = s ]..............................0.19 [ T036: x := a[ i % 16 + 1 ] >= s ].............................0.19 [ T037: x := a[ i % 16 + 1 ] <= s ].............................0.19 [ T038: x := a[ i % 16 + 1 ] < s ]..............................0.19 [ T039: x := a[ i % 16 + 1 ] > s ]..............................0.19 [ T040: ascan( a, i % 16 ) ]....................................0.14 [ T041: ascan( a, { |x| x == i % 16 } ) ].......................1.58 [ T042: iif( i%1000==0, a:={}, ) , aadd(a,{i,1,.T.,s,s2,a2 ]....0.48 [ T043: x := a ]................................................0.00 [ T044: x := {} ]...............................................0.05 [ T045: f0() ]..................................................0.02 [ T046: f1( i ) ]...............................................0.05 [ T047: f2( c[1...8] ) ]........................................0.03 [ T048: f2( c[1...40000] ) ]....................................0.03 [ T049: f2( @c[1...40000] ) ]...................................0.02 [ T050: f2( @c[1...40000] ), c2 := c ]..........................0.05 [ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.22 [ T052: f2( a ) ]...............................................0.03 [ T053: x := f4() ].............................................0.48 [ T054: x := f5() ].............................................0.11 [ T055: x := space(16) ]........................................0.08 [ T056: f_prv( c ) ]............................................0.17 ==================================================================== [ total application time: ]....................................13.59 [ total real time: ]...........................................13.64
|
| |
|
|
Alex_Cher
|
| |
Пост N: 22
Зарегистрирован: 18.06.15
|
|
Отправлено: 12.02.16 13:39. Заголовок: Уважаемый Григорий, ..
Уважаемый Григорий, C:\MiniGUI\SAMPLES\BASIC\ActiveX\Demo.prg жалуется на устаревшую версию браузера - click here возможно ли сделать обновление ..?
| |
|
Haz
|
| |
Пост N: 770
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.02.16 14:01. Заголовок: Alex_Cher пишет: во..
Alex_Cher пишет: цитата: | возможно ли сделать обновление ..? |
| Скорее всего обновление требуется антивирусу на компе. ActiveX тут не причем, к сожалению похоже на браузерный вирус PS. Хотя может и сам IE7 уже пора на пенсию , ему больше 10 лет )))
| |
|
gfilatov2002
|
| moderator
|
Пост N: 880
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.16 14:18. Заголовок: Alex_Cher пишет: жа..
Alex_Cher пишет: цитата: | жалуется на устаревшую версию браузера |
| Просто надо обновить Internet Explorer, который используется компонентом ActiveX. Если установленная система позволяет, то - до версии 11 (иначе 9).
| |
|
SergKis
|
| постоянный участник
|
Пост N: 855
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.02.16 22:31. Заголовок: gfilatov2002 еще пр..
gfilatov2002 еще правочка, выделенным цветом добавка METHOD LButtonUp( nRowPix, nColPix, nFlags ) CLASS TSBrowse ... If nClickRow == 0 .or. nClickRow == -2 if nColPix > ::nLeft .and. ::nDragCol != nDestCol If ::lMoveCols ::MoveColumn( ::nDragCol, nDestCol ) Else ::Exchange( ::nDragCol, nDestCol ) EndIf elseif ::nDragCol = nDestCol If ::aColumns[ nDestCol ]:bHLClicked != Nil ::DrawHeaders() Eval( ::aColumns[ nDestCol ]:bHLClicked, nRowPix, nColPix, ::nAt, Self ) ::DrawHeaders() EndIf Endif EndIf ... METHOD RButtonDown( nRowPix, nColPix, nFlags ) CLASS TSBrowse ... If ::aColumns[ nCol ]:bHRClicked != Nil Eval( ::aColumns[ nCol ]:bHRClicked, uPar1, uPar2, ::nAt, Self ) EndIf ElseIf lSpecHd If ::aColumns[ nCol ]:bSRClicked != Nil Eval( ::aColumns[ nCol ]:bSRClicked, uPar1, uPar2, ::nAt, Self ) EndIf ElseIf lFooter If ::aColumns[ nCol ]:bFRClicked != Nil Eval( ::aColumns[ nCol ]:bFRClicked, uPar1, uPar2, ::nAt, Self ) EndIf EndIf ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 881
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.02.16 22:37. Заголовок: SergKis пишет: еще ..
SergKis пишет: Принимается с благодарностью
| |
|
gfilatov2002
|
| moderator
|
Пост N: 882
Зарегистрирован: 11.02.10
|
|
Отправлено: 17.02.16 11:24. Заголовок: Сегодня выпущен очер..
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4715
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.02.16 20:30. Заголовок: Перешёл на новую вер..
Перешёл на новую версию 16.02 и сразу же вопрос. SergKis пишет: цитата: | на мой взгляд, ошибка, т.е. центрованный текст в шапке прыгает влево |
| gfilatov2002 пишет: цитата: | Благодарю за разъяснение! Действительно, при переключении сортировки игнорируется текущее выравнивание колонки (так - у автора библиотеки). Поправил для новой сборки |
| А как сделать по старому ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 883
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.02.16 21:18. Заголовок: Andrey пишет: А как..
| |
|
SergKis
|
| постоянный участник
|
Пост N: 857
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.02.16 21:29. Заголовок: Андрей пишет:А как с..
Андрей пишет: цитата: | А как сделать по старому ? Чтобы текст шапки при переключении - прыгал влево ! Мне это больше нравится, т.к. значок стрелки вниз/вверх затирается текстом шапки. |
| Пощелкай на колонке FullPath и слово прыгнет влево, т.к. колонка широкая - выглядит такое мелькание ужасно, не проще подправить для узкой колонки сразу текст влево, не в центр, можно добавить к тексту слева пару пробелов.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4716
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.02.16 00:32. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Попробуй библиотеку по ссылке |
| Спасибо ! Но это времянка... Нужен ключ какой то сделать. Одним нравиться без прыганья, другим наоборот.
| |
|
|
SergKis
|
| постоянный участник
|
Пост N: 858
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.02.16 02:26. Заголовок: Andrey пишет:Нужен к..
Andrey пишет: цитата: | Нужен ключ какой то сделать. Одним нравиться без прыганья, другим наоборот. |
| для прыганья можно ставить на колонку: oBrw5:aColumns[2]:nHAlign := {|nCol,oBrw| If( nCol == oBrw:nColOrder, DT_LEFT, oBrw:aColumns[nCol]:nHAlign ) } или oBrw5:aColumns[2]:nHAlign := {|nCol,oBrw| If( nCol == oBrw:nColOrder, DT_LEFT, DT_CENTER ) }
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4717
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.02.16 03:12. Заголовок: SergKis пишет: для ..
SergKis пишет: цитата: | для прыганья можно ставить на колонку: |
| То что надо ! Спасибо !
| |
|
SergKis
|
| постоянный участник
|
Пост N: 859
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.02.16 13:53. Заголовок: gfilatov2002 Для уп..
gfilatov2002 Для управления сортировкой колонок при ::lIsArr == .T. (включить\выключить) более простым способом (без bSetOrder) предлагаю использовать переменную колонки (TsColumn) lIndexCol, при работе с массивом она не используется, т.е. oCol:lIndexCol := .T.\.F. - сортируется\нет колонка. Изменения следующие: METHOD SetOrder( nColumn, cPrefix, lDescend ) CLASS TSBrowse ... ElseIf ::lIsArr If nColumn <= Len( ::aArray[ 1 ] ) .and. oColumn:lIndexCol ::cOrderType := ValType( ::aArray[ ::nAt, nColumn ] ) ... METHOD New( cHeading, bData, cPicture, aColors, aAlign, nWidth, ; lBitMap, lEdit, bValid, lNoLite, cOrder, cFooting, ; bPrevEdit, bPostEdit, nEditMove, lFixLite, a3DLook, ; bWhen, oBrw, cData, cWhen, cValid, cPrevEdit, cPostEdit, cMsg, cToolTip, lTotal, ; lSpinner, bUp, bDown, bMin, bMax, cError, cSpcHeading,; cDefData, cName , lIndexCol ) CLASS TSColumn ... Default cHeading := "" , ; ... cName := "" If ! empty(oBrw) .and. oBrw:lIsArr // для работы по старому алгоритму - все колонки сортируются lIndexCol := .T. EndIf .. выделенным добавки тогда в программе можно колонкам без сортировки (массив) поставить oCol:lInexCol := .F. попробовал на своей версии - сработало. Может что не учел ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 860
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.02.16 13:59. Заголовок: PS поравочка в после..
PS поправочка в последнем добавлении If ... ::lIndexCol := .T.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 884
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.02.16 15:56. Заголовок: SergKis пишет: пред..
SergKis пишет: цитата: | предлагаю использовать переменную колонки (TsColumn) lIndexCol |
| Принимается
| |
|
SergKis
|
| постоянный участник
|
Пост N: 863
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.02.16 19:51. Заголовок: gfilatov2002 пишет:П..
gfilatov2002 пишет: тогда можно добавить обработку lNoDescend (для одинаковости с ::lIsDbf == .T.) ElseIf ::lIsArr If nColumn <= Len( ::aArray[ 1 ] ) .and. oColumn:lIndexCol ::cOrderType := ValType( ::aArray[ ::nAt, nColumn ] ) //V90 If nColumn == ::nColOrder .or. Empty( oColumn:cOrder ) .or. oColumn:lDescend == Nil If lDescend == Nil lDescend := If( Empty( oColumn:cOrder ) .or. oColumn:lDescend == Nil, .F., ! oColumn:lDescend ) EndIf If oColumn:lNoDescend lDescend := .F. EndIf oColumn:lDescend := lDescend ::nColOrder := nColumn ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 885
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.02.16 21:10. Заголовок: SergKis пишет: можн..
SergKis пишет: цитата: | можно добавить обработку lNoDescend |
| OK
| |
|
SergKis
|
| постоянный участник
|
Пост N: 865
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.02.16 11:58. Заголовок: gfilatov2002 Правка..
gfilatov2002 Правка METHOD DrawLine( xRow ) CLASS TSBrowse ... было ( line 2913 ) If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" .and. ! Empty( ::aBitMaps ) If uData > 0 .and. uData <= Len(::aBitMaps) uBmpCell := ::aBitMaps[ uData ] EndIf nAlign := nMakeLong( oColumn:nAlign, oColumn:nAlign ) uData := "" ElseIf Empty( cPicture ) uData := If( Valtype( uData ) != "C", cValToChar( uData ), uData ) Else uData := If( uData == NIL, "", Transform( uData, cPicture ) ) EndIf ... ( line 2969 ) If lCheck Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )} hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ] nAlign := nMakeLong( DT_CENTER, DT_CENTER ) uData := "" ElseIf oColumn:lEmptyValToChar .and. empty(uData) uData := "" EndIf ... стало If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" .and. ! Empty( ::aBitMaps ) If uData > 0 .and. uData <= Len(::aBitMaps) uBmpCell := ::aBitMaps[ uData ] EndIf nAlign := nMakeLong( oColumn:nAlign, oColumn:nAlign ) uData := "" ElseIf ! lCheck .and. oColumn:lEmptyValToChar .and. empty(uData) uData := "" ElseIf Empty( cPicture ) uData := If( Valtype( uData ) != "C", cValToChar( uData ), uData ) Else uData := If( uData == NIL, "", Transform( uData, cPicture ) ) EndIf ... If lCheck Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )} hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ] nAlign := nMakeLong( DT_CENTER, DT_CENTER ) uData := "" EndIf ... METHOD DrawSelect( xRow ) CLASS TSBrowse ... было ( line 3227 ) If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" .and. ! Empty( ::aBitMaps ) If uData > 0 .and. uData <= Len(::aBitMaps) uBmpCell := ::aBitMaps[ uData ] nAlign := nMakeLong( LoWord( nAlign ), nAlign ) uData := "" EndIf ElseIf Empty( cPicture ) uData := If( Valtype( uData ) != "C", cValToChar( uData ), uData ) Else uData := If( uData == NIL, "", Transform( uData, cPicture ) ) EndIf ... стало If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" .and. ! Empty( ::aBitMaps ) If uData > 0 .and. uData <= Len(::aBitMaps) uBmpCell := ::aBitMaps[ uData ] nAlign := nMakeLong( LoWord( nAlign ), nAlign ) uData := "" EndIf ElseIf ! lCheck .and. oColumn:lEmptyValToChar .and. empty(uData) uData := "" ElseIf Empty( cPicture ) uData := If( Valtype( uData ) != "C", cValToChar( uData ), uData ) Else uData := If( uData == NIL, "", Transform( uData, cPicture ) ) EndIf
| |
|
gfilatov2002
|
| moderator
|
Пост N: 888
Зарегистрирован: 11.02.10
|
|
Отправлено: 26.02.16 13:29. Заголовок: SergKis Благодарю з..
SergKis Благодарю за поправки, уже сделал эти исправления Но хотелось бы получить также небольшое пояснение по этому поводу
| |
|
SergKis
|
| постоянный участник
|
Пост N: 866
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.02.16 14:55. Заголовок: gfilatov2002 пишет:п..
gfilatov2002 пишет: цитата: | пояснение по этому поводу |
| начал делать реальную задачу, получилось nValToChar отрабатывала раньше по тексту и для числа пустого уже uData =='0.00', т.е алгоритм не работал, потому перенес выше по тексту (исключив lCheck==.T.), а в DrawSelect обработка пропущена и в строке с курсором lEmptyValToChar совсем не работал
| |
|
gfilatov2002
|
| moderator
|
Пост N: 889
Зарегистрирован: 11.02.10
|
|
Отправлено: 26.02.16 15:09. Заголовок: SergKis пишет: нача..
SergKis пишет: цитата: | начал делать реальную задачу |
| Благодарю за разъяснение, желаю успеха в Ваших делах
| |
|
fokinal21
|
| |
Пост N: 12
Зарегистрирован: 22.09.13
|
|
Отправлено: 29.02.16 16:39. Заголовок: Всем доброго здравия..
Всем доброго здравия! Скажите, а IDE никак не прикручивается к 64 разрядной версии? Или здесь он не катит, нужен другой?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 892
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.03.16 13:10. Заголовок: Просто к сведению. В..
Просто к сведению. Выпустил сегодня очередную бета-версию для новой сборки библиотеки. Полный список изменений см. ниже Скрытый текст
* Fixed: The hack in the menu's C-code was guarded for applying at the tray menu closing only. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Modified: The constant _PUBLIC_RELEASE_ is turned ON by default in the header file include\minigui.ch instead of the constant _ZEROPUBLIC_. The internal Public variables will be released at window's and control's destruction. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Replacing the cycles 'For-Next' with 'For Each-Next' for improvement of the speed of the Tab pages updating. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - added a new class TCursor for proper processing of TBROWSE cursor which was defined by user for a whole control. Syntax: TCursor():New( cResCursorName [, cPredefinedCursorName ] ) where the predefined names are "ARROW", "IBEAM", "WAIT", "CROSS" etc. Sample code: oBrw:oCursor := TCursor():New( , "HAND" ) Contributed by Grigory Filatov <gfilatov@inbox.ru> - added handling of the column's order in the ARRAY mode with using of the TSColumn variable oCol:lIndexCol. Contributed by SergKis (see demo at Menu TSBrowse->'Grid form' in folder \samples\Advanced\TSBrowse) - added a new service method GetCellInfo( nRowPos, nCell, lColSpecHd ) Contributed by SergKis (see demo2.prg in folder \samples\Advanced\Tsb_array_2) * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.12.0dev (from 3.11.0). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2016-02-18 17:02): * Fixed: HbZipArc library source code to support the ASCII characters above 128 in the name of files (see in folder \Source\HbZipArc). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: HMGS-IDE v.1.3.0 Project Manager and Two-Way Visual Form Designer. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look for what's new at changelog.txt in folder \Ide) * New: 'Minigui Modal Form Designer Utility' sample (spanish only). Contributed by Rafael Moran <webrmoran[at]yahool.com> Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\xForm) * New: 'Gregorian Calendar to Microsoft Excel through HMG OLE' sample. Contributed by Danny A. del Pilar <dhaine_adp@yahoo.com>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\GregorianCalendar) * Updated: 'Vista Command Link Button' sample: - added a write only property 'NoteText'. You can set this property at runtime: Win.CLbutton.NoteText := 'New Note' SetProperty( Form, Control, 'NoteText', 'New Note' ) Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\CommandLink) * Updated: 'SendMailReport Enhanced 1.5' sample. Contributed by Pierpaolo Martinello <pier.martinello[at]alice.it> (see in folder \samples\Applications\SendMailReport)
| Поздравляю всех женщин (-программистов) на форуме с наступающим
| |
|
SergKis
|
| постоянный участник
|
Пост N: 885
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.03.16 15:34. Заголовок: gfilatov2002 доделе..
gfilatov2002 доделел ToolTip на TsBrowse. 1. Работает на всех колонках, строках с индикацией смены nRow, nCol мышой 2. убрал STATIC nToolTip, lToolTip, hToolTip, перенеся их в класс TSB 3. можно задавать ToolTiip так: oBrw:cToolTip := {|oBr,nCol,nRow| "My TBrowse tooltip. Col ="+str(nCol,3)+" Row ="+str(oBr:nRow,3) } aEval(oBrw:aColumns, {|oCol| oCol:cToolTip := {|oBr,nCol,nRow| "My column tooltip. Col ="+str(nCol,3)+" Row ="+str(oBr:nRow,3) } }) Изменения: Скрытый текст
h_tsbrowse.prg было Static nLapsus, hPrvWnd, hWndParent, lToolTip, nToolTip, hToolTip := 0 //V90 ... ///////////////////////////////////////// Function _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight,; ... ParentFormHandle = GetFormHandle (ParentFormName) hToolTip := GetFormToolTipHandle (ParentFormName) oBrw := TSBrowse():New( ControlName, nRow, nCol, nWidth, nHeight,; ... lTransparent, uSelector, lEditable, lAutoCol, aColSel, tooltip) IF ( nColums := Len(oBrw:aColumns) ) > 0 /* BK 18.05.2015 */ ... ///////////////////////////////////////// CLASS TSBrowse FROM TControl ... DATA cToolTip // tooltip when mouse is over Cells ... ///////////////////////////////////////// METHOD New( cControlName, nRow, nCol, nWidth, nHeight, bLine, aHeaders, aColSizes, cParentWnd, ; ... EndIf SetToolTip ( ::hWnd , ::cToolTip , hToolTip ) //JP V90 IF nValue > 0 .AND. nValue <= ::nLen ... ///////////////////////////////////////// METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse Local nI, nIcon, lHeader, lMChange, nFirst, nLast, nDestCol, ; cMsg := ::cMsg, ; nColPixPos := 0, ; lFrozen := .F., ; nColumn := Max( 1, ::nAtCol( nColPix ) ) //V90 Default ::lMouseDown := .F., ; ::lNoMoveCols := .F., ; //V90 ::lDontChange := .F., ; //V90 nToolTip := 0, ; //V90 lToolTip := .F. //V90 If ::lIconView If ( nIcon := ::nAtIcon( nRowPix, nColPix ) ) != 0 If ::nIconPos != 0 .and. ::nIconPos != nIcon ::DrawIcon( ::nIconPos ) EndIf ::nIconPos := nIcon ::DrawIcon( nIcon, .T. ) CursorHand() Return 0 EndIf EndIf If ::nFreeze > 0 For nI := 1 To ::nFreeze nColPixPos += ::GetColSizes()[ nI ] Next If nColPix < nColPixPos lFrozen := .T. EndIf EndIf If ( lHeader := ::GetTxtRow( nRowPix ) == 0 ) .and. ! Empty( ::aColumns ) .and. ; ! Empty( ::aColumns[ nColumn ]:cToolTip ) If nToolTip != nColumn SetToolTip ( ::hWnd , ::aColumns[ nColumn ]:cToolTip , hToolTip ) SysRefresh() EndIf nToolTip := nColumn Else If nToolTip != 0 SetToolTip ( ::hWnd , ::cToolTip , hToolTip ) SysRefresh() endif nToolTip := 0 EndIf lHeader := (::GetTxtRow( nRowPix ) == 0 .or. ::GetTxtRow( nRowPix ) == -2) ... ///////////////////////////////////////// METHOD VertLine( nColPixPos, nColInit, nGapp ) CLASS TSBrowse ... If nColInit != Nil nsCol := nColInit nsWidth := nColPixPos nGap := If( ! Empty( nGapp ), nGapp, 0 ) nsOldPixPos := 0 hWndParent := 0 //V90 hPrvWnd := 0 //V90 lToolTip := .F. //V90 _InvertRect( ::hDC, { 0, nsWidth - ::aColSizes[ nsCol ] - 2, aRect[4], nsWidth - ::aColSizes[ nsCol ] + 2 } ) EndIf ... стало Static nLapsus, hPrvWnd, hWndParent ... ///////////////////////////////////////// Function _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight,; ... ParentFormHandle = GetFormHandle (ParentFormName) oBrw := TSBrowse():New( ControlName, nRow, nCol, nWidth, nHeight,; ... lTransparent, uSelector, lEditable, lAutoCol, aColSel, tooltip) oBrw:hToolTip := GetFormToolTipHandle (ParentFormName) IF ( nColums := Len(oBrw:aColumns) ) > 0 /* BK 18.05.2015 */ ... ///////////////////////////////////////// CLASS TSBrowse FROM TControl ... DATA cToolTip // tooltip when mouse is over Cells DATA hToolTip AS NUMERIC INIT 0 DATA nToolTip AS NUMERIC INIT 0 DATA nToolTipRow AS NUMERIC INIT 0 ... ///////////////////////////////////////// METHOD New( cControlName, nRow, nCol, nWidth, nHeight, bLine, aHeaders, aColSizes, cParentWnd, ; ... EndIf ctooltip := ::cToolTip If Valtype(ctooltip) == "B" ctooltip := Eval(ctooltip, Self) EndIf SetToolTip ( ::hWnd , ctooltip , ::hToolTip ) IF nValue > 0 .AND. nValue <= ::nLen ... ///////////////////////////////////////// METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse Local nI, nIcon, lHeader, lMChange, nFirst, nLast, nDestCol, ; cMsg := ::cMsg, ; nColPixPos := 0, ; lFrozen := .F., ; nColumn := Max( 1, ::nAtCol( nColPix ) ) //V90 Local nRowLine := ::GetTxtRow( nRowPix ) Local ctooltip Default ::lMouseDown := .F., ; ::lNoMoveCols := .F., ; //V90 ::lDontChange := .F. //V90 If ::lIconView If ( nIcon := ::nAtIcon( nRowPix, nColPix ) ) != 0 If ::nIconPos != 0 .and. ::nIconPos != nIcon ::DrawIcon( ::nIconPos ) EndIf ::nIconPos := nIcon ::DrawIcon( nIcon, .T. ) CursorHand() Return 0 EndIf EndIf If ::nFreeze > 0 For nI := 1 To ::nFreeze nColPixPos += ::GetColSizes()[ nI ] Next If nColPix < nColPixPos lFrozen := .T. EndIf EndIf If ( lHeader := nRowLine == 0 ) .and. ! Empty( ::aColumns ) .and. ; ! Empty( ::aColumns[ nColumn ]:cToolTip ) If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow ctooltip := ::aColumns[ nColumn ]:cToolTip If Valtype(ctooltip) == "B" ctooltip := Eval(ctooltip, Self, nColumn, nRowLine) EndIf SetToolTip ( ::hWnd , ctooltip , ::hToolTip ) SysRefresh() ::nToolTipRow := nRowLine EndIf ::nToolTip := nColumn Else If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow ctooltip := ::cToolTip If Valtype(ctooltip) == "B" ctooltip := Eval(ctooltip, Self, nColumn, nRowLine) EndIf SetToolTip ( ::hWnd , ctooltip , ::hToolTip ) SysRefresh() ::nToolTipRow := nRowLine endif ::nToolTip := nColumn EndIf lHeader := (::GetTxtRow( nRowPix ) == 0 .or. ::GetTxtRow( nRowPix ) == -2) ... ///////////////////////////////////////// METHOD VertLine( nColPixPos, nColInit, nGapp ) CLASS TSBrowse ... If nColInit != Nil nsCol := nColInit nsWidth := nColPixPos nGap := If( ! Empty( nGapp ), nGapp, 0 ) nsOldPixPos := 0 hWndParent := 0 //V90 hPrvWnd := 0 //V90 _InvertRect( ::hDC, { 0, nsWidth - ::aColSizes[ nsCol ] - 2, aRect[4], nsWidth - ::aColSizes[ nsCol ] + 2 } ) EndIf ...
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4762
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.03.16 18:27. Заголовок: SergKis пишет: доде..
SergKis пишет: цитата: | доделел ToolTip на TsBrowse. |
| Классно ! Григорий, добавляй в новую версию !
| |
|
gfilatov2002
|
| moderator
|
Пост N: 893
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.03.16 18:30. Заголовок: Andrey пишет: добав..
Andrey пишет: Уже добавил, обработка кодовых блоков в подсказках работает! Благодарю за помощь
| |
|
SergKis
|
| постоянный участник
|
Пост N: 886
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.03.16 18:50. Заголовок: gfilatov2002 Еще к ..
gfilatov2002 Еще к ToolTip c_controlmisc.c HB_FUNC( SETTOOLTIP ) ... было ti.lpszText = Text; SendMessage( hWnd_ToolTip, ( UINT ) TTM_ADDTOOL, ( WPARAM ) 0, ( LPARAM ) &ti ); hb_retni( 0 ); стало ti.lpszText = Text; SendMessage( hWnd_ToolTip, ( UINT ) TTM_ADDTOOL, ( WPARAM ) 0, ( LPARAM ) &ti ); // Много строчно // (LPARAM)0xFFFFFF); Максимальная ширина очень большая SendMessage( hWnd_ToolTip, ( UINT ) TTM_SETMAXTIPWIDTH, ( WPARAM ) 0, ( LPARAM ) 0x00FFFFFF ); hb_retni( 0 );
| |
|
gfilatov2002
|
| moderator
|
Пост N: 894
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.03.16 21:03. Заголовок: SergKis пишет: Еще ..
SergKis пишет: Посмотрите команду цитата: | SET TOOLTIP MAXWIDTH TO <w> OF <form> |
|
| |
|
SergKis
|
| постоянный участник
|
Пост N: 887
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.03.16 21:36. Заголовок: gfilatov2002 пишет:П..
gfilatov2002 пишет: команды в ch файле упустил из вида
| |
|
SergKis
|
| постоянный участник
|
Пост N: 888
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.03.16 11:38. Заголовок: gfilatov2002 Предло..
gfilatov2002 Предложение такое, снимает\упрощает некоторые решения, в том числе и обработка колонки с .T.\.F.\NIL Скрытый текст
было METHOD DrawLine( xRow ) CLASS TSBrowse ... nVertText := 0 lCheck := oColumn:lCheckBox .and. ValType( uData ) == "L" //V90 If lCheck .and. ValType( uData ) == "L" cPicture:= "" nVertText := If( uData, 3, 4 ) EndIf ... If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" .and. ! Empty( ::aBitMaps ) If uData > 0 .and. uData <= Len(::aBitMaps) uBmpCell := ::aBitMaps[ uData ] EndIf nAlign := nMakeLong( oColumn:nAlign, oColumn:nAlign ) uData := "" ... If lCheck Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )} hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ] nAlign := nMakeLong( DT_CENTER, DT_CENTER ) uData := "" ... METHOD DrawSelect( xRow ) CLASS TSBrowse ... lCheck := oColumn:lCheckBox .and. ValType( uData ) == "L" //V90 lNoLite := oColumn:lNoLite nVertText := 0 If lCheck .and. ValType( uData ) == "L" cPicture := "" nVertText := If( uData, 3, 4 ) EndIf ... If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" .and. ! Empty( ::aBitMaps ) If uData > 0 .and. uData <= Len(::aBitMaps) uBmpCell := ::aBitMaps[ uData ] nAlign := nMakeLong( LoWord( nAlign ), nAlign ) uData := "" EndIf ... If lCheck //V90 Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 ) } hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ] nAlign := nMakeLong( DT_CENTER, DT_CENTER ) uData := "" ... METHOD Destroy() CLASS TSBrowse ... стало METHOD DrawLine( xRow ) CLASS TSBrowse ... Local aBitMaps, lCheckVal := .F. ... nVertText := 0 lCheck := oColumn:lCheckBox .and. ValType(uData) == "L" //V90 If lCheck cPicture := "" nVertText := If( uData, 3, 4 ) lCheckVal := uData EndIf ... If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" aBitMaps := If( empty(oColumn:aBitMaps), ::aBitMaps, oColumn:aBitMaps ) If ! Empty( aBitMaps ) .and. uData > 0 .and. uData <= Len(aBitMaps) uBmpCell := aBitMaps[ uData ] endif nAlign := nMakeLong( oColumn:nAlign, oColumn:nAlign ) uData := "" ... If lCheck Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )} If Valtype(oColumn:aCheck) == "A" hBitMap := oColumn:aCheck[ If( lCheckVal, 1, 2 ) ] Else hBitMap := ::aCheck[ If( lCheckVal, 1, 2 ) ] EndIf nAlign := nMakeLong( DT_CENTER, DT_CENTER ) uData := "" ... METHOD DrawSelect( xRow ) CLASS TSBrowse ... Local aBitMaps, lCheckVal := .F. ... lCheck := oColumn:lCheckBox .and. ValType( uData ) == "L" //V90 lNoLite := oColumn:lNoLite nVertText := 0 If lCheck cPicture := "" nVertText := If( uData, 3, 4 ) lCheckVal := uData EndIf ... If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" aBitMaps := If( empty(oColumn:aBitMaps), ::aBitMaps, oColumn:aBitMaps ) If ! Empty( aBitMaps ) .and. uData > 0 .and. uData <= Len(aBitMaps) uBmpCell := aBitMaps[ uData ] endif nAlign := nMakeLong( LoWord( nAlign ), nAlign ) uData := "" ... If lCheck Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )} If Valtype(oColumn:aCheck) == "A" hBitMap := oColumn:aCheck[ If( lCheckVal, 1, 2 ) ] Else hBitMap := ::aCheck[ If( lCheckVal, 1, 2 ) ] EndIf nAlign := nMakeLong( DT_CENTER, DT_CENTER ) uData := "" ... METHOD Destroy() CLASS TSBrowse LOCAL i ... If Len(::aColumns) > 0 For i := 1 To Len(::aColumns) If Valtype(::aColumns[ i ]:aCheck) == "A" AEval(::aColumns[ i ]:aCheck, {|hBmp| If( empty(hBmp), , DeleteObject(hBmp) ) }) EndIf If Valtype(::aColumns[ i ]:aBitMaps) == "A" AEval(::aColumns[ i ]:aBitMaps, {|hBmp| If( empty(hBmp), , DeleteObject(hBmp) ) }) EndIf Next EndIf ...
|
| |
|
SergKis
|
| постоянный участник
|
Пост N: 889
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.03.16 11:41. Заголовок: PS добавка в TSCOLUM..
PS добавка в TSCOLUMN DATA aBitMaps DATA aCheck
| |
|
gfilatov2002
|
| moderator
|
Пост N: 895
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.03.16 12:59. Заголовок: SergKis пишет: обра..
SergKis пишет: цитата: | обработка колонки с .T.\.F.\NIL |
| Выполнил эти изменения, теперь нужен небольшой пример для проверки правильности их работы
| |
|
SergKis
|
| постоянный участник
|
Пост N: 890
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.03.16 21:11. Заголовок: gfilatov2002 Сделал..
| |
|
gfilatov2002
|
| moderator
|
Пост N: 896
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.03.16 22:04. Заголовок: SergKis Благодарю з..
SergKis Благодарю за помощь! Пример работает нормально
| |
|
SergKis
|
| постоянный участник
|
Пост N: 891
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.03.16 12:44. Заголовок: gfilatov2002 малень..
gfilatov2002 маленькая правка выделенным METHOD HiliteCell( nCol, nColPix ) CLASS TSBrowse ... nOldPos := ::nCell If ::nFreeze > 0 .and. nOldPos < nNowPos .and. ::lLockFreeze // frozen col and going right nNowPos := nAbsCell lMove := ( nOldPos > ::nFreeze ) EndIf If nOldPos < nNowPos // going right ... сейчас при ::nFreeze := 7, ::nCell := 1, левый клик мыши на колонку < ::nFreze переключает фокус на колонку ::nFreeze, повторный клик ставит фокус на нужную колонку и так повторяется все время, добавка исправляет ситуацию
| |
|
gfilatov2002
|
| moderator
|
Пост N: 897
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.03.16 13:34. Заголовок: SergKis пишет: мале..
SergKis пишет: Благодарю за поправку - сделана
| |
|
SergKis
|
| постоянный участник
|
Пост N: 892
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.03.16 09:10. Заголовок: gfilatov2002 еще ме..
gfilatov2002 еще мелочь было METHOD DrawPressed( nCell, lPressed ) CLASS TSBrowse ... Local hDC := GetDC( ::hWnd ), ; ... If Empty( nCell ) .or. nCell > Len( ::aColumns ) .or. ! ::lDrawHeaders Return Self ElseIf ! lPressed .and. ! ::aColumns[ nCell ]:l3DLookHead ::DrawHeaders() Return Self EndIf nLeft := 0 ... ReleaseDC( ::hWnd, hDC ) ... стало Local hDC, ; ... If Empty( nCell ) .or. nCell > Len( ::aColumns ) .or. ! ::lDrawHeaders Return Self ElseIf ! lPressed .and. ! ::aColumns[ nCell ]:l3DLookHead ::DrawHeaders() Return Self EndIf hDC := GetDC( ::hWnd ) nLeft := 0 ... ReleaseDC( ::hWnd, hDC ) ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 898
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.03.16 11:17. Заголовок: SergKis пишет: еще ..
SergKis пишет: OK Это исправляет возможную утечку памяти, и так - в коде у оригинального автора библиотеки
| |
|
SergKis
|
| постоянный участник
|
Пост N: 893
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.03.16 12:43. Заголовок: gfilatov2002 еще дл..
gfilatov2002 еще для чистоты объекта Static nLapsus, hPrvWnd, hWndParent можно убрать после изменений CLASS TSBrowse FROM TControl ... DATA nLapsus INIT 0 ... METHOD Default() CLASS TSBrowse ... ::nOldCell := ::nCell ::nLapsus := Seconds() If ::nLen == 0 //V90 ::nLen := If( ::bLogicLen == Nil, Eval( ::bLogicLen := {||( cAlias )->( LastRec() ) } ), Eval( ::bLogicLen ) ) EndIf //end Return Self ... METHOD Seek( nKey ) CLASS TSBrowse ... If ( Seconds() - ::nLapsus ) > 3 .or. ( Seconds() - ::nLapsus ) < 0 ::cSeek := cSeek := "" EndIf ::nLapsus := Seconds() cPrefix := If( ::cPrefix == Nil, "", If( ValType( ::cPrefix ) == "B", Eval( ::cPrefix, Self ), ::cPrefix ) ) ... METHOD VertLine( nColPixPos, nColInit, nGapp ) CLASS TSBrowse ... If nColInit != Nil nsCol := nColInit nsWidth := nColPixPos nGap := If( ! Empty( nGapp ), nGapp, 0 ) nsOldPixPos := 0 // hWndParent := 0 //V90 // hPrvWnd := 0 //V90 _InvertRect( ::hDC, { 0, nsWidth - ::aColSizes[ nsCol ] - 2, aRect[4], nsWidth - ::aColSizes[ nsCol ] + 2 } ) EndIf ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 899
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.03.16 13:35. Заголовок: SergKis пишет: для ..
SergKis пишет: Благодарю за помощь! Неиспользуемые переменные hPrvWnd и hWndParent убрал, а nLapsus оставил как статическую переменную (так - у автора )
| |
|
SergKis
|
| постоянный участник
|
Пост N: 894
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.03.16 13:42. Заголовок: gfilatov2002 пишет:n..
gfilatov2002 пишет: цитата: | nLapsus оставил как статическую переменную (так - у автора ) |
| но тогда нельзя наследовать класс - суть класса теряется
| |
|
SergKis
|
| постоянный участник
|
Пост N: 895
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.03.16 13:58. Заголовок: PS имея на окне 4-е ..
PS имея на окне 4-е TSB METHOD Seek( nKey ) в каждом будет портить значение для другого, можно сказать, что значение не важное и каждые 3 сек. обновляется, но по сути ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 900
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.03.16 11:01. Заголовок: SergKis пишет: METH..
SergKis пишет: цитата: | METHOD Seek( nKey ) в каждом будет портить значение для другого |
| Благодарю за разъяснение Убрал эту статическую переменную и определил ее как переменную класса цитата: | VAR nLapsus AS NUMERIC INIT 0 PROTECTED |
|
| |
|
SergKis
|
| постоянный участник
|
Пост N: 896
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.03.16 21:16. Заголовок: gfilatov2002 Обнару..
gfilatov2002 Обнаружил, что в MDI не работает WM_MOUSEWHEEL, у себя поборол так : METHOD DrawHeaders( lFooters ) CLASS TSBrowse ... SetFocus(hWnd) Return Self METHOD DrawIcons() CLASS TSBrowse ... SetFocus(::hWnd) Return Nil METHOD DrawLine( xRow ) CLASS TSBrowse ... SetFocus(hWnd) Return Self METHOD DrawPressed( nCell, lPressed ) CLASS TSBrowse ... SetFocus(::hWnd) Return Self METHOD DrawSelect( xRow ) CLASS TSBrowse ... SetFocus(hWnd) Return Self METHOD DrawSuper() CLASS TSBrowse ... SetFocus(hWnd) Return Nil проверить TsB_Mdi.prg из Advanced\TsBrowse, установив, например Brw_1:nWheelLines := 10
| |
|
SergKis
|
| постоянный участник
|
Пост N: 897
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.03.16 13:46. Заголовок: gfilatov2002 правка..
gfilatov2002 правка, снимающая некоторые вопросы высоты строк было METHOD New( cControlName, nRow, nCol, nWidth, nHeight, bLine, aHeaders, aColSizes, cParentWnd,; ... If Valtype( ::oWnd:hWnd ) != 'U' ::Create(::cControlName) // т.к. ::hFont всегда NIL, то расчет высот происходит от 0, потом надо переустанавливать высоты. // ::hFont уст. в _DefineTsBrowse() после создания объекта If ::hFont != Nil ::SetFont( ::hFont ) EndIf ::nHeightFoot := 0 //JP ::nHeightCell := ::nHeightHead := SBGetHeight( ::hWnd, If( ::hFont != Nil, ::hFont, 0 ), 0 ) //JP ::nHeightSpecHd := IF(::lEditableHd,SBGetHeight( ::hWnd, If( ::hFont != Nil, ::hFont, 0 )),0) ... стало METHOD New( cControlName, nRow, nCol, nWidth, nHeight, bLine, aHeaders, aColSizes, cParentWnd, ; ... Local hFont ... If Valtype( ::oWnd:hWnd ) != 'U' ::Create(::cControlName) If ::hFont != Nil ::SetFont( ::hFont ) ::nHeightCell := ::nHeightHead := SBGetHeight( ::hWnd, If( ::hFont != Nil, ::hFont, 0 ) , 0 ) //JP Else hFont := InitFont(::cFont, ::nFontSize) ::nHeightCell := ::nHeightHead := GetTextHeight( 0, "B", hFont) + 5 DeleteObject ( hFont ) EndIf ::nHeightFoot := 0 //JP ::nHeightSpecHd := IF(::lEditableHd, ::nHeightCell, 0 ) ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 901
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.03.16 15:28. Заголовок: SergKis пишет: прав..
SergKis пишет: цитата: | правка, снимающая некоторые вопросы высоты строк |
| Благодарю за помощь! Это очень нужная поправка для учета высоты (и типа) шрифта, заданного при определении TBROWSE Для совместимости со старым кодом, чтобы не увеличивать высоту ячейки по умолчанию, сделал так: If ::hFont != Nil ::SetFont( ::hFont ) ::nHeightCell := ::nHeightHead := SBGetHeight( ::hWnd, ::hFont, 0 ) Else hFont := InitFont( ::cFont, ::nFontSize ) // SergKis addition ::nHeightCell := ::nHeightHead := GetTextHeight( 0, "B", hFont ) DeleteObject( hFont ) EndIf ::nHeightFoot := 0 ::nHeightSpecHd := If( ::lEditableHd, ::nHeightHead, 0 ) SergKis пишет: цитата: | в MDI не работает WM_MOUSEWHEEL |
| Подтверждаю эту проблему, но предложенное решение создает другие проблемы с перерисовкой строк TBROWSE Поэтому лучше обойтись без прокрутки строк в MDI, чем создавать новые проблемы (вплоть до GPF) Либо надо искать другое решение для MDI
| |
|
SergKis
|
| постоянный участник
|
Пост N: 898
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.03.16 19:02. Заголовок: gfilatov2002 пишет:н..
gfilatov2002 пишет: цитата: | но предложенное решение создает другие проблемы с перерисовкой строк TBROWSE |
| Согласен, поэксперементировал и оставил только в DrawSelect (тоже не хорошо, но пока не находится место перекл.фокус с TSB на окно) If GetFocus() != hWnd SetFocus(hWnd) EndIf как следствие убрал из h_windowsMdi.prg, выделено цветом - вся обработка в Events(...). Мне надо несколько TSB на окне FUNCTION MdiEvents ( hWnd, nMsg, wParam, lParam ) *-----------------------------------------------------------------------------* LOCAL i, x, ControlCount #ifdef _TSBROWSE_ LOCAL oGet #endif DO CASE #ifdef _TSBROWSE_ //********************************************************************** CASE nMsg == WM_KEYDOWN .OR. nMsg == WM_KEYUP //********************************************************************** // IF Type( '_TSB_aControlhWnd' ) == 'A' .AND. Len( _TSB_aControlhWnd ) > 0 // oGet := GetObjectByClientMDI( hWnd ) // IF ValType( oGet ) == 'O' // oGet:HandleEvent ( nMsg, wParam, lParam ) // ENDIF // ENDIF #endif //********************************************************************** CASE nMsg == WM_MDIACTIVATE т.к. oGet := GetObjectByClientMDI( hWnd ) работает только для одного TSB на окне (hWnd - handle child mdi окна)
| |
|
SergKis
|
| постоянный участник
|
Пост N: 899
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.03.16 09:06. Заголовок: SergKis пишет:Мне на..
SergKis пишет: цитата: | Мне надо несколько TSB на окне |
| Без решения главной проблемы - фокуса, несколько TSB на окне реализовать не получается. Убрал из DrawSelect вставку WM_MOUSEWHEL сделал так h_windowsMdi.prg Function MdiEvents(...) ... #ifdef _TSBROWSE_ *********************************************************************** case nMsg == WM_KEYDOWN .OR. nMsg == WM_KEYUP IF Type('_TSB_aControlhWnd') == 'A' .and. Len(_TSB_aControlhWnd) > 0 oGet := GetObjectByClientMDI(hWnd) IF ValType(oGet) == 'O' oGet:HandleEvent ( nMsg, wParam, lParam ) ENDIF ENDIF case nMsg == WM_MOUSEWHEEL IF Type('_TSB_aControlhWnd') == 'A' .and. Len(_TSB_aControlhWnd) > 0 oGet := GetObjectByClientMDI(hWnd) IF ValType(oGet) == 'O' x := oGet:HandleEvent ( nMsg, wParam, lParam ) if ValType(x) == 'N' IF x != 0 RETURN x ENDIF endif ENDIF ENDIF #endif *********************************************************************** case nMsg == WM_MDIACTIVATE ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 902
Зарегистрирован: 11.02.10
|
|
Отправлено: 16.03.16 11:46. Заголовок: SergKis пишет: WM_M..
SergKis пишет: Благодарю за помощь - прокрутка строк TBROWSE в MDI дочерних окнах работает Планирую выпустить финальную сборку 16.03 на следующей неделе
| |
|
Haz
|
| |
Пост N: 830
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.03.16 14:19. Заголовок: Григорий Есть еще п..
Григорий Есть еще предложение ... Как неоднократно тут вопрошал Андрей, при переключении между программами в Windows, если в программе на MiniGui последним активным было модальное окно , вызванное из дочернего, то такое модальное окно не получает фокус и программа уходит в вечное ожидание когда его закроют. Схематически вызовы такие MAIN->CHILD->MODAL , переключаем задачи и попадаем в CHILD ( MODAL не видно и на него не переключиться ). Предлагаю очень простое решение: в модуле h_events.prg в обработку событий в функцию Events() , в событие WM_SETFOCUS добавить условие Было: _DoWindowEventProcedure ( _HMG_aFormGotFocusProcedure , i , 'WINDOW_GOTFOCUS' ) iif ( _HMG_aFormFocusedControl != 0 , setfocus ( _HMG_aFormFocusedControl ) , Nil ) Стало: IF _HMG_IsModalActive BringWindowToTop(_HMG_ActiveModalHandle) ELSE iif ( _HMG_aFormFocusedControl != 0 , setfocus ( _HMG_aFormFocusedControl ) , Nil ) END Таким образом , при любой попытке дать фокус любому окну, если есть модальное , то фокус и топ на экране получит оно PS. После получения фокуса , к модальному можно еще и Flash добавить .... будет моргать совсем как по настоящему )
| |
|
gfilatov2002
|
| moderator
|
Пост N: 904
Зарегистрирован: 11.02.10
|
|
Отправлено: 17.03.16 15:35. Заголовок: Haz пишет: при любо..
Haz пишет: цитата: | при любой попытке дать фокус любому окну, если есть модальное , то фокус и топ на экране получит оно |
| Неплохое предложение, хотя особого эффекта функция BringWindowToTop() у меня не дает (но и ничего не портит, похоже). Лучше работает другая функция WinAPI цитата: | DECLARE DLL_TYPE_BOOL SwitchToThisWindow( DLL_TYPE_LONG hWnd, DLL_TYPE_BOOL lRestore ) ; IN USER32.DLL |
|
но она является недокументированной и не рекомендуется к использованию, т.к. может быть исключена в любой новой Винде Благодарю за помощь, Ваше предложение принимается
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4795
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.03.16 17:58. Заголовок: Haz пишет: к модаль..
Haz пишет: цитата: | к модальному можно еще и Flash добавить .... будет моргать совсем как по настоящему ) |
| Григорий - добавь пожалуйста ! Очень нужно...
| |
|
Haz
|
| |
Пост N: 831
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.03.16 18:36. Заголовок: Andrey пишет: Григо..
Andrey пишет: цитата: | Григорий - добавь пожалуйста ! Очень нужно... |
| тогда так if _HMG_IsModalActive BringWindowToTop(_HMG_ActiveModalHandle) if _HMG_aFormFocusedControl <> _HMG_ActiveModalHandle .and. _HMG_aFormType [ i ] <> "M" FlashWindowEx( _HMG_ActiveModalHandle , 1, 5, 100 ) end else iif ( _HMG_aFormFocusedControl != 0 , setfocus ( _HMG_aFormFocusedControl ) , Nil ) end
| |
|
SergKis
|
| постоянный участник
|
Пост N: 900
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.03.16 19:54. Заголовок: gfilatov2002 В свое..
gfilatov2002 В своей версии подправил: METHOD GoToRec( nRec ) CLASS TSBrowse ... ( ::cAlias )->( DbGoto( nRec ) ) // If nRecNo != ( ::cAlias )->( RecNo() ) .and. ::nLen > nLines было If ::nLen > nLines nRecNo := ( ::cAlias )->( RecNo() ) ( ::cAlias )->( DbSkip( nLines - ::nRowPos ) ) If ( ::cAlias )->( EoF() ) ... Else ( ::cAlias )->( DbGoTo( nRecNo ) ) ::nLastPos := nRecNo ::nAt := ::nLogicPos() EndIf ... без этих изменений, не удерживался ::nRowPos (перепрыгивал на 1) и бывало не так, как надо перепоказ происходил Пример (на базе Tsb_addrecord): Скрытый текст
/* * MINIGUI - Harbour Win32 GUI library Demo * */ #include "minigui.ch" #include "tsbrowse.ch" FIELD id, info *----------------------------------- PROCEDURE Main *----------------------------------- LOCAL i, obrw IF !hb_FileExists( "datab.dbf" ) dbCreate( "datab", { { "ID", "N", 5, 0 }, { "INFO", "C", 15, 0 } } ) ENDIF USE datab ALIAS base NEW INDEX ON id TO datab temporary IF LastRec() == 0 FOR i := 1 TO 200 APPEND BLANK REPLACE id WITH RecNo(), info WITH "record " + hb_ntos( RecNo(), 4 ) NEXT ENDIF DEFINE WINDOW win_1 AT 0, 0 WIDTH 400 HEIGHT 500 ; MAIN TITLE "TSBrowse Add Record Demo" NOMAXIMIZE NOSIZE @06, 10 BUTTON BRUN CAPTION "Add Record" ACTION AddRecord( obrw ) @06, 110 BUTTON BFND CAPTION "Find ID 100" ACTION FindRecord( obrw ) DEFINE STATUSBAR FONT _HMG_DefaultFontName SIZE _HMG_DefaultFontSize STATUSITEM "" END STATUSBAR DEFINE TBROWSE obrw AT 40, 10 GRID ALIAS "base" ; WIDTH 370 HEIGHT 418 - 60 ADD COLUMN TO obrw HEADER "ID" ; SIZE 100 ; DATA FieldWBlock( "id", Select( "base" ) ) ; TOOLTIP "My column 1" ADD COLUMN TO obrw HEADER "INFO" ; SIZE 150 ; DATA FieldWBlock( "info", Select( "base" ) ) ; TOOLTIP "My column 2" obrw:cToolTip := "My all columns TsBrowse tooltip" obrw:lNoHScroll := .T. obrw:SetColor( { 2 }, { {|| iif( base->( ordKeyNo() ) % 2 == 0, RGB( 255, 255, 255 ), RGB( 230, 230, 230 ) ) } } ) END TBROWSE obrw:SetFocus() END WINDOW CENTER WINDOW win_1 ACTIVATE WINDOW win_1 RETURN *----------------------------------- PROCEDURE AddRecord( obrw ) *----------------------------------- APPEND BLANK REPLACE id WITH RecNo(), info WITH "record " + hb_ntos( RecNo(), 4 ) obrw:GoToRec( base->( RecNo() ) ) obrw:SetFocus() RETURN FUNC FindRecord( obrw ) SEEK 100 obrw:GotoRec(RecNo()) obrw:SetFocus() RETURN
|
| |
|
gfilatov2002
|
| moderator
|
Пост N: 905
Зарегистрирован: 11.02.10
|
|
Отправлено: 17.03.16 23:59. Заголовок: SergKis пишет: без ..
SergKis пишет: цитата: | без этих изменений, не удерживался ::nRowPos |
| Благодарю за помощь, сделал эти изменения в коде TSBrowse
| |
|
gfilatov2002
|
| moderator
|
Пост N: 906
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.03.16 00:01. Заголовок: Andrey пишет: добав..
Andrey пишет: цитата: | добавь пожалуйста ! Очень нужно |
| Не вопрос, уже добавил моргание (6 раз с интервалом в 50 миллисекунд)
| |
|
gfilatov2002
|
| moderator
|
Пост N: 907
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.03.16 11:59. Заголовок: Сегодня выпущен очер..
| |
|
Haz
|
| |
Пост N: 833
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.03.16 15:12. Заголовок: Григорий , все же сл..
Григорий , все же следующий вариант работает более корректно ( у себя заменил на него ) //H_EVENTS.PRG _DoWindowEventProcedure ( _HMG_aFormGotFocusProcedure , i , 'WINDOW_GOTFOCUS' ) IF _HMG_IsModalActive BringWindowToTop(_HMG_ActiveModalHandle) if _HMG_aFormFocusedControl <> _HMG_ActiveModalHandle .and. _HMG_aFormType [ i ] <> "M" // Это нужно чтоб при вызове из модального окна - другого FlashWindowEx( _HMG_ActiveModalHandle , 1, 6, 50 ) // модального , старое не мограло end ELSE iif ( _HMG_aFormFocusedControl != 0 , setfocus ( _HMG_aFormFocusedControl ) , Nil ) END Проверял работу новой версии вот на примере ниже , если после запуска теста на панели задач выбрать мышью другое приложение , а потом опять тест - НЕ ВСЕГДА попадаем в модал да и моргает не то окно ( в титле окон видно ). А если переключать не мышом, а альт+таб , то вроде нормик #include "minigui.ch" Function Main DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 640 HEIGHT 480 ; TITLE 'MiniGUI Main' ; MAIN ; ON INIT Child() END WINDOW Form_1.Activate Return Nil Func Child() Form_1.Hide DEFINE WINDOW Form_2 ; AT 100,100 ; WIDTH 640 HEIGHT 480 ; TITLE 'MiniGUI Standard' ; WINDOWTYPE STANDARD ; ON INIT Modal() END WINDOW Form_2.Activate Form_1.Show return nil Func Modal() DEFINE WINDOW Form_3 ; AT 200,200 ; WIDTH 640 HEIGHT 480 ; TITLE 'MiniGUI Modal' ; MODAL END WINDOW Form_3.Activate return nil
| |
|
gfilatov2002
|
| moderator
|
Пост N: 908
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.03.16 23:01. Заголовок: Haz пишет: следующ..
Haz пишет: цитата: | следующий вариант работает более корректно |
| Благодарю за пример! Предлагаю доработанный вариант кода с учетом Ваших замечаний: ... IF _HMG_IsModalActive BringWindowToTop ( _HMG_ActiveModalHandle ) IF iswinnt() .AND. ( _HMG_aFormType != 'M' .OR. ; _HMG_aFormFocused == .T. .AND. _HMG_aFormType [ AScan ( _HMG_aFormHandles, _HMG_aFormParentHandle ) ] == 'M' ) // Form's caption blinking FlashWindowEx ( _HMG_ActiveModalHandle , 1 , 5 , 60 ) ELSE _HMG_aFormFocused := .T. ENDIF ENDIF IF _HMG_aFormFocusedControl != 0 setfocus ( _HMG_aFormFocusedControl ) ENDIF
| |
|
gfilatov2002
|
| moderator
|
Пост N: 909
Зарегистрирован: 11.02.10
|
|
Отправлено: 23.03.16 11:37. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | доработанный вариант кода |
| Сделал "тихий" апдейт сборки 16.03 с учетом этих поправок Для кого это критично, могут обновить у себя инсталяцию BCC по ссылке выше
| |
|
Haz
|
| |
Пост N: 834
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.03.16 12:13. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Сделал "тихий" апдейт сборки 16.03 с учетом этих поправок |
| Спасибо, в таком варианте все работает.
| |
|
Softlog86
|
| |
Пост N: 288
Зарегистрирован: 03.12.08
|
|
Отправлено: 23.03.16 15:01. Заголовок: Заметил небольшой ба..
Заметил небольшой баг . WINDOWS XP . Тема - "XP стандартная голубая" Контрол из MiniGui :FRAME Неправильно отображает цвета , указанные в FONTCOLOR ...... Пишу - WHITE - выводит вроде как зелёный :( WINDOWS -7 . Тема "Классическая" -отображение правильное . На других темах не проверял
| |
|
gfilatov2002
|
| moderator
|
Пост N: 910
Зарегистрирован: 11.02.10
|
|
Отправлено: 23.03.16 15:08. Заголовок: Softlog86 пишет: Те..
Softlog86 пишет: цитата: | Тема "Классическая" -отображение правильное |
| Это не ошибка. В классической теме под WinXP будет также отображение правильное Выводы о поведении Винды в разных темах делайте самостоятельно...
| |
|
Softlog86
|
| |
Пост N: 289
Зарегистрирован: 03.12.08
|
|
Отправлено: 23.03.16 22:45. Заголовок: просто другие контро..
просто другие контролы вырисовываются заданным цветом , а frame - почему-то по-своему . Чтоб ему еще прикрутить свойство NOXPSTYLE :) Посоветуйте как решить-то ? или тупо не использовать раскраску вовсе ? ругаются клиенты что ничего не видно . А предлагать им "сменить тему" ...... не так поймут .
| |
|
gfilatov2002
|
| moderator
|
Пост N: 911
Зарегистрирован: 11.02.10
|
|
Отправлено: 23.03.16 23:30. Заголовок: Softlog86 пишет: По..
Softlog86 пишет: Используйте в таком случае OwnerDraw frame как в примере из папки samples\Basic\LABEL_3 Вызов функции цитата: | MyFrame(300,300,175,50,"20","My Frame",BLUE,LGREEN) |
|
| |
|
Softlog86
|
| |
Пост N: 290
Зарегистрирован: 03.12.08
|
|
Отправлено: 24.03.16 10:54. Заголовок: Спасибо за наводку ...
Спасибо за наводку .... Приму к сведению .....
| |
|
sashaBG
|
| постоянный участник
|
Пост N: 174
Зарегистрирован: 15.09.05
|
|
Отправлено: 24.03.16 11:29. Заголовок: У меня все Разморгалось в новой
У меня все Разморгалось с новой сборкой 16.03 :) Видимо потому что я пользуюсь только Модальными окнами . Причем в версии под MINGW имею Модальное окно которое моргает после того когда възвал и закрыл функцию MsgInfo() например. а в BCC наоборот сначало моргает MsgInfo() при показе а потом и основное Модальное окно из кторого функция бъла вызвана Григорий есть способ ето откльчить ?
| |
|
Haz
|
| |
Пост N: 835
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.03.16 14:58. Заголовок: sashaBG пишет: У ме..
sashaBG пишет: цитата: | У меня все Разморгалось с новой сборкой 16.03 : |
| Есть такое. При нескольких модальный они перемигиваются Скорее всего дело в условии IF iswinnt() .AND. ( _HMG_aFormType != 'M' .OR. ; _HMG_aFormFocused == .T. .AND. _HMG_aFormType [ AScan ( _HMG_aFormHandles, _HMG_aFormParentHandle ) ] == 'M' ) поменял у себя на if iswinnt() .AND. _HMG_aFormFocusedControl <> _HMG_ActiveModalHandle .and. _HMG_aFormType [ i ] <> "M" т.е. мигает только если пытается получить фокус не то окно которое является последним открытым модальным, а какое то другое. При этом окно которое хочет получить фокус не является модальным. После этой правки вроде полегчало и моргает только по делу. Для отключения, можно флаг организовать в исходнике типа lModalBlink и моргать только если он выставлен в .T.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 912
Зарегистрирован: 11.02.10
|
|
Отправлено: 24.03.16 15:40. Заголовок: sashaBG пишет: Григ..
sashaBG пишет: цитата: | Григорий есть способ ето откльчить ? |
| Да, надо в исходнике h_events.prg изменить обработку события WM_SETFOCUS таким образом: ... _DoWindowEventProcedure ( _HMG_aFormGotFocusProcedure [ i ] , i , 'WINDOW_GOTFOCUS' ) IF _HMG_IsModalActive .AND. Empty ( _HMG_InplaceParentHandle ) BringWindowToTop ( _HMG_ActiveModalHandle ) IF iswinnt() .AND. _HMG_aFormType [ i ] != 'M' // Form's caption blinking FlashWindowEx ( _HMG_ActiveModalHandle , 1 , 5 , 60 ) ENDIF ENDIF ... и пересобрать библиотеку
| |
|
gfilatov2002
|
| moderator
|
Пост N: 913
Зарегистрирован: 11.02.10
|
|
Отправлено: 24.03.16 16:21. Заголовок: sashaBG Обновил сб..
| |
|
Haz
|
| |
Пост N: 836
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.03.16 16:46. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Ваши комментарии приветствуются |
| Работает как надо
| |
|
sashaBG
|
| постоянный участник
|
Пост N: 175
Зарегистрирован: 15.09.05
|
|
Отправлено: 25.03.16 09:18. Заголовок: Да теперь все хорошо !
Да теперь все хорошо !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4807
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.03.16 11:20. Заголовок: Что-то у меня в Tsbr..
Что-то у меня в Tsbrowse все размеры поехали... Но я сам размеры фонта устанавливал. Как считается размер фонта под разные расширения экрана ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 913
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.03.16 11:53. Заголовок: Andrey пишет:Что-то ..
Andrey пишет: цитата: | Что-то у меня в Tsbrowse все размеры поехали... |
| сейчас высота строки считается от фонта, раньше не считалась и была для всех фонтов 16 hFont := InitFont( ::cFont, ::nFontSize ) // SergKis addition ::nHeightCell := ::nHeightHead := GetTextHeight( 0, "B", hFont ) + 1 DeleteObject( hFont )
| |
|
alex_II
|
| |
Пост N: 132
Зарегистрирован: 12.07.06
|
|
Отправлено: 13.04.16 12:47. Заголовок: Проблема с HBPrinter
Перепрыгнул с версии 15.12 сразу на 16.03 и обнаружил проблему: в окне предварительного просмотра печати перестали работать оба (горизонтальный и вертикальный) бегунка. При масштабировании можно просматривать только верхнюю левую часть листа.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 925
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.04.16 13:07. Заголовок: alex_II пишет: в ок..
alex_II пишет: цитата: | в окне предварительного просмотра печати перестали работать оба (горизонтальный и вертикальный) бегунка. |
| Да, я подтверждаю эту проблему. Она уже исправлена в новой сборке 16.04, которая готовится сейчас к выпуску. Но поскольку надо работать без ошибок уже "вчера", я сделал "тихое" обновление текущей версии по старому адресу: http://hmgextended.com/files/CONTRIB/hmg-16.03-setup.zip Скачайте его, пожалуйста, и отпишитесь о результате здесь, на форуме
| |
|
alex_II
|
| |
Пост N: 133
Зарегистрирован: 12.07.06
|
|
Отправлено: 13.04.16 13:34. Заголовок: HBPrinter
Проверил - всё работает! Большое спасибо за оперативную помощь
| |
|
gfilatov2002
|
| moderator
|
Пост N: 926
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.04.16 11:18. Заголовок: Просто к сведению. В..
Просто к сведению. Выпустил сегодня RC для новой сборки библиотеки. Полный список изменений см. ниже Скрытый текст
* Fixed: The problem with the scrollbars handling in the virtual dimensioned Modal windows (introduced in the build 16.03). Reported by Vianei Moreira de Lemos <vianeimoreira@gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: Added a new method 'SetArray' for assigning of array to the following controls: ComboBox, Grid, ListBox at runtime: - function syntax: DoMethod ( Form, Control, 'SetArray', aNewValues ) - pseudo-OOP syntax: Form.Control.SetArray( LoadItems() ) Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\COMBO_1) (see demo in folder \samples\Basic\Grid_5) (see demo in folder \samples\Basic\Listbox_3) * Enhanced: The standard ComboBox control supports a 'Refresh' method now: - function syntax: DoMethod ( Form, Control, 'Refresh' ) - pseudo-OOP syntax: Form.ComboBox.Refresh [()] Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\COMBO_1) * Enhanced: The MonthCal control supports now 'On GotFocus' and 'On LostFocus' clauses similar to others controls. Contributed by Grigory Filatov <gfilatov@freemail.ru> * Enhanced: The ButtonEx control supports JPG, GIF, TIF and PNG images now. You can set/get this property at runtime: Form.ButtonEx.Picture := 'ok.png' cImage := GetProperty( Form, Control, 'Picture' ) Added a new optional clause IMAGESIZE <w>, <h> to the ButtonEx control. This property is available at control's definition for NOT Bitmap only. The alternative syntax is IMAGEWIDTH <w> and IMAGEHEIGHT <h>. Requested by Verchenko Andrey <verchenkoag@gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Modified: The some internal functions were defined as Static. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see h_controlmisc.prg in folder \Source). * Updated: Rearranged processing of an enum index in the cycles 'For Each-Next' for xHarbour compatibility. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - added a new method nAtColActual() for correct detection of a column number at the mouse moving in TBrowse. It was needed for a proper handling of the cell's tooltips. Contributed by Igor Nazarov and SergKis (see demo2.prg in folder \samples\Advanced\Tsb_calendar) * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.12.1 (from 3.12.0dev). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2016-04-05 16:27): * Updated: HbNetIO contrib library. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: HMGS-IDE v.1.3.0 Project Manager and Two-Way Visual Form Designer. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look for what's new at changelog.txt in folder \Ide) * New: 'ON LOSTFOCUS event as validation checking for TEXTBOX control' sample. Based upon a contribution of S.Rathinagiri <srgiri@dataone.in> (see in folder \samples\Basic\VALID_2) * New: 'Command Link Button emulation for WinXP' sample. Requested by Pete D. <pete_westg/at/yahoo.gr>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\CommandLinkXP) * New: 'TsBrowse Monthly Calendar with the dates marking at runtime' sample. You can mark the dates by a left mouse click or <Enter> or <Space> keys pressing. Don't miss this very interesting example! Based upon a contribution of Igor Nazarov (see in folder \samples\Advanced\Tsb_calendar) * New: 'TSBrowse Incremental Seek With Footer's GetBox' sample. Based upon a contribution of Russian user SergKis (see in folder \samples\Advanced\Tsb_seek_2) * New: 'How to display a ProgressBar on TaskBar icon' sample is based on the ITaskbarList3 COM Interface. It is MinGW-based example only. Note: This feature works properly at Windows 7 or later only. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\TaskBarList) * Updated: 'Display of Main, Child and Modal windows without sizes' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\Hello) * Updated: 'HMG IDE Demo' sample: - modified MonthCal control handling after the last core changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\hmgide) * Updated: 'System Idle Detection' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Advanced\SysIdle) * Updated: 'Minigui Modal Form Designer Utility' sample: - added datepicker and hyperlink controls; - added supporting functions for tbrowse control; - added spanish/english translation; - added config file setup.ini. Contributed by Rafael Moran <webrmoran[at]yahool.com>. Revised by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\xForm)
|
Если есть желающие поучаствовать в тестировании этой сборки, то могу предоставить ссылку для скачивания (в индивидуальном порядке )
| |
|
sergeyd
|
| |
Пост N: 2
Зарегистрирован: 13.04.16
|
|
Отправлено: 14.04.16 12:16. Заголовок: У меня давно уже про..
У меня давно уже проблема с Hotkey: при некоторых стечениях обстоятельств окно программы не активно (на "заднем плане" ), но получает WM_HOTKEY вместо активного окна. Мне кажется, в h_events.prg на CASE WM_HOTKEY вместо _HMG_aControlParentHandles == GetActiveWindow() должно быть _HMG_aControlParentHandles == GetForegroundWindow() и в случае _HMG_aControlParentHandles != GetForegroundWindow() надо WM_HOTKEY отправлять "наверх" Или я где-то капитально ошибаюсь?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 927
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.04.16 13:03. Заголовок: sergeyd пишет: Или ..
sergeyd пишет: цитата: | Или я где-то капитально ошибаюсь? |
| Просто добавьте следующую команду в основной модуль для Вашего случая
| |
|
sergeyd
|
| |
Пост N: 3
Зарегистрирован: 13.04.16
|
|
Отправлено: 14.04.16 14:27. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Просто добавьте следующую команду в основной модуль SET GLOBAL HOTKEYS ON для Вашего случая |
| Не помогает... Да и не мой случай, вроде. У меня неактивная (на взгляд юзера неактивная, так как она НЕ ForegroundWindow) MinGUI-программа "хватает" hotkey.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4845
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.04.16 16:44. Заголовок: Классный синтаксис (..
Классный синтаксис (просто и изящно): @ 20, 60 BUTTONEX Button_1x1 WIDTH 90 HEIGHT 100 ; CAPTION "Santa.png" PICTURE "Santa" IMAGESIZE 64,64 ; ..... Спасибо БОЛЬШОЕ !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4846
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.04.16 19:49. Заголовок: А иконки тоже будут ..
А иконки тоже будут уменьшаться ? CAPTION "Santa.ico" ICON "Santa.ico" IMAGESIZE 64,64 ....
| |
|
gfilatov2002
|
| moderator
|
Пост N: 929
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.04.16 20:03. Заголовок: Andrey пишет: А ико..
Andrey пишет: цитата: | А иконки тоже будут уменьшаться ? |
| Нет, только JPG, GIF, TIF и PNG картинки
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4848
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.04.16 21:49. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Нет, только JPG, GIF, TIF и PNG картинки |
| А сделать нельзя ? Очень бы уменьшился труд по созданию кучи иконок.... Достало это рисование, вместо программирования, сидишь и эти иконки/картинки рисуешь под разные разрешения экрана.
| |
|
Softlog86
|
| |
Пост N: 299
Зарегистрирован: 03.12.08
|
|
Отправлено: 15.04.16 13:13. Заголовок: А какая проблема авт..
А какая проблема автоматом переделать ICO в JPG ? :)
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4851
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.04.16 18:02. Заголовок: Softlog86 пишет: А ..
Softlog86 пишет: цитата: | А какая проблема автоматом переделать ICO в JPG ? :) |
| В JPG нет прозрачности. Соответсвенно JPG на кнопке будут выглядеть ужасно. Попробуй посмотреть иконку с кругом на кнопке и потом преобразуй иконку в JPG. Смотри пример - https://cloud.mail.ru/public/DtiA/D2ZSqB3ue И попробуй туда JPG сделать.
| |
|
sergeyd
|
| |
Пост N: 4
Зарегистрирован: 13.04.16
|
|
Отправлено: 15.04.16 20:16. Заголовок: Вот попробовал прост..
Вот попробовал простой пример с Hotkey сделать. Не на тему "неактивная MinGUI-программа хватает hotkey". Если запустить программу один раз без параметра и параллельно с параметром 2, а затем понажимать несколько раз F2 то в одном окне, то в другом, то под Windows 10 Pro и Windows 7 Pro результат зависит от того, переключаем ли между окнами по а)ALT+TAB или мышкой в таскбаре или б)щелкаем мышкой по окнам. Под XP Home вроде работает нормально, под W 7/10 б) глючит Скрытый текст #include "minigui.ch" Function Main(cParam) //SET GLOBAL HOTKEY ON if valtype(cParam)#"C" cParam:="1" endif DEFINE WINDOW Form_1 ; AT 50,50 ; WIDTH 640 HEIGHT 480; TITLE 'Demo '+cParam; MAIN ON KEY F2 ACTION action1(cParam) @ 5,250 LABEL Label_1 ; VALUE "Programm "+cParam+". Press F2"; WIDTH 270 ; HEIGHT 18 END WINDOW if cParam=="1" Form_1.Center() endif Form_1.Activate() Return Nil ****************************** Function action1(cParam) MsgInfo( "Programm "+cParam, , , .f. ) return
|
| |
|
gfilatov2002
|
| moderator
|
Пост N: 933
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.04.16 10:23. Заголовок: Сегодня выпущен очер..
| |
|
gfilatov2002
|
| moderator
|
Пост N: 947
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.05.16 10:39. Заголовок: Просто к сведению. В..
Просто к сведению. Выпустил сегодня pre-release для новой сборки библиотеки. Финальная версмя запланирована к выходу на следуюшей неделе Благодарю за Ваше внимание и поддержку данного проекта
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4925
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.05.16 10:19. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Просто к сведению. Выпустил сегодня pre-release для новой сборки библиотеки. |
| Григорий, а почему в библиотеке нет примеров по LetoDB ? Отличное средство для переводы программ в современную технологию. Многие об этом не знают. Глядишь и захотят попробовать и перейдут на него. Тем более есть ссылки на него в Вики и примеры для МиниГуи я высылал. Через твою библиотеку многие увидят LetoDB !!! У тебя же в библиотеке разные базы есть: MySQL, PostgreSQL, SQLite.
| |
|
Vlad04
|
| постоянный участник
|
Пост N: 568
Зарегистрирован: 13.10.05
|
|
Отправлено: 15.05.16 11:09. Заголовок: Поддерживаю !..
Поддерживаю !
| |
|
Haz
|
| |
Пост N: 967
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.05.16 15:30. Заголовок: Andrey пишет: Григо..
Andrey пишет: цитата: | Григорий, а почему в библиотеке нет примеров по LetoDB ? |
| Так в чем проблема ? Кто работает с LETO, выкладывайте примеры и Григорий с удовольствием их включит в ближайшую сборку. /* при этом все вопросы к автору примера */ Andrey пишет: цитата: | примеры для МиниГуи я высылал. |
| мож потерялось где ...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4926
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.05.16 18:02. Заголовок: Вот ряд примеров - h..
Вот ряд примеров - https://cloud.mail.ru/public/KuUK/7e4ixTzsg Что там добавить/исправить - пишите. Единственно что не сделал ещё один пример, распаковки zip-файла на сервере. Может кто поможет сделать ? Создание и копирование Zip-файла есть в примерах.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 948
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.05.16 10:15. Заголовок: Дню Пионерии 19 мая посвящается...
| |
|
Петр
|
| постоянный участник
|
Пост N: 1199
Зарегистрирован: 09.10.06
|
|
Отправлено: 19.05.16 18:47. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Дню Пионерии 19 мая посвящается... |
| Оффтоп: машину времени, к сожалению, еще не придумали и вернуться в детство, более или менее счастливое, - увы, не получится.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 952
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.06.16 11:55. Заголовок: Просто к сведению. В..
Просто к сведению. Выпустил сегодня первый RC для новой сборки библиотеки. Полный список изменений см. ниже Скрытый текст
* Fixed: The correction of a caret look of Insert/Overwrite status at the entrance/exit in a GetBox control (introduced in the build 16.05). Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: Added support for a cue banner (banner text) in TextBox, ComboBox and Spinner controls. Sets the textual cue (or placeholder) that is displayed by the edit control to prompt the user for information. When the user clicks the text, the text goes away and the user can type. Note: You cannot set a cue banner on a multiline edit control or on a rich edit control. Themes support must be activated in the application. Above is a WinAPI requirement. Syntax: @ <row>,<col> TEXTBOX <name> [ OF <parent> ] ; [ WIDTH <nWidth> ] [ HEIGHT <nHeight> ] ; [ VALUE <value> ] [ CUEBANNER | PLACEHOLDER <cCueText> ] Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demos in folder \samples\Advanced\CueBanner) * Enhanced: SET HELPFILE TO <chmfile> command will process automatically the hotkey F1 for calling of a help file in the CHM format. Based upon a contribution of Kevin Carmody <i@kevincarmody.com> (see demo in folder \samples\Basic\ContextCHM) * Enhanced: The DRAW GRAPH and DRAW PIE commands support of the multiple charts on the same form. It was a postponed user's request. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Modified: DRAW GRAPH: moved the title, labels and legendgs cleaning into the ERASE WINDOW command. It was a postponed user's request. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\Charts) * Updated: Synchronized Extended HMG for compatibility with Official HMG: - Enhanced: The ComboBox control supports the optional ON CANCEL event when the user selects an item, but then selects another control or closes the dialog box. It indicates the user's initial selection is to be ignored. Based upon a contribution of Claudio Soto <srvet@adinet.com.uy> * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.14.0dev (from 3.13.0dev). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2016-05-04 15:50): * hbrdd and hbrtl were compiled with a default switch -gc3 instead -gc0; * Updated: OpenSSL wrapper for using the recent 1.0.2h version. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'RMChart DLL class usage' samples are based upon the RMChart.dll from http://www.rmchart.com. Based upon a code contributed by Jose Quintas. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\RMChart_DLL_2) * New: 'TSBrowse Load Fields with ordered data' sample. Contributed by Igor Nazarov. Revised by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\Tsb_LoadFields) * Updated: 'My Dbf Browse' sample: - modified for compatibility with the last Browse control changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\BROWSE_8) * Updated: 'Help Demo' sample: - replace an obsolete HLP format with CHM format. Based upon a contribution of Kevin Carmody <i@kevincarmody.com> (see in folder \samples\Basic\HELP) * Updated: 'Auto Completing ComboBox' sample. Based upon a contribution of S.Rathinagiri <srgiri@dataone.in> (see in folder \samples\Advanced\AutoFill_2) * Updated: 'Transactions in DBF' sample: - added a brief document about a Table, Record and Field classes. Based upon the Table class of the Harbour contrib library xHb. (see ttable.txt in folder \samples\Advanced\TRANSACTIONS)
|
Благодарю за Ваше внимание , а также за финансовую поддержку данного проекта
| |
|
Vlad04
|
| постоянный участник
|
Пост N: 583
Зарегистрирован: 13.10.05
|
|
Отправлено: 07.06.16 08:09. Заголовок: DBG_TEST c:\Mini..
DBG_TEST c:\MiniGUI\SAMPLES\Advanced\DBG_TEST\ Не собирается цитата: | Harbour 3.2.0dev (r1605041350) Copyright (c) 1999-2016, http://harbour-project.org/ C:/MiniGUI/lib/debugger.lib: file not recognized: File format not recognized collect2: ld returned 1 exit status hbmk2[dbg_test]: Error: Running linker. 1 |
|
| |
|
Haz
|
| |
Пост N: 1003
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.06.16 11:47. Заголовок: Vlad04 пишет: C:/Mi..
Vlad04 пишет: цитата: | C:/MiniGUI/lib/debugger.lib: file not recognized: File format not recognized |
| скорее всего пытаешься собрать в Mingw и кормишь ему борландовскую библиотеку В среде BCC55 собирается без единого замечания Строка "File format not recognized" это строка MInGw, ВСС ее не использует Это "collect2:" - тоже из Mingw А это debugger.lib файл в формате библиотеки Borland C
| |
|
Vlad04
|
| постоянный участник
|
Пост N: 584
Зарегистрирован: 13.10.05
|
|
Отправлено: 08.06.16 07:07. Заголовок: Haz Запустил build...
Haz Запустил build.bat , который был в директории и получил сообщение.
| |
|
Haz
|
| |
Пост N: 1004
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.06.16 08:57. Заголовок: Vlad04 пишет: Пиш..
Vlad04 пишет: Пишу с мобилки, поэтому коротео. Это называется "горе от ума".hbmk2 который собирает приложение - слишком умный. Когда в системе установлены несколько компиляторов которые он понимает. И когда пользователь не позаботился явно указать чем собирать, hbmk2 ищет сам. В данном случае по псвоим алгоритмам он раньше нахоит Mingw. Укажи явно что собирать надо борландом. У hbmk2 есть ключик, посмотреть можно hbmk2.exe - help.
| |
|
Dima
|
| |
Пост N: 5699
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.06.16 09:04. Заголовок: Vlad04 пишет: Запус..
Vlad04 пишет: цитата: | Запустил build.bat , который был в директории и получил сообщение. |
| Пути поправь в buildapp.bat Проверил , нормально собирается и под BCC и под MINGW
| |
|
Haz
|
| |
Пост N: 1005
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.06.16 09:09. Заголовок: На счет пути в build..
На счет пути в buildapp не скажу. Т.к. не помню его содержимое. Возможно там путей и нет, а может Дима прав. Как вариант можно в пути поиска PATH раньше указать папку с борландом.
| |
|
Dima
|
| |
Пост N: 5700
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.06.16 09:17. Заголовок: Haz пишет: Возможно..
Haz пишет: Есть пути Игорь Например в начале (я сам правил , под себя) SET HMGPATH=c:\minigui_mg\hmg SET PATH=%HMGPATH%\harbour\bin;%HMGPATH%\mingw32\bin;%PATH% SET HMGRPATH=c:\minigui_mg\minigui
| |
|
Haz
|
| |
Пост N: 1006
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.06.16 11:10. Заголовок: Dima пишет: Есть пу..
Dima пишет: Приехал на работу, пишу с компа ))) не факт что пути есть - вот содержимое build.bat из поставки Minigui - всего одна строка call ..\..\..\batch\hbmk2.bat %* -b -trace dbg_test.hbp dbg_test.hbc видимо надо добавить
| |
|
Dima
|
| |
Пост N: 5701
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.06.16 11:28. Заголовок: Haz я не про тот ба..
Haz я не про тот батник (а тот что на пикче ниже) )) и потом под Mingw там чуть иная структура каталогов
| |
|
Haz
|
| |
Пост N: 1007
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.06.16 11:30. Заголовок: Dima пишет: не про..
Dima пишет: так бы сразу и сказал
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4961
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.06.16 16:03. Заголовок: Haz пишет: и потом ..
Haz пишет: цитата: | и потом под Mingw там чуть иная структура каталогов |
| Можно ли разместить МиниГуи под Mingw и BCC на одном диске ? Хочется собирать проекты под разными компиляторами и посмотреть разницу.
| |
|
Dima
|
| |
Пост N: 5702
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.06.16 16:04. Заголовок: Andrey пишет: Можно..
Andrey пишет: цитата: | Можно ли разместить МиниГуи под Mingw и BCC на одном диске ? |
| А что мешает то ? Они живут по разным путям , у меня например.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4963
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.06.16 16:26. Заголовок: Dima пишет: А что м..
Dima пишет: Да по умолчанию ставятся в одни и теже папки... Dima пишет: цитата: | Они живут по разным путям , у меня например. |
| Как сделано - напиши... Можно ли сделать 2 разных *.hbp файла в одной папки для сборки 2-х разных ехе-ников ?
| |
|
Dima
|
| |
Пост N: 5703
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.06.16 16:48. Заголовок: Andrey пишет: Да по..
Andrey пишет: цитата: | Да по умолчанию ставятся в одни и теже папки... |
| Правда что ли ? Минигуи под MiGW это архив а не инсталяха и куда распакуешь его туда и встанет.
| |
|
Dima
|
| |
Пост N: 5704
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.06.16 17:17. Заголовок: Andrey пишет: Можно..
Andrey пишет: цитата: | Можно ли сделать 2 разных *.hbp файла в одной папки для сборки 2-х разных ехе-ников ? |
| Можно , но надо править дороги в батниках. PS Все дело в дорогах и батниках если кратко.
| |
|
Alex_Cher
|
| |
Пост N: 27
Зарегистрирован: 18.06.15
|
|
Отправлено: 14.06.16 12:39. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: После обновления 16.05 при вызове GRID поверх стали появляться lable главного окна ... Было стало
| |
|
Haz
|
| |
Пост N: 1010
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.06.16 13:49. Заголовок: Alex_Cher пишет: пр..
Alex_Cher пишет: цитата: | при вызове GRID поверх стали появляться lable главного окна ... |
| Возможно проблему решит SetFocus на Grid или Hide на Label и Button и зачем создавать себе трудности выводя контролы с пересекающимися координатами если на форме в одном месте должно выводиться несколько контролов, у меня к примеру в зависимости от условий это GetBox, Combo, CheckBox и др. то видимый всегда один, остальные прячу
| |
|
Alex_Cher
|
| |
Пост N: 28
Зарегистрирован: 18.06.15
|
|
Отправлено: 14.06.16 14:50. Заголовок: Haz пишет: Возможно..
Haz пишет: цитата: | Возможно проблему решит SetFocus на Grid или Hide на Label и Button |
| В общем согласен ..., но на предыдущих сборках Enabled на Label и Button (как видно на фото) решал все подобные проблемы.
| |
|
Softlog86
|
| |
Пост N: 304
Зарегистрирован: 03.12.08
|
|
Отправлено: 14.06.16 17:23. Заголовок: SHOW/HIDE и VISIBLE..
SHOW/HIDE и VISIBLE для Label работают не так как ENABLE .... :)
| |
|
gfilatov2002
|
| moderator
|
Пост N: 954
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.06.16 10:21. Заголовок: Сегодня выпущен очер..
| |
|
Dima
|
| |
Пост N: 5730
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.06.16 21:34. Заголовок: gfilatov2002 Исполь..
gfilatov2002 Использование CUEBANNER для BTNTEXTBOX возможна ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 956
Зарегистрирован: 11.02.10
|
|
Отправлено: 16.06.16 22:06. Заголовок: Dima пишет: Использ..
Dima пишет: цитата: | Использование CUEBANNER для BTNTEXTBOX |
| Да, это возможно. Благодарю за предложение
| |
|
Dima
|
| |
Пост N: 5845
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.07.16 15:55. Заголовок: gfilatov2002 А возм..
gfilatov2002 А возможно ли сделать что бы в BUTTONEX , IMAGESIZE срабатывал и для иконок и bmp зашитых в ресурс EXE файла ? Объясню для чего надо. Есть икона в ресурсе 32x32 и ее можно будет прицепить на любую кнопку уменьшив/увеличив ее размеры. А так пока приходится держать пару - тройку одинаковых икон с разными размерами.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 960
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.07.16 18:29. Заголовок: Dima пишет: Есть ик..
Dima пишет: цитата: | Есть икона в ресурсе 32x32 и ее можно будет прицепить на любую кнопку уменьшив/увеличив ее размеры. |
| Не получится, поскольку функция HMG_LoadPicture(), которая используется для масштабирования, не дружит с иконками Dima пишет: цитата: | приходится держать пару - тройку одинаковых икон с разными размерами. |
| Попробуй конвертировать самую большую иконку в PNG формат Возможно, тогда проблема с избыточными ресурсами будет решена
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4995
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.07.16 18:51. Заголовок: Dima пишет: А так п..
Dima пишет: цитата: | А так пока приходится держать пару - тройку одинаковых икон с разными размерами. |
| Давно так мучаюсь... Куча дублей одной иконки...
| |
|
Dima
|
| |
Пост N: 5847
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.07.16 21:35. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Попробуй конвертировать самую большую иконку в PNG формат |
| Идея отличная Так и сделал , поигрался.... Личные наблюдения: 1. ICO и BMP идеально ложатся на кнопку без искажений (играл с размером 32x32) 2. Тот же PNG такого же размера (говорю примерно о такой пикче но 32x32 http://www.icons101.com/icon_png/size_512/id_73282/Excel.png лечь то она легла , но края "обгрызаны" будто хомячки погрызли. В редакторе (вьювере) картинок , ICO и такой же PNG с таким же размером выглядят идентично Попробовал ее масштабировать средствами BUTTONEX до 24x24 , та же песня , края "погрызаны" Куда копать пока не понял. Остался на варианте 1 , там все идеально.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4996
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.07.16 23:01. Заголовок: Dima пишет: Куда ко..
| |
|
Dima
|
| |
Пост N: 5849
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.07.16 08:25. Заголовок: Andrey пишет: А вот..
Andrey пишет: цитата: | А вот так выглядит PNG на C# |
| Выглядит отлично
| |
|
gfilatov2002
|
| moderator
|
Пост N: 963
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.07.16 10:45. Заголовок: Завершена подготовка..
Завершена подготовка новой (возможно, последней с моим участием) сборки библиотеки, которая будет опубликована завтра. Полный список изменений см. ниже Скрытый текст
* New: Added support for a cue banner (banner text) in the BtnTextBox control. Syntax: @ <row>,<col> BTNTEXTBOX <name> [ OF <parent> ] ; [ WIDTH <nWidth> ] [ HEIGHT <nHeight> ] ; [ VALUE <value> ] [ ACTION <action> ] ; [ CUEBANNER | PLACEHOLDER <cCueText> ] Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo4.prg in folder \samples\Advanced\CueBanner) * New: Added the commands for the animated GIF support. Standard syntax: @ <row>,<col> ANIGIF <controlname> [ OBJ <oGif> ] [ OF <parent> ] ; PICTURE <filename> [ WIDTH <nWidth> ] [ HEIGHT <nHeight> ] ; [ BACKGROUNDCOLOR <aBKGcolor> ] [ DELAY <nDelay> ] RELEASE ANIGIF <name> OF <parent> Alternative syntax: DEFINE ANIGIF Gif_1 ROW 20 COL 20 WIDTH 100 HEIGHT 100 PICTURE filename BKGNDCOLOR WHITE END ANIGIF Based upon a contribution of Petr Chornyj and the TGif class. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\tgif) * Enhanced: The standard ComboBox control with DISPLAYEDIT clause supports an optional AUTOCOMPLETE clause with a facultative SHOWDROPDOWN option. It will be automatically completes input strings by comparing the prefix being entered to the prefixes of all strings in the maintained items. This is useful for ComboBox controls in which URLs, addresses, file names, or commands will be frequently entered. Sample code: DEFINE COMBOBOX combo_1 ROW 10 COL 10 WIDTH 150 HEIGHT 200 ITEMS aItems SORT .T. DISPLAYEDIT .T. AUTOCOMPLETE .T. SHOWDROPDOWN .T. END COMBOBOX Based upon a contribution of S.Rathinagiri <srgiri@dataone.in>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\AutoFill_2) * Enhanced: The Grid control supports the optional 'ColumnSort {}' clause. This clause specifies that column's headers allows to sort a data via a mouse click with showing a corresponding headers image. Syntax: @ <row>,<col> GRID <name> [ OF <parent> ] ; [ WIDTH <nWidth> ] [ HEIGHT <nHeight> ] ; [ HEADERS <aHeaders> ] [ WIDTHS <aWidths> ] ; [ ITEMS <aItems> ] [ VALUE <value> ] [ COLUMNSORT <aSort> ] where the array aSort may have the following values for each column: 0 - no sorting; 1 - ascending sort; 2 - descending sort. Based upon a contribution by Bicahi Esgici <esgici@gmail.com>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo7.prg in folder \samples\Basic\Grid_3) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - Fixed: a small correction in the method SortArray(). Contributed by Janusz Pora <januszpora@onet.eu>. - Updated: added workaround for a problem with a current row painting at WinXP/Seven. Suggested by Igor Nazarov. * Updated: Harbour Compiler 3.2.0dev (SVN 2016-06-29 23:02). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: HMGS-IDE v.1.3.0 Project Manager and Two-Way Visual Form Designer. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look for what's new at changelog.txt in folder \Ide) * New: 'Charts DBF' sample is based on the Selector library of Janusz Piwowarski: - implementation of pseudo-SQL command SELECT for the queries to DBF. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\Charts_3) * New: 'OptionBox() function' sample. Based upon a contribution of Roberto Lopez <mail.box.hmg@gmail.com> (see in folder \samples\Basic\OptionBox) * Updated: 'Gif89 Demo' sample for compatibility with the last Minigui changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\AnimatedGif) * Updated: 'TGif class' sample for compatibility with the last Minigui changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\tgif) * Updated: 'Print Pie Graph' sample: updated the data for June 2016. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\GraphPrint) * Updated: 'Sort Grid Columns' sample: show of the alternative syntax. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\HeaderImage) * Updated: 'Browse with LOGRDD rdd driver' sample: misc bugfix. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\LogRdd)
| Благодарю за Ваше внимание, а также за финансовую поддержку данного проекта P.S. Отдельный респект Андрею Верченко и Владимиру Рудоманову за посильную материальную помощь разработки этой библиотеки
| |
|
gfilatov2002
|
| moderator
|
Пост N: 964
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.07.16 09:44. Заголовок: Как и обещал, выложи..
Как и обещал, выложил очередную сборку на оф.сайте библиотеки. Ссылки на дистрибутивы есть на этой странице http://hmgextended.com/download.html Желаю успеха в нелегком труде программиста
| |
|
Dima
|
| |
Пост N: 5931
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.07.16 09:12. Заголовок: gfilatov2002 Есть п..
gfilatov2002 Есть проблема. Окно + бровс. В винде жму свернуть все окна и так раз 5 подряд , после очередного восстановления окна , бровс куда то исчез :) Похожий пример из FW , отработал нормально. К примеру вот на этом примере глючит C:\MiniGUI\SAMPLES\Advanced\Tsb_LoadFields\ ЗЫ Вынь 7
| |
|
Haz
|
| |
Пост N: 1035
Зарегистрирован: 20.02.11
|
|
Отправлено: 30.07.16 11:07. Заголовок: Dima пишет: ЗЫ Вын..
Dima пишет: В этом ЗЫ у минигуи наблюдаются проблемы с передачей фокуса. Как исправлять - не представляю, т.к. ты сам пишешь не на каждый раз глючит и ловить причину не ясно где. На 8/10 устал нажимать на свернуть окна - все работает штатно.
| |
|
Dima
|
| |
Пост N: 5932
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.07.16 12:17. Заголовок: Haz пишет: В этом З..
Haz пишет: цитата: | В этом ЗЫ у минигуи наблюдаются проблемы с передачей фокуса |
| А дедько Линарес в FW как то решил эту проблему однако Но я не хочу FW , мне нравится Минигуи !
| |
|
Петр
|
| постоянный участник
|
Пост N: 1214
Зарегистрирован: 09.10.06
|
|
Отправлено: 30.07.16 12:28. Заголовок: Dima пишет: К приме..
Dima пишет: цитата: | К примеру вот на этом примере глючит C:\MiniGUI\SAMPLES\Advanced\Tsb_LoadFields\ ЗЫ Вынь 7 |
| А у меня не заглючило, Win7 тоже
| |
|
Dima
|
| |
Пост N: 5933
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.07.16 12:35. Заголовок: Петр Пару раз клацн..
Петр Пару раз клацнул наверное. У меня получилось на 4-ом разе. Глючат исключительно приложения на минигуи со всем остальным все идеально. Еще одно ЗЫ :) Mingw у меня в приложениях (так же глючит) А примерчик собран в BCC55
| |
|
Dima
|
| |
Пост N: 5934
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.07.16 12:50. Заголовок: Петр А вот кино ht..
Петр А вот кино Скрытый текст В примере происходит тоже , кино снимать не стал.
| |
|
Петр
|
| постоянный участник
|
Пост N: 1215
Зарегистрирован: 09.10.06
|
|
Отправлено: 30.07.16 12:59. Заголовок: Dima пишет: Пару ра..
Dima пишет: цитата: | Пару раз клацнул наверное. У меня получилось на 4-ом разе. |
| Да нет, вроде. Клацал пока не надоело. MiniGUI свежий, компилятор BCC55, Win7 со всеми доступными обновлениями, AVG.
| |
|
Dima
|
| |
Пост N: 5935
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.07.16 13:26. Заголовок: Петр пишет: MiniGUI..
Петр пишет: +1 Петр пишет: +1 Петр пишет: цитата: | Win7 со всеми доступными обновлениями |
| на момент установки 15.05.2015 все стояло самое свежее + KB Петр пишет: Drweb ХЗ что делать , не за себя душа болит а за юзеров а у них только XP и 7 , начнут вот так вот клацать и начнутся вопросы а ответить то и не чего
| |
|
Петр
|
| постоянный участник
|
Пост N: 1216
Зарегистрирован: 09.10.06
|
|
Отправлено: 30.07.16 13:42. Заголовок: Понятно, что собака ..
Понятно, что собака зарыта здесь: FUNCTION Events ( hWnd, nMsg, wParam, lParam ) Понятно, что код там (и не только там) нужно оптимизировать в любом случае, даже если бы не было артефактов. Посмотрю, что можно сделать и отпишусь. Но нужно время, и отдельная тема, например "Обработка событий в MiniGUI", что бы ветку не зас..ть окончательно, причем из лучших побуждений.
| |
|
Dima
|
| |
Пост N: 5936
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.07.16 15:16. Заголовок: Петр пишет: Посмотр..
Петр пишет: цитата: | Посмотрю, что можно сделать и отпишусь. Но нужно время, и отдельная тема, например "Обработка событий в MiniGUI" |
| Петр я готов тестить в любое время суток если что.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1114
Зарегистрирован: 17.02.12
|
|
Отправлено: 01.08.16 22:26. Заголовок: Поковырял команды ОО..
Поковырял команды ООП This... : i_this.ch Скрытый текст
... // WINDOWS (THISWINDOW) #xtranslate ThisWindow . <p:Title,NotifyIcon,NotifyTooltip,FocusedControl,BackColor,Name,Row,Col,Width,Height,MinHeight,MinWidth,MaxHeight,MaxWidth,TitleBar,SysMenu,Sizable,MaxButton,MinButton,Topmost> => GetProperty ( _HMG_THISFORMNAME , <"p"> ) #xtranslate ThisWindow . <p:Title,NotifyIcon,NotifyTooltip,Cursor,BackColor,Row,Col,Width,Height,MinHeight,MinWidth,MaxHeight,MaxWidth,TitleBar,SysMenu,Sizable,MaxButton,MinButton,Topmost> := <arg> => SetProperty ( _HMG_THISFORMNAME , <"p"> , <arg> ) #xtranslate ThisWindow . <p:Activate,Center,Release,Maximize,Minimize,Restore,Show,Hide,SetFocus> [ () ] => DoMethod ( _HMG_THISFORMNAME , <"p"> ) #xtranslate ThisWindow . <p:Handle> => GetFormHandle ( _HMG_THISFORMNAME ) #xtranslate ThisWindow . <p:Index> => GetFormIndex ( _HMG_THISFORMNAME ) #xtranslate ThisWindow . <p:ClientWidth> => GetCliWidth ( GetFormHandle ( _HMG_THISFORMNAME ) ) #xtranslate ThisWindow . <p:ClientHeight> => GetCliHeight( GetFormHandle ( _HMG_THISFORMNAME ) ) ... // COMMON ( REQUIRES TYPE CHECK ) #xtranslate This . <p:Name,Row,Col,Width,Height,BackColor> => iif ( _HMG_THISType == 'C' , GetProperty ( _HMG_THISFORMNAME , _HMG_THISCONTROLNAME , <"p"> ) , GetProperty ( _HMG_THISFORMNAME , <"p"> ) ) #xtranslate This . <p:Row,Col,Width,Height,BackColor> := <arg> => iif ( _HMG_THISType == 'C' , SetProperty ( _HMG_THISFORMNAME , _HMG_THISCONTROLNAME , <"p"> , <arg> ) , SetProperty ( _HMG_THISFORMNAME , <"p"> , <arg> ) ) #xtranslate This . <p:Show,Hide,SetFocus> [ () ] => iif ( _HMG_THISType == 'C' , DoMethod ( _HMG_THISFORMNAME , _HMG_THISCONTROLNAME , <"p"> ) , DoMethod ( _HMG_THISFORMNAME , <"p"> ) ) #xtranslate This . <p:Handle> => iif ( _HMG_THISType == 'C' , GetControlHandle ( _HMG_THISCONTROLNAME , _HMG_THISFORMNAME ) , GetFormHandle ( _HMG_THISFORMNAME ) ) #xtranslate This . <p:Index> => iif ( _HMG_THISType == 'C' , GetControlIndex ( _HMG_THISCONTROLNAME , _HMG_THISFORMNAME ) , GetFormIndex ( _HMG_THISFORMNAME ) ) #xtranslate This . <p:ClientWidth> => GetCliWidth ( iif ( _HMG_THISType == 'C' , GetControlHandle ( _HMG_THISCONTROLNAME , _HMG_THISFORMNAME ) , GetFormHandle ( _HMG_THISFORMNAME ) ) ) #xtranslate This . <p:ClientHeight> => GetCliHeight( iif ( _HMG_THISType == 'C' , GetControlHandle ( _HMG_THISCONTROLNAME , _HMG_THISFORMNAME ) , GetFormHandle ( _HMG_THISFORMNAME ) ) ) #xtranslate This . <c> . <p:ClientWidth> => GetCliWidth ( GetControlHandle ( <"c"> , _HMG_THISFORMNAME ) ) #xtranslate This . <c> . <p:ClientHeight> => GetCliHeight( GetControlHandle ( <"c"> , _HMG_THISFORMNAME ) ) #xtranslate This . <c> . <p:Value,Name,Address,BackColor,FontColor,Picture,Icon,ToolTip,FontName,FontSize,FontBold,FontUnderline,FontItalic,FontStrikeOut,Caption,Row,DisplayValue,Col,Width,Height,Visible,Enabled,Checked,ItemCount,RangeMin,RangeMax,Cargo,Tabstop> => GetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> ) #xtranslate This . <c> . <p:Value,Name,Address,BackColor,FontColor,Picture,Icon,ToolTip,FontName,FontSize,FontBold,FontUnderline,FontItalic,FontStrikeOut,Caption,Row,DisplayValue,Col,Width,Height,Visible,Enabled,Checked,ItemCount,RangeMin,RangeMax,Cargo,Tabstop> := <n> => SetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> , <n> ) #xtranslate This . <c> . <p:ListWidth,Position,CaretPos,ForeColor,AllowAppend,AllowDelete,AllowEdit,InputItems,DisplayItems,FormatString,Indent,Linecolor,ItemHeight,AutoFont,RichValue> => GetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> ) #xtranslate This . <c> . <p:ListWidth,Position,CaretPos,ForeColor,AllowAppend,AllowDelete,AllowEdit,Blink,InputItems,DisplayItems,FormatString,Indent,Linecolor,ItemHeight,AutoFont,RichValue> := <n> => SetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> , <n> ) #xtranslate This . <c> . <p:Caption,Header,Image,Item,Icon,ToolTip,Width,ColumnWidth,Enabled,RichValue,HeaderImage,CheckboxItem> (<arg>) => GetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> , <arg> ) #xtranslate This . <c> . <p:Velocity> := <n> => SetProperty ( _HMG_THISFORMNAME, <"c"> , "Velocity" , <n> ) #xtranslate This . <c> . <p:Caption,Header,Image,Item,Icon,ToolTip,Width,ColumnWidth,Enabled,RichValue,CheckboxItem> (<arg>) := <n> => SetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> , <arg> , <n> ) #xtranslate This . <c> . <p:Cell> (<arg1> , <arg2>) => GetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> , <arg1> , <arg2> ) #xtranslate This . <c> . <p:Cell> (<arg1> , <arg2>) := <n> => SetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> , <arg1> , <arg2> , <n> ) #xtranslate This . <c> . <p:HeaderImage> (<arg1>) := <arg2> => SetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> , <arg1> , <arg2> ) #xtranslate This . <c> . <p:HeaderImage> (<arg1>) := {<arg2> , <arg3>} => SetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> , <arg1> , <arg2> , <arg3> ) #xtranslate This . <c> . <p:EnableUpdate,DisableUpdate,Refresh,SetFocus,DeleteAllItems,Release,Show,Save,Hide,Play,Stop,Close,Pause,Eject,OpenDialog,Resume,Action,OnClick,OnGotFocus,OnLostFocus,OnChange,OnDblClick,ColumnsAutoFit,ColumnsAutoFitH> \[()\] => Domethod ( _HMG_THISFORMNAME, <"c"> , <"p"> ) #xtranslate This . <c> . <p:AddItem,DeleteItem,Open,DeletePage,DeleteColumn,Expand,Collapse,Seek,ColumnAutoFit,ColumnAutoFitH> (<a>) => Domethod ( _HMG_THISFORMNAME, <"c"> , <"p"> , <a> ) #xtranslate This . <c> . <p:AddItem,AddPage> (<a1> , <a2>) => Domethod ( _HMG_THISFORMNAME, <"c"> , <"p"> , <a1> , <a2> ) #xtranslate This . <c> . <p:AddItem,AddPage> (<a1> , <a2> , <a3> ) => Domethod ( _HMG_THISFORMNAME, <"c"> , <"p"> , <a1> , <a2> , <a3> ) #xtranslate This . <c> . <p:AddItem,AddColumn,AddControl,AddPage> (<a1> , <a2> , <a3> , <a4> ) => Domethod ( _HMG_THISFORMNAME, <"c"> , <"p"> , <a1> , <a2> , <a3> , <a4> ) #xtranslate This . <c> . <p:ReadOnly,DisableEdit,Length> => GetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> ) #xtranslate This . <c> . <p:ReadOnly,DisableEdit,Speed,Volume,Zoom,Action,OnClick,OnGotFocus,OnLostFocus,OnChange,OnDblClick> := <n> => SetProperty ( _HMG_THISFORMNAME, <"c"> , <"p"> , <n> ) #xtranslate This . <x> . <c> . <p:Caption,Enabled,Value> => GetProperty ( _HMG_THISFORMNAME , <"x"> , <"c"> , <"p"> ) #xtranslate This . <x> . <c> . <p:Caption,Enabled,Value> := <n> => SetProperty ( _HMG_THISFORMNAME , <"x"> , <"c"> , <"p"> , <n> ) #xtranslate This . <x> (<k>) . <c> . <p:Value,Name,Address,BackColor,FontColor,Picture,ToolTip,FontName,FontSize,FontBold,FontItalic,FontUnderline,FontStrikeOut,Caption,Row,DisplayValue,Col,Width,Height,Visible,Enabled,Checked,ItemCount,RangeMin,RangeMax,Cargo> => GetProperty ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> ) #xtranslate This . <x> (<k>) . <c> . <p:Value,Name,Address,BackColor,FontColor,Picture,ToolTip,FontName,FontSize,FontBold,FontItalic,FontUnderline,FontStrikeOut,Caption,Row,DisplayValue,Col,Width,Height,Visible,Enabled,Checked,ItemCount,RangeMin,RangeMax,Cargo> := <n> => SetProperty ( _HMG_THISFORMNAME , <"x"> , <k> , <"c"> , <"p"> , <n> ) #xtranslate This . <x> (<k>) . <c> . <p:ListWidth,Position,CaretPos,ForeColor,RichValue> => GetProperty ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> ) #xtranslate This . <x> (<k>) . <c> . <p:ListWidth,Position,CaretPos,ForeColor,RichValue> := <n> => SetProperty ( _HMG_THISFORMNAME , <"x"> , <k> , <"c"> , <"p"> , <n> ) #xtranslate This . <x> (<k>) . <c> . <p:Caption,Header,Item,Icon,RichValue,CheckboxItem> (<arg>) => GetProperty ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> , <arg> ) #xtranslate This . <x> (<k>) . <c> . <p:Caption,Header,Item,Icon,RichValue,CheckboxItem> (<arg>) := <n> => SetProperty ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> , <arg> , <n> ) #xtranslate This . <x> (<k>) . <c> . <p:Refresh,SetFocus,DeleteAllItems,Release,Show,Save,Hide,Play,Stop,Close,Pause,Eject,OpenDialog,Resume,Action,OnClick,OnGotFocus,OnLostFocus,OnChange,OnDblClick> \[()\] => Domethod ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> ) #xtranslate This . <x> (<k>) . <c> . <p:AddItem,DeleteItem,Open,DeletePage,DeleteColumn,Expand,Collapse,Seek> (<a>) => Domethod ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> , <a> ) #xtranslate This . <x> (<k>) . <c> . <p:AddItem,AddPage> (<a1> , <a2>) => Domethod ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> , <a1> , <a2> ) #xtranslate This . <x> (<k>) . <c> . <p:AddItem,AddPage> (<a1> , <a2> , <a3> ) => Domethod ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> , <a1> , <a2> , <a3> ) #xtranslate This . <x> (<k>) . <c> . <p:AddItem,AddColumn,AddControl,AddPage> (<a1> , <a2> , <a3> , <a4> ) => Domethod ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> , <a1> , <a2> , <a3> , <a4> ) #xtranslate This . <x> (<k>) . <c> . <p:Length> => GetProperty ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> ) #xtranslate This . <x> (<k>) . <c> . <p:ReadOnly,DisableEdit,Speed,Volume,Zoom> := <n> => SetProperty ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> , <n> ) #xtranslate This . <x> (<k>) . <c> . <p:Cell> (<arg1> , <arg2>) => GetProperty ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> , <arg1> , <arg2> ) #xtranslate This . <x> (<k>) . <c> . <p:Cell> (<arg1> , <arg2>) := <n> => SetProperty ( _HMG_THISFORMNAME, <"x"> , <k> , <"c"> , <"p"> , <arg1> , <arg2> , <n> ) #xtranslate This . SplitBox . <c> . <p:Value,Name,Address,BackColor,FontColor,Picture,ToolTip,FontName,FontSize,FontBold,FontItalic,FontUnderline,FontStrikeOut,Caption,Row,DisplayValue,Col,Width,Height,Visible,Enabled,Checked,ItemCount,RangeMin,RangeMax,Position,CaretPos,ForeColor,AllowEdit,Object,InputItems,DisplayItems,Cargo> => GetProperty ( _HMG_THISFORMNAME, "SplitBox" , <"c"> , <"p"> ) #xtranslate This . SplitBox . <c> . <p:Value,Name,Address,BackColor,FontColor,Picture,ToolTip,FontName,FontSize,FontBold,FontItalic,FontUnderline,FontStrikeOut,Caption,Row,DisplayValue,Col,Width,Height,Visible,Enabled,Checked,ItemCount,RangeMin,RangeMax,Position,CaretPos,ForeColor,AllowEdit,Blink,InputItems,DisplayItems,Cargo> := <n> => SetProperty ( _HMG_THISFORMNAME, "SplitBox" , <"c"> , <"p"> , <n> ) #xtranslate This . SplitBox . <c> . <p:AllowAppend,AllowDelete,DisableEdit,ReadOnly> => GetProperty ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> ) #xtranslate This . SplitBox . <c> . <p:AllowAppend,AllowDelete,DisableEdit,ReadOnly> := <n> => SetProperty ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> , <n> ) #xtranslate This . SplitBox . <c> . <p:Caption,Header,Item,Icon,HeaderImages,CheckboxItem> (<arg>) => GetProperty ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> , <arg> ) #xtranslate This . SplitBox . <c> . <p:Caption,Header,Item,Icon,HeaderImages,CheckboxItem> (<arg>) := <n> => SetProperty ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> , <arg> , <n> ) #xtranslate This . SplitBox . <c> . <p:Cell> (<arg1> , <arg2>) => GetProperty ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> , <arg1> , <arg2> ) #xtranslate This . SplitBox . <c> . <p:Cell> (<arg1> , <arg2>) := <n> => SetProperty ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> , <arg1> , <arg2> , <n> ) #xtranslate This . SplitBox . <c> . <p:Refresh,SetFocus,DeleteAllItems,Release,Show,Save,Hide,Play,Stop,Close,Pause,Eject,OpenDialog,Resume,Action,OnClick,OnGotFocus,OnLostFocus,OnChange,OnDblClick> \[()\] => Domethod ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> ) #xtranslate This . SplitBox . <c> . <p:AddItem,DeleteItem,Open,DeletePage,DeleteColumn,Expand,Collapse,Seek> (<a>) => Domethod ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> , <a> ) #xtranslate This . SplitBox . <c> . <p:AddItem,AddPage> (<a1> , <a2>) => Domethod ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> , <a1> , <a2> ) #xtranslate This . SplitBox . <c> . <p:AddItem,AddPage> (<a1> , <a2> , <a3> ) => Domethod ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> , <a1> , <a2> , <a3> ) #xtranslate This . SplitBox . <c> . <p:AddItem,AddColumn,AddControl,AddPage> (<a1> , <a2> , <a3> , <a4> ) => Domethod ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> , <a1> , <a2> , <a3> , <a4> ) #xtranslate This . SplitBox . <c> . <p:Name,Length> => GetProperty ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> ) #xtranslate This . SplitBox . <c> . <p:ReadOnly,DisableEdit,Speed,Volume,Zoom> := <n> => SetProperty ( _HMG_THISFORMNAME, "SplitBox", <"c"> , <"p"> , <n> ) #xtranslate This . SplitBox . <x> . <c> . <p:Caption,Enabled,Value> => GetProperty ( _HMG_THISFORMNAME , "SplitBox" , <"x"> , <"c"> , <"p"> ) #xtranslate This . SplitBox . <x> . <c> . <p:Caption,Enabled,Value> := <n> => SetProperty ( _HMG_THISFORMNAME , "SplitBox", <"x"> , <"c"> , <"p"> , <n> ) // EVENT PROCEDURES ...
| Для команд выделенных цветом использовал доп. функции ( назвал так, что бы не пересечься с похожими ) FUNCTION GetCliWidth ( nHandle ) LOCAL aRect := {0,0,0,0} GetClientRect( nHandle, aRect ) RETURN ( aRect[3] - aRect[1] ) FUNCTION GetCliHeight( nHandle ) LOCAL aRect := {0,0,0,0} GetClientRect( nHandle, aRect ) RETURN ( aRect[4] - aRect[2] ) Если ф-ии лишнии, то надо убрать выделенные цветом команды. Использовать как обычно This.Width , This.Height , This.Handle , This.Index This.Btn.Width, This.Btn.Height, This.Btn.Handle , This.Btn.Index This.ClientWidth, This.ClientHeight This.Btn.ClientWidth, This.Btn.ClientHeight Все варианты написания не проверял (может совместными усилиями ?)
| |
|
gfilatov2002
|
| moderator
|
Пост N: 969
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.08.16 11:31. Заголовок: SergKis пишет: Для ..
SergKis пишет: цитата: | Для команд выделенных цветом использовал доп. функции |
| Благодарю за дополнение команды This P.S. Заменил доп. функции на одну уже существующую в коде библиотеки функцию _GetClientRect()
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1123
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.08.16 12:53. Заголовок: gfilatov2002 Еще к ..
gfilatov2002 Еще к командам ООП Скрытый текст
i_window.ch ======== ... #ifdef _SOOP_CONTAINERS_ ... #xcommand DECLARE WINDOW <w> ; =>; #xtranslate <w> . \<p:Handle\> => GetFormHandle ( <"w"> ) ;; #xtranslate <w> . \<p:Index\> => GetFormIndex ( <"w"> ) ;; #xtranslate <w> . \<p:Name,Title,Height,Width,Col,Row,NotifyIcon,NotifyToolTip,FocusedControl,BackColor,MinHeight,MinWidth,MaxHeight,MaxWidth,TitleBar,SysMenu,Sizable,MaxButton,MinButton,Topmost,HelpButton\> => GetProperty ( <"w">, \<"p"\> ) ;; ... #xtranslate <w> . \<p:SaveAs\> (\<a\>) => DoMethod ( <"w"> , "SaveAs", \<a\> ) ;; #xtranslate <w> . \<p:ClientHeight\> => GetCliHeight( GetFormHandle ( <"w"> ) ) ;; #xtranslate <w> . \<p:ClientWidth\> => GetCliWidth ( GetFormHandle ( <"w"> ) ) ;; #xtranslate <w> . \<c\> . \<p:SaveAs\> (\<a\>) => DoMethod ( <"w"> , \<"c"\> , "SaveAs", \<a\> ) ;; #xtranslate <w> . \<c\> . \<p:Handle\> => GetControlHandle ( \<"c"\> , <"w"> ) ;; #xtranslate <w> . \<c\> . \<p:Index\> => GetControlIndex ( \<"c"\> , <"w"> ) ;; #xtranslate <w> . \<c\> . \<p:ClientHeight\> => GetCliHeight( GetControlHandle ( \<"c"\> , <"w"> ) ) ;; #xtranslate <w> . \<c\> . \<p:ClientWidth\> => GetCliWidth ( GetControlHandle ( \<"c"\> , <"w"> ) ) ;; #xtranslate <w> . \<c\> . \<p:Value,Name,Address,BackColor,FontColor,Picture,Icon,ToolTip,FontName,FontSize,FontBold,FontUnderline,FontItalic,FontStrikeOut,Caption,Row,DisplayValue,Col,Width,Height,Visible,Enabled,Checked,ItemCount,RangeMin,RangeMax,Cargo,Tabstop\> => GetProperty ( <"w">, \<"c"\> , \<"p"\> ) ;; ... #else #xcommand DECLARE WINDOW <w> ; =>; #xtranslate <w> . \<p:Handle\> => GetFormHandle ( <"w"> ) ;; #xtranslate <w> . \<p:Index\> => GetFormIndex ( <"w"> ) ;; #xtranslate <w> . \<p:Name,Title,Height,Width,Col,Row,NotifyIcon,NotifyToolTip,FocusedControl,BackColor,MinHeight,MinWidth,MaxHeight,MaxWidth,TitleBar,SysMenu,Sizable,MaxButton,MinButton,Topmost,HelpButton\> => GetProperty ( <"w">, \<"p"\> ) ;; ... #xtranslate <w> . \<p:SaveAs\> (\<a\>) => DoMethod ( <"w"> , "SaveAs", \<a\> ) ;; #xtranslate <w> . \<p:ClientHeight\> => GetCliHeight( GetFormHandle ( <"w"> ) ) ;; #xtranslate <w> . \<p:ClientWidth\> => GetCliWidth ( GetFormHandle ( <"w"> ) ) ;; #xtranslate <w> . \<c\> . \<p:SaveAs\> (\<a\>) => DoMethod ( <"w"> , \<"c"\> , "SaveAs", \<a\> ) ;; #xtranslate <w> . \<c\> . \<p:Handle\> => GetControlHandle ( \<"c"\> , <"w"> ) ;; #xtranslate <w> . \<c\> . \<p:Index\> => GetControlIndex ( \<"c"\> , <"w"> ) ;; #xtranslate <w> . \<c\> . \<p:ClientHeight\> => GetCliHeight( GetControlHandle ( \<"c"\> , <"w"> ) ) ;; #xtranslate <w> . \<c\> . \<p:ClientWidth\> => GetCliWidth ( GetControlHandle ( \<"c"\> , <"w"> ) ) ;; #xtranslate <w> . \<c\> . \<p:Value,Name,Address,BackColor,FontColor,Picture,Icon,ToolTip,FontName,FontSize,FontBold,FontUnderline,FontItalic,FontStrikeOut,Caption,Row,DisplayValue,Col,Width,Height,Visible,Enabled,Checked,ItemCount,RangeMin,RangeMax,Cargo,Tabstop\> => GetProperty ( <"w">, \<"c"\> , \<"p"\> ) ;; ... #endif ... i_pseudofunc.ch ========== ... #translate Application.Height := <arg> => MoveWindow ( Application.Handle , Application.Col , Application.Row , Application.Width , <arg> , .t. ) #translate Application.ClientWidth => GetCliWidth ( Application.Handle ) #translate Application.ClientHeight => GetCliHeight( Application.Handle ) #translate Application.Title => GetWindowText ( Application.Handle ) ... Лень все время писать Application..... сделал себе вариант App.... #translate App.ExeName => GetExeFileName() #translate App.Handle => _HMG_MainHandle #translate App.FormName => _HMG_aFormNames \[ _HMG_MainIndex \] #translate App.Col => GetWindowCol ( App.Handle ) #translate App.Col := <arg> => MoveWindow ( App.Handle , <arg> , App.Row , App.Width , App.Height , .t. ) #translate App.Row => GetWindowRow ( App.Handle ) #translate App.Row := <arg> => MoveWindow ( App.Handle , App.Col , <arg> , App.Width , App.Height , .t. ) #translate App.Width => GetWindowWidth ( App.Handle ) #translate App.Width := <arg> => MoveWindow ( App.Handle , App.Col , App.Row , <arg> , App.Height , .t. ) #translate App.ClientWidth => GetCliWidth ( App.Handle ) #translate App.ClientHeight => GetCliHeight ( App.Handle ) #translate App.Height => GetWindowHeight ( App.Handle ) #translate App.Height := <arg> => MoveWindow ( App.Handle , App.Col , App.Row , App.Width , <arg> , .t. ) #translate App.Title => GetWindowText ( App.Handle ) #translate App.Title := <arg> => SetWindowText ( App.Handle, <arg> ) #translate App.Cursor := <arg> => SetWindowCursor ( App.Handle, <arg> ) #translate App.BackColor => _HMG_aFormBkColor \[ _HMG_MainIndex \] #translate App.BackColor := <arg> => _SetWindowBackColor ( App.Handle, <arg> ) #translate App.Topmost => GetProperty ( App.FormName, 'Topmost' ) #translate App.Topmost := <arg> => _ChangeWindowTopmostStyle ( App.Handle, <arg> ) #translate App.HelpButton => GetProperty ( App.FormName, 'HelpButton' ) #translate App.HelpButton := <arg> => _ChangeWindowHelpButtonStyle ( App.FormName, <arg> ) ...
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5032
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.08.16 13:48. Заголовок: SergKis пишет: Испо..
SergKis пишет: цитата: | Использовать как обычно This.Width , This.Height , This.Handle , This.Index |
| Т.е. вместо nFWidth := GetClientWidth( GetFormHandle( _HMG_ThisFormName ) ) nFHeight := GetClientHeight( GetFormHandle( _HMG_ThisFormName ) ) можно будет писать так: nFWidth := This.Width nFHeight := This.Height
| |
|
Dima
|
| |
Пост N: 5938
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.08.16 13:58. Заголовок: Andrey пишет: This...
Andrey пишет: This.ClientWidth
| |
|
gfilatov2002
|
| moderator
|
Пост N: 970
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.08.16 14:41. Заголовок: SergKis пишет: Еще ..
SergKis пишет: Благодарю Добавил эти модификации также...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1124
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.08.16 23:07. Заголовок: Andrey пишет можно б..
Andrey пишет цитата: | можно будет писать так: nFWidth := This.Width nFHeight := This.Height |
| пример использования DEFINE WINDOW wndCalc AT 0,0 ; ... nWidth := This.ClientWidth - x * 2 ... @ y, x LABEL Itog VALUE "" ; ... y += This.Itog.Height + n ... For i := 1 To len(a) If ! empty(a[ i ]) j := "Btn"+a[ i ][1] DEFINE BUTTONEX &j ... ACTION PostMsg() END BUTTONEX This.&(j).Cargo := a[ i ][2] EndIf ... nW := This.ClientWidth - int(n * 0.6) nH := y DRAW RECTANGLE IN WINDOW &( This.Name ) AT nY, nX TO nH, nW ; PENCOLOR BLUE END WINDOW ... STATIC FUNCTION PostMsg( nKey, lFocus ) LOCAL c, j := This.Name Default lFocus := .T. If j != ThisWindow.Name // это контрол не окно c := This.&(j).Cargo If c == "." ; nKey := 190 Elseif c == "C" ; nKey := 32 ElseIf c $ "0123456789"; nKey := 48 + val(c) EndIf EndIf If ! empty(nKey) PostMessage( ThisWindow.Handle, WM_KEYDOWN, nKey, 0) EndIf If lFocus This.Itog.SetFocus EndIf RETURN Nil
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1125
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.08.16 09:20. Заголовок: gfilatov2002 Еще не..
gfilatov2002 Еще немного ООП строк Скрытый текст
i_this.ch ========= ... // WINDOWS (THISWINDOW) #xtranslate ThisWindow . <p:Type> => GetWindowType ( _HMG_THISFORMNAME ) #xtranslate ThisWindow . <p:Handle> => GetFormHandle ( _HMG_THISFORMNAME ) ... // COMMON ( REQUIRES TYPE CHECK ) ... #xtranslate This . <p:Type> => iif ( _HMG_THISType == 'C' , GetControlType ( _HMG_THISCONTROLNAME , _HMG_THISFORMNAME ) , GetWindowType ( _HMG_THISFORMNAME ) ) #xtranslate This . <p:Handle> => iif ( _HMG_THISType == 'C' , GetControlHandle ( _HMG_THISCONTROLNAME , _HMG_THISFORMNAME ) , GetFormHandle ( _HMG_THISFORMNAME ) ) ... #xtranslate This . <c> . <p:Type> => GetControlType ( _HMG_THISCONTROLNAME , _HMG_THISFORMNAME ) #xtranslate This . <c> . <p:Handle> => GetControlHandle ( <"c"> , _HMG_THISFORMNAME ) ... i_window.ch =========== #ifdef _SOOP_CONTAINERS_ ... #xcommand DECLARE WINDOW <w> ; =>; #xtranslate <w> . \<p:Type\> => GetWindowType ( <"w"> ) ;; #xtranslate <w> . \<p:Handle\> => GetFormHandle ( <"w"> ) ;; ... #xtranslate <w> . \<c\> . \<p:Type\> => GetControlType ( \<"c"\> , <"w"> ) ;; #xtranslate <w> . \<c\> . \<p:Handle\> => GetControlHandle ( \<"c"\> , <"w"> ) ;; ... #else #xcommand DECLARE WINDOW <w> ; =>; #xtranslate <w> . \<p:Type\> => GetWindowType ( <"w"> ) ;; #xtranslate <w> . \<p:Handle\> => GetFormHandle ( <"w"> ) ;; ... #xtranslate <w> . \<c\> . \<p:Type\> => GetControlType ( \<"c"\> , <"w"> ) ;; #xtranslate <w> . \<c\> . \<p:Handle\> => GetControlHandle ( \<"c"\> , <"w"> ) ;; ... #endif ... i_pseudofunc.ch =============== ... //////////////////////////////////////////// // System pseudo-commands //////////////////////////////////////////// #translate Desktop.Col => GetDesktopRealLeft() #translate Desktop.Row => GetDesktopRealTop() #translate Desktop.Width => GetDesktopRealWidth() #translate Desktop.Height => GetDesktopRealHeight() #translate System.Clipboard => RetrieveTextFromClipboard() ...
|
| |
|
gfilatov2002
|
| moderator
|
Пост N: 971
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.08.16 11:43. Заголовок: SergKis пишет: #xtr..
SergKis пишет: цитата: | #xtranslate This . <p:Type> |
| Благодарю за дополнение - добавил SergKis пишет: цитата: | #translate Desktop.Col => GetDesktopRealLeft() #translate Desktop.Row => GetDesktopRealTop() #translate Desktop.Width => GetDesktopRealWidth() #translate Desktop.Height => GetDesktopRealHeight() |
| Не стал добавлять, поскольку эти функции не входят в библиотеку (они взяты из примеров). Кстати, завершена подготовка очередной сборки 16.08, которая выйдет на следующей неделе. Список изменений см. ниже Скрытый текст
* Fixed: Missing NOBORDER clause handling in a GetBox control at the alternative syntax. Problem was reported by Dusko Radojcin. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Changed: ANIMATERES User Component was moved from the samples to MiniGUI core. This control opens and displays continuously an AVI clip from a resource in a specified module. Note: You can only use silent AVI clips. Syntax: @ <row>,<col> ANIMATERES <name> [ OF <parent> ] ; [ WIDTH <nWidth> ] [ HEIGHT <nHeight> ] ; FILE <DLL or EXE filename> ID <resource> [ TOOLTIP <tooltip> ] Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\AVI_Animation) * Changed: The ON CANCEL action in the ComboBox control will fire only if a last pressed key was <Escape> key. It indicates the user's initial selection is to be ignored. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Enhanced: Added the readonly 'Index', 'Type', 'ClientWidth' and 'ClientHeight' properties to 'This' object reference. Common syntax: Control_idx := This.Index, Form_idx := This.Index etc. Windows only syntax: Form_idx := ThisWindow.Index Based upon a contribution of Russian user SergKis (see demo in folder \samples\Basic\GetClientSize) * Enhanced: Added a shorten form 'App' for the 'Application' object. Examples: App.ExeName, App.Handle, App.FormName etc. Suggested by SergKis. * Enhanced: The function PutFile() supports an optional 7-th parameter to control the overwriting if a file already exists. Syntax: PutFile( aFilter, title, cIniFolder, lNoChangeCurDir, cDefFileName,; /*@*/ nFilterIndex, lPromptOverwrite ) If <lPromptOverwrite> set to .T. (default is .F.) and a file already exists, user will be asked to overwrite it or not. Contributed by Pete Dionysopoulos <pete_westg@yahoo.gr> (see demo2.prg in folder \samples\Basic\PutFile) * Updated: Synchronized Extended HMG for compatibility with Official HMG: * Added MiniPrint2 library with the following modifications: - Enhanced look and feel of Print Preview; - Enhanced quality of images of ThumbNails in printer preview; - Changed cursor behavior in Print Preview window: Zoom and Glass Cursor only into page to print. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see source in folder \Source\MiniPrint2) (see demo in folder \samples\Advanced\MiniPrint2) * Updated: Header file i_hmgcompat.ch for compatibility with Official HMG: - added the following commands: SET CONTROL <ControlName> OF <FormName> ; CLIENTEDGE | STATICEDGE | WINDOWEDGE | NOTEDGE Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: C-code cleaning for correct compiling with the Embarcadero BCC 10.1: - added missing casting for C++ mode into the MiniGUI core, CallDll, HbPrinter and MiniPrint libraries. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - fixed a tooltip handle assigning error at Windows Server 2008. Problem was reported by Dusko Radojcin. - fixed a wrong workaround (introduced in the build 16.07). Bug was reported by Jaroslaw Kadziola <kadziola@tlen.pl> * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.14.0dev. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2016-07-18 20:32). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'DO REPORT command with a simple formatting' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\DO_REPORT) * New: 'ActiveX Report Generator' sample. Based upon a freeware CatchysoftReport.Dll from the following URL: http://www.catchysoft.com/report_generator.html. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\ActiveX_Report) * New: 'Run the executable file from an application resource' console sample. Based upon a contribution at Harbour developer forum. (see in folder \samples\Advanced\RCDataToFile) * Updated: 'HMG Cursor' sample: - added the function PutMouse(). Contributed by Pierpaolo Martinello <pier.martinello[at]alice.it> (see in folder \samples\Basic\CURSOR) * Updated: 'TSBrowse Incremental Seek With Footer's GetBox' sample: - fixed using of "hole" detection. Problem was reported by russian user. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\Tsb_seek_2)
| И напоследок - небольшой запрос Требуется помощь в портировании winapi-функции TaskDialogIndirect в среду Харбор/Минигуи. Петр, возьметесь
| |
|
Петр
|
| постоянный участник
|
Пост N: 1226
Зарегистрирован: 09.10.06
|
|
Отправлено: 03.08.16 11:54. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Требуется помощь в портировании winapi-функции TaskDialogIndirect в среду Харбор/Минигуи. Петр, возьметесь |
| Вечером посмотрю, чем могу помочь
| |
|
gfilatov2002
|
| moderator
|
Пост N: 972
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.08.16 12:53. Заголовок: Петр пишет: посмотр..
Петр пишет: цитата: | посмотрю, чем могу помочь |
| Заранее благодарен В принципе, вызов этой функции на Си выглядит несложно: HRESULT hr; TASKDIALOGCONFIG tdc = { sizeof(TASKDIALOGCONFIG) }; int nClickedBtn; BOOL bCheckboxChecked; TASKDIALOG_BUTTON aCustomButtons[] = { { 1000, MAKEINTRESOURCE(IDS_DOWNLOAD_BTN_TEXT) }, { 1001, MAKEINTRESOURCE(IDS_DONT_DOWNLOAD_BTN_TEXT) } }; tdc.hwndParent = m_hWnd; tdc.hInstance = _AtlBaseModule.GetResourceInstance(); tdc.dwFlags = TDF_USE_COMMAND_LINKS|TDF_ENABLE_HYPERLINKS; tdc.pButtons = aCustomButtons; tdc.cButtons = _countof(aCustomButtons); tdc.pszWindowTitle = MAKEINTRESOURCE(IDS_TASKDLG_TITLE); tdc.pszMainIcon = MAKEINTRESOURCE(IDI_MY_TD_ICON); tdc.pszMainInstruction = MAKEINTRESOURCE(IDS_TASKDLG_HEADER); tdc.nDefaultButton = 1001; tdc.pszExpandedInformation = MAKEINTRESOURCE(IDS_TASKDLG_EXTRA_INFO); tdc.pszVerificationText = MAKEINTRESOURCE(IDS_TASKDLG_CHKBOX_TEXT); tdc.pszFooter = MAKEINTRESOURCE(IDS_TASKDLG_FOOTER); tdc.pszFooterIcon = TD_INFORMATION_ICON; tdc.pfCallback = TDCallback; tdc.lpCallbackData = (LONG_PTR) this; // not used, but I'm setting this for demonstration purposes hr = TaskDialogIndirect ( &tdc, &nClickedBtn, NULL, &bCheckboxChecked ); Вопрос в том, как это оформить для удобного использования в Харборе (с учетом вызова Callback-функции и использования ресурсных строк)
| |
|
Петр
|
| постоянный участник
|
Пост N: 1227
Зарегистрирован: 09.10.06
|
|
Отправлено: 03.08.16 22:38. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Вопрос в том, как это оформить для удобного использования в Харборе (с учетом вызова Callback-функции и использования ресурсных строк) |
| Вот так пойдет? TaskDialogIndirect( aConfig, @nButton, @nRadioButton, @lVerificationFlagChecked ) Шаблон демо Скрытый текст
цитата: | #include "tdi.ch" PROCEDURE TDI_Demo() LOCAL aConfig, nButton, nRadioButton, lVerificationFlagChecked := .f. LOCAL nResult aConfig := Array( TDC_CONFIG ) /* 2. TDC_HWND - handle to the parent window. This member can be NIL. */ aConfig[TDC_HWND] := ThisWindow.Handle /* 3. TDC_HINSTANCE - handle to the module that contains the icon resource identified by the pszMainIcon or pszFooterIcon members, and the string resources identified by the pszWindowTitle, pszMainInstruction, pszContent, pszVerificationText, pszExpandedInformation, pszExpandedControlText, pszCollapsedControlText or pszFooter members. */ aConfig[TDC_HINSTANCE] := GetInstance() /* 4. TDC_TASKDIALOG_FLAGS - Specifies the behavior of the task dialog. This parameter can be a combination of flags. */ aConfig[TDC_TASKDIALOG_FLAGS] := hb_bitOr( TDF_USE_COMMAND_LINKS, TDF_ENABLE_HYPERLINKS ) /* 6. TDC_WINDOWTITLE - the string to be used for the task dialog title. This parameter can be either a string or an integer resource identifier passed to the MAKEINTRESOURCE macro. If this parameter is NIL, the filename of the executable program is used */ aConfig[TDC_WINDOWTITLE] := "Window Title" /* 8. TDC_MAININSTRUCTION - the string to be used for the main instruction. This parameter can be either a string or an integer resource identifier passed to the MAKEINTRESOURCE macro */ aConfig[TDC_MAININSTRUCTION] := "Main Instruction" /* 9. TDC_CONTENT - the string to be used for the dialog's primary content. This parameter can be either a string or an integer resource identifier passed to the MAKEINTRESOURCE macro. If the ENABLE_HYPERLINKS flag is specified for the TDC_DWFLAGS, then this string may contain hyperlinks in the form: <A HREF="executablestring">Hyperlink Text</A>. */ aConfig[TDC_CONTENT] := "Content" /* 16. TDC_VERIFICATIONTEXT - the string to be used to label the verification checkbox. This parameter can be either a string or an integer resource identifier passed to the MAKEINTRESOURCE macro. If this parameter is NIL, the verification checkbox is not displayed in the task dialog. If the lVerificationFlagChecked parameter of TaskDialogIndirect is NIL, the checkbox is not enabled. */ aConfig[TDC_VERIFICATIONTEXT] := "Verification Text" /* 17. TDC_EXPANDEDINFORMATION - the string to be used for displaying additional information. This parameter can be either a string or an integer resource identifier passed to the MAKEINTRESOURCE macro. The additional information is displayed either immediately below the content or below the footer text depending on whether the TDF_EXPAND_FOOTER_AREA flag is specified. If the TDF_ENABLE_HYPERLINKS flag is specified for the TDC_DWFLAGS, then this string may contain hyperlinks in the form: <A HREF="executablestring">Hyperlink Text</A>. */ aConfig[TDC_EXPANDEDINFORMATION] := "Expanded Information" /* 18. TDC_EXPANDEDCONTROLTEXT - the string to be used to label the button for collapsing the expandable information. This parameter can be either a string or an integer resource identifier passed to the MAKEINTRESOURCE macro. This member is ignored when the TDC_EXPANDEDINFORMATION member is NIL. If this member is NIL and the TDC_COLLAPSEDCONTROLTEXT is specified, then the TDC_COLLAPSEDCONTROLTEXT value will be used for this member as well. */ aConfig[TDC_EXPANDEDCONTROLTEXT] := "Expanded Control Text" /* 19. TDC_COLLAPSEDCONTROLTEXT - the string to be used to label the button for expanding the expandable information. This parameter can be either a string or an integer resource identifier passed to the MAKEINTRESOURCE macro. This member is ignored when the TDC_EXPANDEDINFORMATION member is NIL. ?? If this member is NIL and the TDC_COLLAPSEDCONTROLTEXT is specified, then the TDC_COLLAPSEDCONTROLTEXT value will be used for this member as well. ?? */ aConfig[TDC_COLLAPSEDCONTROLTEXT] := "Collapsed Control Text" /* 21. TDC_FOOTER - the string to be used in the footer area of the task dialog. This parameter can be either a string or an integer resource identifier passed to the MAKEINTRESOURCE macro. If the TDF_ENABLE_HYPERLINKS flag is specified for the TDC_DWFLAGS, then this string may contain hyperlinks in the form: <A HREF="executablestring">Hyperlink Text</A>. */ aConfig[TDC_FOOTER] := "Footer" /* 22. TDC_CALLBACK */ aConfig[TDC_CALLBACK] := {|h,n,w,l| callback( h,n,w,l )} /* 24. TDC_WIDTH - the width of the task dialog's client area, in dialog units. If 0, the task dialog manager will calculate the ideal width. */ aConfig[TDC_WIDTH] := 0 nResult := TaskDialogIndirect( aConfig, @nButton, @nRadioButton, @lVerificationFlagChecked ) /* TODO */ RETURN |
|
|
| |
|
Петр
|
| постоянный участник
|
Пост N: 1228
Зарегистрирован: 09.10.06
|
|
Отправлено: 03.08.16 22:40. Заголовок: Шаблон callback функции
Шаблон callback функции Скрытый текст
цитата: | STATIC FUNCTION callback( hWnd, nNotification, wParam, lParam ) LOCAL lResult := .F. /* To prevent the task dialog from closing, the application must return FALSE, otherwise the task dialog is closed */ HB_SYMBOL_UNUSED( hWnd ) HB_SYMBOL_UNUSED( lParam ) SWITCH nNotification CASE TDN_CREATED EXIT CASE TDN_DESTROYED EXIT CASE TDN_BUTTON_CLICKED // wParam - an int that specifies the ID of the button or comand link that was selected IF wParam == ID_OK ... lResult := .T. ELSEIF wParam == ID_CANCEL ... lResult := .T. EXIT CASE TDN_RADIO_BUTTON_CLICKED // wParam - an int that specifies the ID corresponding to the radio button that was clicked ... EXIT CASE TDN_EXPANDO_BUTTON_CLICKED // the user clicks on the dialog's expando button: wParam is 1 if the dialog is expanded, or 0 if not IF wParam == 1 ... ELSE ... EXIT CASE TDN_HELP // the user presses F1 on the keyboard while the dialog has focus ... EXIT CASE TDN_VERIFICATION_CLICKED // the user clicks the task dialog verification check box: wParam is the status of the checkbox. // It is 1 if the verification checkbox is checked, or 0 if it is unchecked. ... EXIT END SWITCH RETURN lResult // .t. or .f., that is the question :) |
|
|
| |
|
Петр
|
| постоянный участник
|
Пост N: 1229
Зарегистрирован: 09.10.06
|
|
Отправлено: 03.08.16 22:47. Заголовок: Если внешний harbour..
Если внешний harbour интерфейс сочтете удобным, то займусь дальшей реализацией С части. Пожелания приветствуются сейчас - не люблю переделывать Наброски (не проверялось компилятором - ошибки конечно присутствуют, но мысль, надеюсь, понятна ) Скрытый текст
цитата: | HRESULT CALLBACK TDCallbackProc( HWND hwnd, UINT uNotification, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData ); HRESULT CALLBACK TDCallbackProc( HWND hwnd, UINT uNotification, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData ) { HRESULT hRes; PHB_ITEM pCallback = ( PHB_ITEM ) dwRefData; if( pCallback && hb_vmRequestReenter() ) { hb_vmPushEvalSym(); hb_vmPush( pCallback ); hb_vmPushNumInt( ( HB_MAXINT ) ( HB_PTRUINT ) hWnd ); hb_vmPushNumInt( ( HB_PTRUINT ) uNotification ); // typecast ?? hb_vmPushNumInt( wParam ); hb_vmPushNumInt( lParam ); hb_vmSend( 4 ); hRes = ( ( hb_parl( -1 ) == HB_TRUE ) ? S_OK : S_FALSE ); hb_vmRequestRestore(); return hRes; } return S_OK; // S_FALSE ?? } |
|
| цитата: | [pre2] /* 16 PCWSTR pszVerificationText */ HB_TYPE hb_typ = hb_arrayGetType( pConfig, TDC_VERIFICATIONTEXT ) if ( ( hb_typ & HB_IT_STRING ) || ( hb_typ & HB_IT_NUMERIC ) ) { tdc.pszVerificationText = ( PCWSTR ) ( ( hb_typ & HB_IT_STRING ) ? hb_arrayGetCPtr( pConfig, TDC_VERIFICATIONTEXT ) : MAKEINTRESOURCE( ( WORD ) hb_arrayGetNL( pConfig, TDC_VERIFICATIONTEXT ) ) ); } else { hb_errRT_BASE_SubstR( EG_ARG, 0, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } |
| цитата: | /* 22 PFTASKDIALOGCALLBACK pfCallback */ tdc.pfCallback = TDCallbackProc; /* 23 LONG_PTR lpCallbackData */ if ( hb_arrayGetType( pConfig, TDC_CALLBACK ) & HB_IT_EVALITEM ) { pCallbackData = hb_itemNew( hb_arrayGetItemPtr( pConfig, TDC_CALLBACK ) ); hb_gcUnlock( pCallbackData ); tdc.lpCallbackData = (LONG_PTR) pCallbackData; } else { hb_errRT_BASE_SubstR( EG_ARG, 0, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } |
| `
| |
|
gfilatov2002
|
| moderator
|
Пост N: 973
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.08.16 10:17. Заголовок: Петр пишет: Пожелан..
Петр пишет: цитата: | Пожелания приветствуются сейчас |
| Шаблон с благодарностью принимается Желательно предусмотреть конвертацию строк в unicode формат, поскольку эта функция работает только в unicode формате. цитата: | hb_Translate( cWindowTitle, cCurrentCdp, "UTF8EX" ) |
| Возможна ли обработка возврата функции типа такого цитата: | IF xRet == NIL xRet := 0x80004005 ENDIF IF ! ( xRet == 0x00000000 ) // 0x00000000 = success cMess := "" IF xRet == 0x8007000E // out of memory cMess := "There is insufficient memory to complete the operation." ELSEIF xRet == 0x80070057 // invalid argument(s) cMess := "One or more arguments are not valid." ELSEIF xRet == 0x80004005 // Unspecified failure cMess := "Operation failed! (unknown reason)." ENDIF MsgExclamation( "Requested Icon : " + hb_ntos( nIcon ) + hb_eol() + ; cMess + hb_eol() + ; "TaskDialog responded : " + hb_ntos( xRet ) + "->" + MGM_GetWinErrorStr( xRet ) + hb_eol() + ; "(non-existent ?) resource ID: " + hb_ntos( nError ) + hb_eol(), "TaskDialog" ) ENDIF |
| Используемые константы для файла-заголовка tdi.ch по типу /* buttons */ #define TDCBF_OK_BUTTON 1 // 0x1 #define TDCBF_YES_BUTTON 2 // 0x2 #define TDCBF_NO_BUTTON 4 // 0x4 #define TDCBF_CANCEL_BUTTON 8 // 0x8 #define TDCBF_RETRY_BUTTON 16 // 0x10 #define TDCBF_CLOSE_BUTTON 32 // 0x20 /* button-click return values */ #define IDOK 1 #define IDCANCEL 2 #define IDABORT 3 #define IDRETRY 4 #define IDIGNORE 5 #define IDYES 6 #define IDNO 7 #define IDCLOSE 8 /* icons */ #define TD_NO_ICON 0 // No icon appears in the task dialog. This is the default. #define TD_WARNING_ICON 65535 // An exclamation-point icon, along with warning sound. #define TD_ERROR_ICON 65534 // A stop-sign icon, along with error sound. #define TD_INFORMATION_ICON 65533 // An icon consisting of a lowercase letter `i` in a circle, along with info sound. #define TD_SHIELD_ICON 65532 // A shield icon. NOTE: All shield icons have no sound! #define TD_SHIELD_BLUE_ICON 65531 // A shield icon on a blue background. #define TD_SHIELD_WARNING_ICON 65530 // An icon consisting of an exclamation-point in a shield. appears in yellow/orange background. #define TD_SHIELD_ERROR_ICON 65529 // An icon consisting of a stop-sign in a shield. appears in red background. #define TD_SHIELD_SUCCESS_ICON 65528 // An icon consisting of a tick-sign in a shield. appears in green background. #define TD_SHIELD_BROWN_ICON 65527 // A shield icon on a brown background. #define TD_QUESTION 99 // An icon consisting of a a question-mark in a circle, no sound!
| |
|
Петр
|
| постоянный участник
|
Пост N: 1230
Зарегистрирован: 09.10.06
|
|
Отправлено: 04.08.16 12:36. Заголовок: nResult := TaskDial..
цитата: | nResult := TaskDialogIndirect( aConfig, @nButton, @nRadioButton, @lVerificationFlagChecked ) /* TODO */ |
| gfilatov2002 пишет: цитата: | Возможна ли обработка возврата функции типа такого |
| Вот на месте TODO и будет такой разбор nResult.
| |
|
Петр
|
| постоянный участник
|
Пост N: 1233
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.08.16 09:06. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Используемые константы для файла-заголовка tdi.ch по типу |
| Спасибо, Григорий, а вот этот фрагмент кода откуда, если не секрет.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 974
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.08.16 11:26. Заголовок: Петр пишет: этот фр..
Петр пишет: цитата: | этот фрагмент кода откуда |
| Этот код взят из реализации функции TaskDialog() из поставки MiniguiM
| |
|
Петр
|
| постоянный участник
|
Пост N: 1235
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.08.16 11:44. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Простите, а что это за поставка такая MiniguiM Просто любопытно.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 975
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.08.16 12:02. Заголовок: Петр пишет: что это..
| |
|
Петр
|
| постоянный участник
|
Пост N: 1236
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.08.16 12:16. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Один умный грек продвигает Minigui Ex на базе компилятора MinGW |
| Спасибо, не знал, посмотрю, но уже после завершения работы над TaskDialogIndirect Т.е. уже скоро.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5038
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.08.16 12:19. Заголовок: Григорий, посмотри п..
Григорий, посмотри пожалуйста Пост N: 5034 и Пост N: 1126
| |
|
gfilatov2002
|
| moderator
|
Пост N: 976
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.08.16 13:02. Заголовок: Andrey Любые дополн..
Andrey Любые дополнения - уже не в этой сборке (работа над ней завершена)
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5040
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.08.16 14:39. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Любые дополнения - уже не в этой сборке |
| Да мы не торопимся... Лишь бы потом было !
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1139
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.08.16 14:11. Заголовок: gfilatov2002 Мелочь..
gfilatov2002 Мелочь (просто короче писать), но потом забуду (i_pseudofunc.ch) #translate System.WindowsFolder => GetWindowsFolder() #translate Folder.Desktop => GetDesktopFolder() #translate Folder.MyDocuments => GetMyDocumentsFolder() #translate Folder.ProgramFiles => GetProgramFilesFolder() #translate Folder.System => GetSystemFolder() #translate Folder.Temp => GetTempFolder() #translate Folder.Windows => GetWindowsFolder()
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1146
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.08.16 17:52. Заголовок: gfilatov2002 Понял,..
gfilatov2002 Понял, почему валится на child окне конструкция DEFINE WINDOW wChild1 ... CHILD ; ... nW := This.Width - GetBorderWidth()*2 - 2 тип окна child C, т.е. _HMG_ThisType равно C FUNCTION _SetThisFormInfo ( i ) *-----------------------------------------------------------------------------* #ifdef _HMG_COMPAT_ _HMG_LastActiveFormIndex := i #endif _PushEventInfo() _HMG_ThisFormIndex := i _HMG_ThisEventType := 'DEFINE_WINDOW' _HMG_ThisType := _HMG_aFormType [ _HMG_ThisFormIndex ] _HMG_ThisIndex := i _HMG_ThisFormName := _HMG_aFormNames [ _HMG_ThisFormIndex ] _HMG_ThisControlName := "" RETURN NIL в i_this.ch везде проверяется iif ( _HMG_THISType == 'C' , GetControlHandle (...) , GetFormHandle (...) ) и путается с контролом в PROCEDURE _ProcessInitProcedure( i ) ... _HMG_ThisType := 'W' ... надо и в _SetThisFormInfo ( i ) тоже поставить _HMG_ThisType := 'W'
| |
|
gfilatov2002
|
| moderator
|
Пост N: 977
Зарегистрирован: 11.02.10
|
|
Отправлено: 07.08.16 19:32. Заголовок: SergKis пишет: надо..
SergKis пишет: цитата: | надо и в _SetThisFormInfo ( i ) тоже поставить _HMG_ThisType := 'W' |
| Благодарю за помощь Вы абсолютно правы! Поправлю ...
| |
|
Петр
|
| постоянный участник
|
Пост N: 1237
Зарегистрирован: 09.10.06
|
|
Отправлено: 07.08.16 23:26. Заголовок: В продолжении поста ..
В продолжении поста №1227 демка лежит здесь Не все реализовано до конца (в основном из-за лени :)), но в принципе использовать можно уже сейчас. UPD. Добавлено define TDC_MAINICON 7 TDC_FOOTERICON 20 Исправлено цитата: | radiobuttons.pszButtonText = HB_ARRAYGETSTR( button, 2, &hRadioButton[ iRadioButton++ ], NULL ); |
|
| |
|
gfilatov2002
|
| moderator
|
Пост N: 978
Зарегистрирован: 11.02.10
|
|
Отправлено: 08.08.16 11:32. Заголовок: Петр Благодарю за в..
Петр Благодарю за все Ваши усилия Посмотрю демку вечером ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 979
Зарегистрирован: 11.02.10
|
|
Отправлено: 08.08.16 11:38. Заголовок: Сегодня выпущен очер..
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5043
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.08.16 12:52. Заголовок: Что-то две последние..
| |
|
gfilatov2002
|
| moderator
|
Пост N: 980
Зарегистрирован: 11.02.10
|
|
Отправлено: 08.08.16 13:00. Заголовок: Andrey пишет: две п..
Andrey пишет: цитата: | две последние ссылки не идут |
| Поправил ...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1147
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.08.16 15:53. Заголовок: Подправил \BASIC..
Подправил \BASIC\GetClientSize\demo.prg на использование This... Скрытый текст
/* * MINIGUI - Harbour Win32 GUI library Demo */ #include "minigui.ch" FUNCTION MAIN LOCAL nCol DEFINE WINDOW FORM_1 ; AT 0,0 WIDTH 350 HEIGHT 235 ; MINWIDTH 350 MINHEIGHT 235 ; TITLE "Get Form Client Height" ; MAIN ; ON INIT Form_Resize() ; ON SIZE Form_Resize() ; ON MAXIMIZE Form_Resize() DEFINE MAIN MENU POPUP "&File" NAME mnuFile MENUITEM "&Exit" NAME mnuFileExit ; ACTION ThisWindow.Release END POPUP END MENU DEFINE STATUSBAR STATUSITEM "Ready" RAISED DATE CLOCK END STATUSBAR @ 05,10 LABEL lblWindow VALUE "WindowHeight = " AUTOSIZE @ 25,10 LABEL lblBorder VALUE "BorderHeight = " AUTOSIZE @ 45,10 LABEL lblTitlebar VALUE "TitleHeight = " AUTOSIZE @ 65,10 LABEL lblMenubar VALUE "MenubarHeight = " AUTOSIZE @ 85,10 LABEL lblStatusbar VALUE "StatusbarHeight = " AUTOSIZE @105,10 LABEL lblClient VALUE "ClientHeight = " AUTOSIZE @125,10 LABEL lblClientW VALUE "ClientWidth = " AUTOSIZE @145,10 LABEL lblWorkArea VALUE "WorkAreaHeight = " AUTOSIZE nCol := This.lblStatusbar.Width + 10 @ 05,nCol LABEL lblWindowHeight VALUE "" WIDTH 70 HEIGHT 16 RIGHTALIGN @ 25,nCol LABEL lblBorderHeight VALUE hb_ntos(GetBorderHeight()) WIDTH 70 RIGHTALIGN @ 45,nCol LABEL lblTitleHeight VALUE hb_ntos(GetTitleHeight()) WIDTH 70 RIGHTALIGN @ 65,nCol LABEL lblMenubarHeight VALUE hb_ntos(GetMenubarHeight()) WIDTH 70 RIGHTALIGN @ 85,nCol LABEL lblStatusbarHeight VALUE hb_ntos(This.StatusBar.Height) WIDTH 70 RIGHTALIGN @105,nCol LABEL lblClientHeight VALUE "" WIDTH 70 RIGHTALIGN @125,nCol LABEL lblClientWidth VALUE "" WIDTH 70 RIGHTALIGN @145,nCol LABEL lblWorkAreaHeight VALUE "" WIDTH 70 HEIGHT 16 RIGHTALIGN @ 0,nCol+100 EDITBOX edx WIDTH 100 HEIGHT 100 //NOHSCROLL END WINDOW CENTER WINDOW FORM_1 ACTIVATE WINDOW FORM_1 RETURN NIL STATIC PROCEDURE Form_Resize() LOCAL nWindowHeight, nClientHeight nWindowHeight := This.Height nClientHeight := nWindowHeight - 2 * GetBorderHeight() nClientHeight -= GetTitleHeight() + GetMenubarHeight() nClientHeight -= This.StatusBar.Height This.lblWindowHeight.Value := hb_ntos(nWindowHeight) This.edx.Height := nClientHeight This.edx.Width := This.Width - This.edx.Col - 2 * GetBorderWidth() This.lblClientHeight.Value := hb_ntos(This.edx.ClientHeight) This.lblClientWidth.Value := hb_ntos(This.edx.ClientWidth) This.lblWorkAreaHeight.Value := hb_ntos(This.ClientHeight - This.StatusBar.Height) RETURN
|
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1148
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.08.16 16:05. Заголовок: gfilatov2002 Change..
gfilatov2002 ChangeLog.txt цитата: | * Enhanced: Added a shorten form 'App' for the 'Application' object. Examples: App.ExeName, App.Handle, App.FormName etc. |
| Похоже потерялось в сборке
| |
|
gfilatov2002
|
| moderator
|
Пост N: 981
Зарегистрирован: 11.02.10
|
|
Отправлено: 08.08.16 16:21. Заголовок: SergKis пишет: поте..
SergKis пишет: Не потерялось, посмотри //////////////////////////////////////////// // Application pseudo-commands //////////////////////////////////////////// #translate <p:Application,App>.ExeName => GetExeFileName() #translate <p:Application,App>.Handle => _HMG_MainHandle ...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1149
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.08.16 16:30. Заголовок: gfilatov2002 пишет Н..
gfilatov2002 пишет Виноват исправлюсь. Наверно пытался в старом сделать ? _HMG_aFormNames [ _HMG_MainIndex ] ? Application.FormName ? App.FormName
| |
|
gfilatov2002
|
| moderator
|
Пост N: 982
Зарегистрирован: 11.02.10
|
|
Отправлено: 08.08.16 16:40. Заголовок: SergKis пишет: Подп..
SergKis пишет: цитата: | Подправил \BASIC\GetClientSize\demo.prg |
| Благодарю за упрощение кода этого примера - так лучше
| |
|
gfilatov2002
|
| moderator
|
Пост N: 983
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.08.16 11:20. Заголовок: Петр пишет: в принц..
Петр пишет: цитата: | в принципе использовать можно уже сейчас |
| Благодарю за помощь Как первый шаг - весьма неплохо, но за кадром осталось использование CommandLink, RadioButton и ProgressBar в этом диалоге. Если автор не потерял интерес к этому примеру, то ждем продолжения ... Иначе придется допиливать самостоятельно, по мере сил
| |
|
Петр
|
| постоянный участник
|
Пост N: 1240
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.08.16 12:44. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | за кадром осталось использование CommandLink, RadioButton и ProgressBar в этом диалоге |
| Вроде бы не заказывали такого Callback, ипользование ресурсов, поддержка Unicode и возврат стандартного для TaskDialogIndirect результата.. Вот такой нужен пример (картинка)? В принципе планировал написать несколько другой пример, но можно и такой.
| |
|
Петр
|
| постоянный участник
|
Пост N: 1241
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.08.16 12:51. Заголовок: Добавлена функция-об..
Добавлена функция-обертка к TaskDialog, простой пример использования, пофиксены найденные ошибки. обновленные исходники
| |
|
gfilatov2002
|
| moderator
|
Пост N: 984
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.08.16 13:15. Заголовок: Петр пишет: Вот так..
Петр пишет: Да Возможно, потребуется не один, а несколько примеров для демонстрации различных возможностей этой многогранной функции (от простого - к сложному) Петр пишет: цитата: | Добавлена функция-обертка к TaskDialog, пример использования |
| Премного благодарен, буду вечером разбираться ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 985
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.08.16 10:04. Заголовок: Петр, Добавил подде..
Петр, Добавил поддержку вывода стандартных иконок в диалоге (см.ниже) Скрытый текст
/* tdi_test2.prg */ #include "minigui.ch" #include "tdi.ch" PROCEDURE main() LOCAL aConfig := Array( TDC_CONFIG ) LOCAL nButton, nRadioButton LOCAL lVerificationFlagChecked := .F. LOCAL nResult LOCAL aButton := { { IDOK, "Ok!" } } aConfig[ TDC_COMMON_BUTTON_FLAGS ] := hb_bitOr( TDCBF_OK_BUTTON, TDCBF_CANCEL_BUTTON ) //aConfig[ TDC_BUTTON ] := Len( aButton ) //aConfig[ TDC_TASKDIALOG_BUTTON ] := aButton aConfig[ TDC_HWND ] := 0 aConfig[ TDC_HINSTANCE ] := GetInstance() aConfig[ TDC_MAINICON ] := TD_INFORMATION_ICON aConfig[ TDC_WINDOWTITLE ] := "Task Dialog Title" aConfig[ TDC_MAININSTRUCTION ] := "The main instruction text for the TaskDialog goes here." aConfig[ TDC_CONTENT ] := "The content text for the task dialog is shown here and the text will automatically wrap as needed." // aConfig[ TDC_VERIFICATIONTEXT ] := NILL aConfig[ TDC_VERIFICATIONTEXT ] := "Don't show me this message again" aConfig[ TDC_EXPANDEDINFORMATION ] := "Any expanded content text for the task dialog is shown here and the text will automatically wrap as needed." aConfig[ TDC_EXPANDEDCONTROLTEXT ] := "Expanded Control Text" aConfig[ TDC_COLLAPSEDCONTROLTEXT ] := "Collapsed Control Text" aConfig[ TDC_FOOTERICON ] := TD_INFORMATION_ICON aConfig[ TDC_FOOTER ] := "Optional footer text with an icon can be included" aConfig[ TDC_CALLBACK ] := { |h,n,w,l| callback( h,n,w,l ) } nResult := win_TaskDialogIndirect( aConfig, @nButton, @nRadioButton, @lVerificationFlagChecked ) IF nResult == 0 // no error occurs SWITCH nButton CASE IDOK ? "Button OK pressed" EXIT OTHERWISE ? "Button ID is", hb_ntos( nButton ) EXIT END SWITCH ? "Verification Flag is", If( lVerificationFlagChecked, "Checked", "UnChecked" ) ELSE ? "TaskDialogIndirect0() returns", nResult END IF RETURN STATIC FUNCTION callback( hWnd, nNotification, wParam, lParam ) LOCAL lResult := .F. /* To prevent the task dialog from closing, the application must return FALSE, otherwise the task dialog is closed */ SWITCH nNotification CASE TDN_CREATED ? "Notification: TDN_CREATED" EXIT CASE TDN_DESTROYED ? "Notification: TDN_DESTROYED" EXIT CASE TDN_BUTTON_CLICKED // wParam - an int that specifies the ID of the button or comand link that was selected ? "Notification: TDN_BUTTON_CLICKED. ID of the button:", wParam IF wParam == IDOK lResult := .T. ELSEIF wParam == IDCANCEL lResult := .T. ENDIF EXIT CASE TDN_RADIO_BUTTON_CLICKED // wParam - an int that specifies the ID corresponding to the radio button that was clicked ? "Notification: TDN_RADIO_BUTTON_CLICKED. ID of the button:", wParam EXIT CASE TDN_EXPANDO_BUTTON_CLICKED // the user clicks on the dialog's expando button: wParam is 1 if the dialog is expanded, or 0 if not ? "Notification: TDN_EXPANDO_BUTTON_CLICKED. Dialog is", If( wParam == 1, "expanded", "colapsed" ) EXIT CASE TDN_HELP // the user presses F1 on the keyboard while the dialog has focus ? "Notification: TDN_HELP" EXIT CASE TDN_VERIFICATION_CLICKED // the user clicks the task dialog verification check box: wParam is the status of the checkbox. // It is 1 if the verification checkbox is checked, or 0 if it is unchecked. ? "Notification: TDN_VERIFICATION_CLICKED. Verification checkbox is", If( wParam == 1, "checked", "unchecked" ) EXIT CASE TDN_HYPERLINK_CLICKED ? "Notification: TDN_HYPERLINK_CLICKED" ShellExecute( hWnd, "open", lParam, , , SW_SHOW ) END SWITCH RETURN lResult #pragma BEGINDUMP #define _WIN32_WINNT 0x0600 //VISTA #define UNICODE #if( defined( __MINGW32__ )) #define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i)))) #define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i)))) #ifdef UNICODE #define MAKEINTRESOURCE MAKEINTRESOURCEW #else #define MAKEINTRESOURCE MAKEINTRESOURCEA #endif #endif #include <hbwinuni.h> #include <windows.h> #include <commctrl.h> #include "hbapi.h" #include "hbapierr.h" #include "hbapiitm.h" #include "hbvm.h" #define TDC_CONFIG 24 #define TDC_HWND 2 #define TDC_HINSTANCE 3 #define TDC_TASKDIALOG_FLAGS 4 #define TDC_COMMON_BUTTON_FLAGS 5 #define TDC_WINDOWTITLE 6 #define TDC_MAINICON 7 #define TDC_MAININSTRUCTION 8 #define TDC_CONTENT 9 #define TDC_BUTTON 10 #define TDC_TASKDIALOG_BUTTON 11 #define TDC_DEFAULTBUTTON 12 #define TDC_RADIOBUTTON 13 #define TDC_TASKDIALOG_RADIOBUTTON 14 #define TDC_DEFAULTRADIOBUTTON 15 #define TDC_VERIFICATIONTEXT 16 #define TDC_EXPANDEDINFORMATION 17 #define TDC_EXPANDEDCONTROLTEXT 18 #define TDC_COLLAPSEDCONTROLTEXT 19 #define TDC_FOOTERICON 20 #define TDC_FOOTER 21 #define TDC_CALLBACK 22 #define TDC_WIDTH 24 static HB_BOOL checkButton( const PHB_ITEM arrayOfButtons, HB_SIZE arraysize ); HRESULT CALLBACK TDCallbackProc( HWND hWnd, UINT uNotification, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData ); HB_FUNC( WIN_TASKDIALOGINDIRECT ) { PHB_ITEM pConfig = hb_param( 1, HB_IT_ARRAY ); if ( pConfig && hb_arrayLen( pConfig ) >= TDC_CONFIG ) { TASKDIALOGCONFIG config = {0}; int nButton; int nRadioButton; BOOL fVerificationFlagChecked; HRESULT hResult; HB_TYPE typ; void ** hText = ( void ** ) hb_xgrab( sizeof( void * ) * 10 ); int iText = 0; TASKDIALOG_BUTTON * buttons = NULL; void ** hButton; int iButton = 0; TASKDIALOG_BUTTON * radiobuttons = NULL; void ** hRadioButton; int iRadioButton = 0; PHB_ITEM pCallbackData; // 1 UINT cbSize config.cbSize = sizeof( config ); // 2 HWND hwndParent if ( hb_arrayGetType( pConfig, TDC_HWND ) & HB_IT_NUMERIC ) { config.hwndParent = ( HWND ) hb_arrayGetNL( pConfig, TDC_HWND ); } else { config.hwndParent = NULL; } // 3 HINSTANCE hInstance config.hInstance = ( HINSTANCE ) hb_arrayGetNL( pConfig, TDC_HINSTANCE ); // 4 TASKDIALOG_FLAGS dwFlags if ( hb_arrayGetType( pConfig, TDC_TASKDIALOG_FLAGS ) & HB_IT_NUMERIC ) { config.dwCommonButtons = hb_arrayGetNInt( pConfig, TDC_TASKDIALOG_FLAGS ); } // 5 TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons if ( hb_arrayGetType( pConfig, TDC_COMMON_BUTTON_FLAGS ) & HB_IT_NUMERIC ) { config.dwCommonButtons = hb_arrayGetNInt( pConfig, TDC_COMMON_BUTTON_FLAGS ); } // 6 PCWSTR pszWindowTitle typ = hb_arrayGetType( pConfig, TDC_WINDOWTITLE ); if ( typ & HB_IT_STRING ) { config.pszWindowTitle = HB_PARASTRDEF( 1, TDC_WINDOWTITLE, &hText[iText++], NULL ); } else if ( typ & HB_IT_NUMERIC ) { config.pszWindowTitle = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_WINDOWTITLE ) ); } else { config.pszWindowTitle = NULL; } // 7 union { HICON hMainIcon; PCWSTR pszMainIcon; }; if ( hb_arrayGetType( pConfig, TDC_MAINICON ) & HB_IT_NUMERIC ) { config.pszMainIcon = ( PCWSTR ) hb_arrayGetNL( pConfig, TDC_MAINICON ); } else { config.pszMainIcon = NULL; } // 8 PCWSTR pszMainInstruction typ = hb_arrayGetType( pConfig, TDC_MAININSTRUCTION ); if ( typ & HB_IT_STRING ) { config.pszMainInstruction = HB_PARASTRDEF( 1, TDC_MAININSTRUCTION, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszMainInstruction = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_MAININSTRUCTION ) ); } // 9 PCWSTR pszContent; typ = hb_arrayGetType( pConfig, TDC_CONTENT ); if ( typ & HB_IT_STRING ) { config.pszContent = HB_PARASTRDEF( 1, TDC_CONTENT, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszContent = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_CONTENT ) ); } // 10 UINT cButtons config.cButtons = ( hb_arrayGetType( pConfig, TDC_BUTTON ) & HB_IT_NUMERIC ) ? hb_arrayGetNI( pConfig, TDC_BUTTON ) : 0; // 11 const TASKDIALOG_BUTTON *pButtons typ = hb_arrayGetType( pConfig, TDC_TASKDIALOG_BUTTON ); if ( typ & HB_IT_ARRAY ) { PHB_ITEM pButtons = hb_arrayGetItemPtr( pConfig, TDC_TASKDIALOG_BUTTON ); HB_SIZE arrsize; arrsize = hb_arrayLen( pButtons ); if ( ( arrsize > 0 ) && checkButton( pButtons, arrsize ) ) { HB_SIZE i; buttons = ( TASKDIALOG_BUTTON * ) hb_xgrab( sizeof( TASKDIALOG_BUTTON ) * arrsize ); memset( buttons, 0, sizeof( TASKDIALOG_BUTTON ) * arrsize ); hButton = ( void ** ) hb_xgrab( sizeof( void * ) * ( arrsize ) ); for ( i = 0; i < arrsize; ++i ) { PHB_ITEM button = hb_arrayGetItemPtr( pButtons, i + 1 ); buttons.nButtonID = hb_arrayGetNI( button, 1 ); if ( ( hb_arrayGetType( button, 2 ) & HB_IT_STRING ) != 0 ) { buttons.pszButtonText = HB_ARRAYGETSTR( button, 2, &hButton[ iButton++ ], NULL ); } else { buttons.pszButtonText = MAKEINTRESOURCE( hb_arrayGetNI( button, 2 ) ); } } config.cButtons = HB_MIN( config.cButtons, arrsize ); config.pButtons = buttons; } } // 12 int nDefaultButton config.nDefaultButton = ( hb_arrayGetType( pConfig, TDC_DEFAULTBUTTON ) & HB_IT_NUMERIC ) ? hb_arrayGetNI( pConfig, TDC_DEFAULTBUTTON ) : 0; // 13 UINT cRadioButtons config.cRadioButtons = ( hb_arrayGetType( pConfig, TDC_RADIOBUTTON ) & HB_IT_NUMERIC ) ? hb_arrayGetNI( pConfig, TDC_RADIOBUTTON ) : 0; // 14 const TASKDIALOG_BUTTON *pRadioButtons typ = hb_arrayGetType( pConfig, TDC_TASKDIALOG_RADIOBUTTON ); if ( typ & HB_IT_ARRAY ) { PHB_ITEM pButtons = hb_arrayGetItemPtr( pConfig, TDC_TASKDIALOG_RADIOBUTTON ); HB_SIZE arrsize; arrsize = hb_arrayLen( pButtons ); if ( ( arrsize > 0 ) && checkButton( pButtons, arrsize ) ) { HB_SIZE i; radiobuttons = ( TASKDIALOG_BUTTON * ) hb_xgrab( sizeof( TASKDIALOG_BUTTON ) * arrsize ); memset( radiobuttons, 0, sizeof( TASKDIALOG_BUTTON ) * arrsize ); hRadioButton = ( void ** ) hb_xgrab( sizeof( void * ) * ( arrsize ) ); for ( i = 0; i < arrsize; ++i ) { PHB_ITEM button = hb_arrayGetItemPtr( pButtons, i + 1 ); radiobuttons.nButtonID = hb_arrayGetNI( button, 1 ); if ( ( hb_arrayGetType( button, 2 ) & HB_IT_STRING ) != 0 ) { radiobuttons.pszButtonText = HB_ARRAYGETSTR( button, 2, &hRadioButton[ iRadioButton++ ], NULL ); } else { radiobuttons.pszButtonText = MAKEINTRESOURCE( hb_arrayGetNI( button, 2 ) ); } } config.cRadioButtons = HB_MIN( config.cRadioButtons, arrsize ); config.pRadioButtons = radiobuttons; } } // 15 int nDefaultRadioButton config.nDefaultRadioButton = ( hb_arrayGetType( pConfig, TDC_DEFAULTRADIOBUTTON ) & HB_IT_NUMERIC ) ? hb_arrayGetNI( pConfig, TDC_DEFAULTRADIOBUTTON ) : 0; // 16 PCWSTR pszVerificationText typ = hb_arrayGetType( pConfig, TDC_VERIFICATIONTEXT ); if ( typ & HB_IT_STRING ) { config.pszVerificationText = HB_PARASTRDEF( 1, TDC_VERIFICATIONTEXT, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszVerificationText = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_VERIFICATIONTEXT ) ); } else { config.pszVerificationText = NULL; } // 17 PCWSTR pszExpandedInformation typ = hb_arrayGetType( pConfig, TDC_EXPANDEDINFORMATION ); if ( typ & HB_IT_STRING ) { config.pszExpandedInformation = HB_PARASTRDEF( 1, TDC_EXPANDEDINFORMATION, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszExpandedInformation = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_EXPANDEDINFORMATION ) ); } // 18 PCWSTR pszExpandedControlText typ = hb_arrayGetType( pConfig, TDC_EXPANDEDCONTROLTEXT ); if ( typ & HB_IT_STRING ) { config.pszExpandedControlText = HB_PARASTRDEF( 1, TDC_EXPANDEDCONTROLTEXT, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszExpandedControlText = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_EXPANDEDCONTROLTEXT ) ); } // 19 PCWSTR pszCollapsedControlText typ = hb_arrayGetType( pConfig, TDC_COLLAPSEDCONTROLTEXT ); if ( typ & HB_IT_STRING ) { config.pszCollapsedControlText = HB_PARASTRDEF( 1, TDC_COLLAPSEDCONTROLTEXT, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszCollapsedControlText = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_COLLAPSEDCONTROLTEXT ) ); } // 20 union { HICON hFooterIcon; PCWSTR pszFooterIcon; } if ( hb_arrayGetType( pConfig, TDC_FOOTERICON ) & HB_IT_NUMERIC ) { config.pszFooterIcon = ( PCWSTR ) hb_arrayGetNL( pConfig, TDC_FOOTERICON ); } else { config.pszFooterIcon = NULL; } // 21 PCWSTR pszFooter; typ = hb_arrayGetType( pConfig, TDC_FOOTER ); if ( typ & HB_IT_STRING ) { config.pszFooter = HB_PARASTRDEF( 1, TDC_FOOTER, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszFooter = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_FOOTER ) ); } // 22 PFTASKDIALOGCALLBACK pfCallback; // 23 LONG_PTR lpCallbackData; if ( hb_arrayGetType( pConfig, TDC_CALLBACK ) & HB_IT_EVALITEM ) { pCallbackData = hb_itemNew( hb_arrayGetItemPtr( pConfig, TDC_CALLBACK ) ); hb_gcUnlock( pCallbackData ); config.lpCallbackData = ( LONG_PTR ) pCallbackData; config.pfCallback = TDCallbackProc; } // 24 UINT cxWidth; config.cxWidth = ( hb_arrayGetType( pConfig, TDC_WIDTH ) & HB_IT_NUMERIC ) ? hb_arrayGetNI( pConfig, TDC_WIDTH ) : 0; hResult = TaskDialogIndirect( &config, &nButton, &nRadioButton, &fVerificationFlagChecked ); while( --iText >= 0 ) hb_strfree( hText[ iText ] ); hb_xfree( hText ); while( --iButton >= 0 ) hb_strfree( hButton[ iButton ] ); if ( hButton ) hb_xfree( hButton ); while( --iRadioButton >= 0 ) hb_strfree( hRadioButton[ iRadioButton ] ); if ( hRadioButton ) hb_xfree( hRadioButton ); if ( hb_arrayGetType( pConfig, TDC_CALLBACK ) & HB_IT_EVALITEM ) { hb_itemRelease( ( PHB_ITEM ) config.lpCallbackData ); } if ( hResult == S_OK ) { if ( nButton ) { hb_storni( nButton, 2 ); } else { hb_stor( 2 ); } if ( nRadioButton ) { hb_storni( nRadioButton, 3 ); } else { hb_stor( 3 ); } hb_storl( fVerificationFlagChecked, 4 ); } else { hb_stor( 2 ); hb_stor( 3 ); hb_stor( 4 ); } hb_retnint( hResult ); } else { hb_errRT_BASE_SubstR( EG_ARG, 0, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } } static HB_BOOL checkButton( const PHB_ITEM arrayOfButtons, HB_SIZE arraysize ) { PHB_ITEM button; HB_SIZE i; for ( i = 1; i <= arraysize; ++i ) { button = hb_arrayGetItemPtr( arrayOfButtons, i ); if( HB_IS_ARRAY( button ) && hb_arrayLen( button ) > 1 ) { if ( ! ( ( ( hb_arrayGetType( button, 1 ) & HB_IT_NUMERIC ) != 0 ) && ( ( hb_arrayGetType( button, 2 ) & ( HB_IT_STRING | HB_IT_NUMERIC ) ) !=0 ) ) ) { return HB_FALSE; } } else { return HB_FALSE; } } return HB_TRUE; } HRESULT CALLBACK TDCallbackProc( HWND hWnd, UINT uNotification, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData ) { HRESULT hRes; PHB_ITEM pCallback = ( PHB_ITEM ) dwRefData; if( pCallback && hb_vmRequestReenter() ) { hb_vmPushEvalSym(); hb_vmPush( pCallback ); hb_vmPushNumInt( ( HB_MAXINT ) ( HB_PTRUINT ) hWnd ); hb_vmPushNumInt( ( HB_MAXINT ) uNotification ); hb_vmPushNumInt( wParam ); hb_vmPushNumInt( lParam ); hb_vmSend( 4 ); hRes = ( ( hb_parl( -1 ) == HB_TRUE ) ? S_OK : S_FALSE ); hb_vmRequestRestore(); return hRes; } return S_OK; } #pragma ENDDUMP
| Возникли следующие вопросы: 1) как сделать в этом диалоге вывод картинок из внешнего файла (использовать MAKEINTRESOURCE ); 2) как правильно сделать неявный вызов функции TaskDialogIndirect() из comctl32.dll (с использованием LoadLibrary() / GetProcAddress()) Это требуется для вызова этой функции под BCC 5.5: цитата: | #if ( defined( __BORLANDC__ ) && __BORLANDC__ <= 1410 ) #include "tdi.h" // <-- здесь определения для структур TaskDialogIndirect #endif |
| P.S. Благодарю за реализацию на Си функции TaskDialog() - пригодится
| |
|
Петр
|
| постоянный участник
|
Пост N: 1244
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.08.16 21:26. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Добавил поддержку вывода стандартных иконок в диалоге (см.ниже) |
|
gfilatov2002 пишет: цитата: | // 7 union { HICON hMainIcon; PCWSTR pszMainIcon; }; if ( hb_arrayGetType( pConfig, TDC_MAINICON ) & HB_IT_NUMERIC ) { config.pszMainIcon = ( PCWSTR ) hb_arrayGetNL( pConfig, TDC_MAINICON ); } else { config.pszMainIcon = NULL; } |
| Что-то здесь не так. при присвоении значения MainIcon мы можем использовать строку - имя ресурса, ID - числовой идентификатор ресурса, хендл HICON при этом в первых двух случаях используется pszMainIcon, а в последнем hMainIcon. typ = hb_arrayGetType( pConfig, TDC_MAINICON ); if ( typ & HB_IT_STRING ) { config.pszMainIcon = HB_PARASTRDEF( 1, TDC_MAINICON, &hText[iText++], NULL ) } else if (typ & HB_IT_NUMERIC ) { config.pszMainIcon = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_MAINICON ) ); } else if (typ & HB_IT_POINTER ) { config.hMainIcon = (HICON) ( hb_arrayGetPtr( pConfig, TDC_MAINICON ) ); } else { config.pszMainIcon = NULL; } Поскольку в Minigui есть своя, скажем так, специфика в интерпретации указателей, я осознанно (не только из-за лени ) упустил присвоение значения нескольким членам структуры TASKDIALOGCONFIG.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 986
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.08.16 21:37. Заголовок: Петр пишет: при при..
Петр пишет: цитата: | при присвоении значения MainIcon мы можем использовать |
| Благодарю за помощь - работает
| |
|
Петр
|
| постоянный участник
|
Пост N: 1245
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.08.16 21:40. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | как сделать в этом диалоге вывод картинок из внешнего файла |
| Что значит внешний файл. TaskDialogIndirect ориентирован в первую очередь на использование ресурсов (строк и иконок). При этом ресурсы могут находиться как в собственно исполняемом файле config.hInstance = NULL или GetModuleHandle(NULL), так и в других файлах (например динамической библиотеке dll или другом исполняемом файле exe). О hMainIcon уже писал, т.е иконку можно загрузить из файла, сгенерировать на лету или сконвертировать из другого формата с помощью gdi+ или других библиотек для обработки изображений.
| |
|
Петр
|
| постоянный участник
|
Пост N: 1246
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.08.16 21:43. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Благодарю за помощь - работает |
| Все это, я думаю вы уже поняли, относится и к FooterIcon.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 987
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.08.16 21:44. Заголовок: Петр пишет: в друг..
Петр пишет: цитата: | в других файлах (например динамической библиотеке dll |
| Имел в ввиду этот случай - конкретно, системные dll
| |
|
gfilatov2002
|
| moderator
|
Пост N: 988
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.08.16 21:47. Заголовок: Петр пишет: Все это..
Петр пишет: цитата: | Все это, я думаю вы уже поняли, относится и к FooterIcon |
| Да, понял Благодарю за разъяснение Увы, но работа этих диалоговых функций под bcc 5.5 приводит к вылету программы (не судьба, видимо, использовать со старым компилятором )
| |
|
gfilatov2002
|
| moderator
|
Пост N: 989
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.08.16 11:11. Заголовок: Петр , Обратил внима..
Петр, Обратил внимание, что параметр lParam в callback-функции при использовании флажка TDF_ENABLE_HYPERLINKS должен быть строкового типа (и содержать адрес URL), а не число, как сейчас Возможно ли это поправить
| |
|
Петр
|
| постоянный участник
|
Пост N: 1247
Зарегистрирован: 09.10.06
|
|
Отправлено: 11.08.16 11:44. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Возможно ли это поправить |
| Попробуйте это (нет возможности проверить самому) цитата: | HRESULT CALLBACK TDCallbackProc( HWND hWnd, UINT uNotification, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData ) { HRESULT hRes; PHB_ITEM pCallback = ( PHB_ITEM ) dwRefData; if( pCallback && hb_vmRequestReenter() ) { PHB_ITEM itm = hb_itemNew( NULL ); hb_vmPushEvalSym(); hb_vmPush( pCallback ); hb_vmPushNumInt( ( HB_MAXINT ) ( HB_PTRUINT ) hWnd ); hb_vmPushNumInt( ( HB_MAXINT ) uNotification ); hb_vmPushNumInt( wParam ); if ( uNotification == TDN_HYPERLINK_CLICKED) { HB_ITEMPUTSTR( itm, (HB_WCHAR *) lParam ); hb_vmPushItemRef( itm ); } else { hb_vmPushNumInt( lParam ); } hb_vmSend( 4 ); hRes = ( ( hb_parl( -1 ) == HB_TRUE ) ? S_OK : S_FALSE ); hb_itemRelease( itm ); hb_vmRequestRestore(); return hRes; } return S_OK; } |
|
| |
|
gfilatov2002
|
| moderator
|
Пост N: 990
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.08.16 12:56. Заголовок: Петр пишет: Попробу..
Петр пишет: Проверю сегодня вечером ... Судя по коду - должно работать Благодарю за помощь
| |
|
Softlog86
|
| |
Пост N: 318
Зарегистрирован: 03.12.08
|
|
Отправлено: 11.08.16 15:51. Заголовок: Вопрос вроде как уже..
Вопрос вроде как уже поднимался ..... не нашел в темах . Извините если что Имеем - стандартное окно . В нем организовано еще одно типа PANEL с VIRTUAL HEIGHT - оно со скроллингом разумеется . в это окно (назовем его VIRTUAL_W ) - имеется некоторое количество контролов , лабелов и т д . 1 проблема >> после заполнения всех контролов - пока не сдвинешь в этом окне (стрелками или скролбаром) - некоторые элементы отображаются неверно Например LABEL - задан один цвет - а при первичной прорисовке он вовсе не такой . Нужно это окно сдвинуть вверх-вниз . тогда цвет уже такой как задавал Пытаюсь передать в это окно команду PageUp - чтоб имитировать нажатие форма всё-равно не прорисовывается правильно ....: hwnd:=ASCAN(_HMG_aFormNames,'HC_VIRT') IF hwnd >0 SendMessage ( hwnd, WM_VSCROLL, SB_PAGEUP, 0 ) ENDIF 2 Проблема - в окне есть элемент DRAW GRADIENT или DRAW LINE при каких то изменениях в этом окне - например передвижение или изменение LABEL VALUE и т д , этот самый DRAW LINE /GRADIENT не перерисовывается . Причем не всегда - то нормально - то с запаздыванием от от пары секунд до десятка . Иногда вообще не перерисовывается . прилагаю скрин
| |
|
gfilatov2002
|
| moderator
|
Пост N: 991
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.08.16 16:12. Заголовок: Softlog86 пишет: ор..
Softlog86 пишет: цитата: | организовано еще одно типа PANEL с VIRTUAL HEIGHT |
| Окна типа PANEL появились в Минигуи сравнительно недавно и поэтому недоработки здесь вполне вероятны (по причине малого использования). Softlog86 пишет: Обычно в таком случае помогает вызов следующей функции при инициализации окна InvalidateRect( GetFormHandle( <имя формы> ), 0 ) Возможно также добавить этот вызов и по мере использования окна для принудительной перерисовки элементов
| |
|
Softlog86
|
| |
Пост N: 319
Зарегистрирован: 03.12.08
|
|
Отправлено: 11.08.16 17:11. Заголовок: У меня в этом окне е..
У меня в этом окне еще контрол GRID . Как только он получает фокус - всё , колесо прокрутки мыши не скроллирует в этом окне . Как сделать чтоб скроллинг работал всегда если мыша в этом окне (крутит колёсико прокрутки) ? Разумеется - если фокус в гриде - чтоб работал скрол внутри таблицы . То есть принудительно давать фокус на всё окно - если колёсико крутанули внутри указанного окна (но не в гриде) - это тоже позволяет правильно использовать Mouse Wheel Замечено вот еще что : Когда колёсико мышки крутим чтоб покрутить вниз - всё работает замечательно а вот вверх - уже с заминками - "два шага вверх - один вниз" - дёргается . хорошо работает если крутить медленно . Это касается скролла в окнах типа PANEL
| |
|
Dima
|
| |
Пост N: 5962
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.08.16 17:32. Заголовок: Softlog86 пишет: Эт..
Softlog86 пишет: цитата: | Это касается скролла в окнах типа PANEL |
| Похоже в них еще пилить и пилить что бы нормально работали
| |
|
gfilatov2002
|
| moderator
|
Пост N: 992
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.08.16 17:39. Заголовок: Softlog86 пишет: Ка..
Softlog86 пишет: цитата: | Как только он получает фокус |
| Указать класс NOTABSTOP при определении этого грида пробовали
| |
|
gfilatov2002
|
| moderator
|
Пост N: 993
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.08.16 20:01. Заголовок: Петр пишет: Попробу..
Петр пишет: Проверил - работает
| |
|
Softlog86
|
| |
Пост N: 320
Зарегистрирован: 03.12.08
|
|
Отправлено: 11.08.16 20:05. Заголовок: gfilatov2002 пробов..
gfilatov2002 пробовал . Всё равно . видимо придётся переопределять колесо прокрутки на скролл всего окна , даже если активен GRID . Там хватит и обычного Up/DN + скролбар . Мне важнее чтоб всё окно крутилось вверх-вниз . Только не знаю пока как это преопределение сделать ....
| |
|
Петр
|
| постоянный участник
|
Пост N: 1248
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.08.16 09:08. Заголовок: Петр пишет: Добавл..
Петр пишет: цитата: | Добавлена функция-обертка к TaskDialog, простой пример использования, пофиксены найденные ошибки. обновленные исходники |
| Очередные мелкие исправления, TaskDlgs.ch дополнен TDF_ Task Dialog Flags, добавлен еще один пример использования (радиокнопки, командные ссылки и пр.), добавлен простой класс CLASS TTaskDialog FUNCTION TaskDialog, который, надеюсь, со временем будет расширен, и пример его использования. качать отсюда
| |
|
gfilatov2002
|
| moderator
|
Пост N: 994
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.08.16 09:53. Заголовок: Петр пишет: добавле..
Петр пишет: цитата: | добавлен простой класс CLASS TTaskDialog |
| То, что надо Вечером посмотрю Благодарю за все Ваши усилия
| |
|
gfilatov2002
|
| moderator
|
Пост N: 995
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.08.16 20:33. Заголовок: Петр пишет: класс ..
Петр пишет: цитата: | класс CLASS TTaskDialog FUNCTION TaskDialog, который, надеюсь, со временем будет расширен |
| Да, этот класс - это пока только шаблон, но пользоваться им удобнее, чем просто вызывать функцию с параметрами ИМХО З.Ы. Всем - пока, уезжаю в отпуск
| |
|
Петр
|
| постоянный участник
|
Пост N: 1250
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.08.16 20:56. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Всем - пока, уезжаю в отпуск |
| Желаю хорошо отдохнуть! А класс уже вполне рабочий
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5056
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.08.16 16:36. Заголовок: Пример - \MiniG..
Пример - \MiniGUI\SAMPLES\BASIC\CURSOR - опечатка ! Не собирается, ошибка: Compiling 'demo.prg'... demo.prg(237) Error E0030 Syntax error "syntax error at 'Col'" 1 error No code generated. Compile error. Там в 237 строке надо поставить знак "," в GetProperty( Form, obj "Col" )
| |
|
Dima
|
| |
Пост N: 5979
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.08.16 16:55. Заголовок: Andrey пишет: Приме..
Andrey пишет: цитата: | Пример - \MiniGUI\SAMPLES\BASIC\CURSOR - опечатка |
| Ни чего не спутал ? там строк меньше чем 237 и GetProperty там нет совсем.
| |
|
Петр
|
| постоянный участник
|
Пост N: 1268
Зарегистрирован: 09.10.06
|
|
Отправлено: 21.08.16 17:07. Заголовок: Andrey пишет: Там в..
Andrey пишет: цитата: | Там в 237 строке надо поставить знак "," в GetProperty( Form, obj "Col" ) |
| Подтверждаю
| |
|
Dima
|
| |
Пост N: 5980
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.08.16 17:23. Заголовок: Петр пишет: Подтвер..
Петр пишет: Стрянно У меня HMG Extended Edition version 16.07 и в этом примере такого нет да и строк менее 237 Пример датируется 2011 годом от 18 июля В чем прикол ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1163
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.08.16 17:50. Заголовок: Dima 2016/08/08: HM..
Dima 2016/08/08: HMG Extended Edition version 16.08. line 237 ocol := GetProperty( Form, "col" ) + GetProperty( Form, obj "Col" ) + rect [1] 2016/07/14: HMG Extended Edition version 16.07. действительно нет такой строки, как впрочем и в предыдущей
| |
|
Dima
|
| |
Пост N: 5981
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.08.16 17:59. Заголовок: SergKis Точно , про..
SergKis Точно , пропустил я эту сборку (16.08) ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 996
Зарегистрирован: 11.02.10
|
|
Отправлено: 31.08.16 11:18. Заголовок: Для тех, кому это ин..
Для тех, кому это интеоесно. Выпустил сегодня 3-ю бету для новой сборки библиотеки. Полный список изменений см. ниже Скрытый текст
* New: The Task Dialog support is based upon the Vista's TaskDialog API: - win_TaskDialog0( ,, cWindowTitle, cMainMessage, cContent, ; dwCommonButtons, nIcon, @nButton ) -> nResult - win_TaskDialogIndirect0( aConfig, @nButton, @nRadioButton, ; @lVerificationFlagChecked ) -> nResult - simple CLASS TTaskDialog FUNCTION TaskDialog. Usage: WITH OBJECT TaskDialog() :Title := 'Simple TaskDialog' :Instruction := 'My Main Text here' :Content := 'A simple text only function TaskDialog()' IF :Execute() == 0 MsgInfo( :ButtonResult ) ENDIF ENDWITH It is MinGW-based and BCC 10.1-based possibility only. Note: This feature works properly at Windows Vista or later only. Contributed by Petr Chornyj <myorg63@mail.ru> (see demos in folder \samples\TaskDialogs) (see demo in folder \samples\Basic\TTaskDialog) * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.14.1. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2016-08-10 20:12): * Updated: HbSqlDD library source code (see in folder \Source\HbSqlDD) Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'MultiThread usage in HMG' sample. Based upon a contribution of Roberto Lopez <mail.box.hmg@gmail.com>. Enhanced by Pete D. <pete_westg/at/yahoo.gr> (see in folder \samples\Basic\MultiThread) * New: 'Enhanced CLASS TTaskDialogEx FUNCTION TaskDialogEx' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\TaskDialogs\TaskDialogEx) * New: 'Quick Message functions are based on TaskDialog API' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\TaskDialogs\demo3) (see in folder \samples\Basic\TaskDialogs) * New: 'Directory Watcher' sample is based on 'Change Notification' WinAPI. Based upon a contribution of Petr Chornyj <myorg63@mail.ru>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\DirWatcher) * Updated: 'Get Form Client Height' sample. Based upon a contribution of Russian user SergKis (see in folder \samples\Basic\GetClientSize) * Updated: The following samples are revised for compatibility with the latest Harbour changes: - \Utils\SqlDBU; - \samples\Basic\Charts_2; - \samples\Advanced\MSSQL; - \samples\Advanced\MySqlDD; - \samples\Advanced\OdbcDD; - \samples\Advanced\Sqlit3DD; - \samples\Advanced\Tsb_sqlite. Contributed by Grigory Filatov <gfilatov@inbox.ru>
| Особая благодарность - Петру за оказанную помощь
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5064
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.08.16 13:48. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Выпустил сегодня 3-ю бету для новой сборки библиотеки. |
| А можно обновить MiniGUI\SOURCE\HbPgSql ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 997
Зарегистрирован: 11.02.10
|
|
Отправлено: 31.08.16 14:15. Заголовок: Andrey пишет: А мож..
Andrey пишет: цитата: | А можно обновить MiniGUI\SOURCE\HbPgSql ? |
| Не вопрос, присылайте, что нужно обновить...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5065
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.08.16 14:31. Заголовок: Сейчас там PostgreSQ..
Сейчас там PostgreSQL version 8.4 А уже 9.5 версия есть. https://postgrespro.ru/ Как и что обновлять не знаю... Может в Харборе взять новее библиотеки - hbpgsql ?
| |
|
Петр
|
| постоянный участник
|
Пост N: 1273
Зарегистрирован: 09.10.06
|
|
Отправлено: 01.09.16 09:28. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Особая благодарность - Петру за оказанную помощь |
| Да не за что. А где бету можна скачать? Может к релизу что-то и дополнить можно было бы.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 998
Зарегистрирован: 11.02.10
|
|
Отправлено: 01.09.16 10:19. Заголовок: Петр пишет: где бет..
Петр пишет: Отправил ссылку на бету по почте Да, до релиза еще далековато, поэтому с удовольствием рассмотрю Ваши дополнения
| |
|
Петр
|
| постоянный участник
|
Пост N: 1274
Зарегистрирован: 09.10.06
|
|
Отправлено: 01.09.16 12:22. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Отправил ссылку на бету по почте |
| Спасибо. А где можно посмотреть цитата: | * New: 'Enhanced CLASS TTaskDialogEx FUNCTION TaskDialogEx' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\TaskDialogs\TaskDialogEx) |
|
| |
|
gfilatov2002
|
| moderator
|
Пост N: 999
Зарегистрирован: 11.02.10
|
|
Отправлено: 01.09.16 12:43. Заголовок: Петр пишет: А где м..
Петр пишет: Здесь Скрытый текст
/* TTaskDialogEx.prg - Using of the inheritance for class function TaskDialog() */ #include "minigui.ch" #include "hbclass.ch" #include "TaskDlgs.ch" CREATE CLASS TTaskDialogEx FUNCTION TaskDialogEx FROM TaskDialog EXPORTED: METHOD Flags( nFlags ) SETGET // 4 METHOD MainIcon( nIcon ) SETGET // 7 METHOD CustomButtons( aCustButton ) SETGET // 11 METHOD VerificationText( cText ) SETGET // 16 METHOD ExpandedInfo( cText ) SETGET // 17 METHOD ExpandedCtrlText( cText ) SETGET // 18 METHOD CollapsedCtrlText( cText ) SETGET // 19 METHOD FooterIcon( nIcon ) SETGET // 20 METHOD CallbackFunc( bFunc ) SETGET // 22 ENDCLASS /* */ METHOD Flags( nFlags ) CLASS TTaskDialogEx IF HB_ISNUMERIC( nFlags ) ::aConfig[ TDC_TASKDIALOG_FLAGS ] := nFlags ENDIF RETURN ::aConfig[ TDC_TASKDIALOG_FLAGS ] /* */ METHOD MainIcon( nIcon ) CLASS TTaskDialogEx IF HB_ISNUMERIC( nIcon ) ::aConfig[ TDC_MAINICON ] := nIcon ENDIF RETURN ::aConfig[ TDC_MAINICON ] /* */ METHOD FooterIcon( nIcon ) CLASS TTaskDialogEx IF HB_ISNUMERIC( nIcon ) ::aConfig[ TDC_FOOTERICON ] := nIcon ENDIF RETURN ::aConfig[ TDC_FOOTERICON ] /* */ METHOD VerificationText( cText ) CLASS TTaskDialogEx IF HB_ISSTRING( cText ) .OR. HB_ISNUMERIC( cText ) ::aConfig[ TDC_VERIFICATIONTEXT ] := cText ENDIF RETURN ::aConfig[ TDC_VERIFICATIONTEXT ] /* */ METHOD ExpandedInfo( cText ) CLASS TTaskDialogEx IF HB_ISSTRING( cText ) .OR. HB_ISNUMERIC( cText ) ::aConfig[ TDC_EXPANDEDINFORMATION ] := cText ENDIF RETURN ::aConfig[ TDC_EXPANDEDINFORMATION ] /* */ METHOD ExpandedCtrlText( cText ) CLASS TTaskDialogEx IF HB_ISSTRING( cText ) .OR. HB_ISNUMERIC( cText ) ::aConfig[ TDC_EXPANDEDCONTROLTEXT ] := cText ENDIF RETURN ::aConfig[ TDC_EXPANDEDCONTROLTEXT ] /* */ METHOD CollapsedCtrlText( cText ) CLASS TTaskDialogEx IF HB_ISSTRING( cText ) .OR. HB_ISNUMERIC( cText ) ::aConfig[ TDC_COLLAPSEDCONTROLTEXT ] := cText ENDIF RETURN ::aConfig[ TDC_COLLAPSEDCONTROLTEXT ] /* */ METHOD CustomButtons( aCustButton ) CLASS TTaskDialogEx IF HB_ISARRAY( aCustButton ) .AND. Len( aCustButton ) > 0 ::aConfig[ TDC_BUTTON ] := Len( aCustButton ) ::aConfig[ TDC_TASKDIALOG_BUTTON ] := aCustButton ENDIF RETURN ::aConfig[ TDC_TASKDIALOG_BUTTON ] /* */ METHOD CallbackFunc( bFunc ) CLASS TTaskDialogEx IF HB_ISBLOCK( bFunc ) ::aConfig[ TDC_CALLBACK ] := bFunc ENDIF RETURN ::aConfig[ TDC_CALLBACK ] /* */ PROCEDURE main() LOCAL nResult SET LOGFILE TO "_debug.txt" WITH OBJECT TaskDialogEx() :Title := 'TaskDialog with expandable text & footer with hyperlink' :Instruction := 'What do you think about of the Windows Vista TaskDialog?' :Content := 'The new TaskDialog provides a standard & enhanced way for interacting with the user' :Footer := "Optional footer text with an icon can be included" :MainIcon := TD_QUESTION :FooterIcon := TD_WARNING_ICON :ExpandedInfo := "Any expanded content text for the task dialog is shown " + ; "here and the text will automatically wrap as needed." :CollapsedCtrlText := "Click to see more" :ExpandedCtrlText := "Hide Expanded Text" :CallbackFunc := {|h,n,w,l| callback( h,n,w,l )} nResult := :Execute() IF nResult == 0 ? "Button ID is", :ButtonResult ENDIF ENDWITH RETURN STATIC FUNCTION callback( hWnd, nNotification, wParam, lParam ) LOCAL lResult := .F. /* To prevent the task dialog from closing, the application must return FALSE, otherwise the task dialog is closed */ LOCAL hResp := { 1=>"OK", 2=>"CANCEL", 3=>"ABORT", 4=>"RETRY", 5=>"IGNORE", 6=>"YES", 7=>"NO", 8=>"CLOSE" } SWITCH nNotification CASE TDN_BUTTON_CLICKED // wParam - an int that specifies the ID of the button or comand link that was selected IF hb_HPos( hResp, wParam ) != 0 IF wParam == IDOK ? "Button OK was pressed" ENDIF lResult := .T. ENDIF EXIT CASE TDN_HYPERLINK_CLICKED ShellExecute( hWnd, "open", lParam, , , SW_SHOW ) END SWITCH RETURN lResult
|
| |
|
Петр
|
| постоянный участник
|
Пост N: 1282
Зарегистрирован: 09.10.06
|
|
Отправлено: 04.09.16 11:54. Заголовок: Andrey пишет: А мож..
Andrey пишет: цитата: | А можно обновить MiniGUI\SOURCE\HbPgSql ? |
| Наверное для Андрея обновление уже не актуально Andrey пишет: цитата: | Может в Харборе взять новее библиотеки - hbpgsql ? |
| Функционально версии hbpgsql в MiniGUI и Harbour (https://github.com/harbour/core/) не отличаются. Более того, hbpgsql от MiniGUI есть старой версией harbour hbpgsql. Не учтены сл. важные поправки 2014-03-27 16:13 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * contrib/hbpgsql/rddcopy.c ! fixed typos in my recent modification and potential memory corruption and/or wrong output due to ugly hack for last field terminator in old code. Thanks to Aleksander Czajczynski for reporting the problem. К тому же rddcopy.c является юниксовым файлом (перевод строки LF вместо CRLF), что выглядит странно для MiniGUI 2011-10-20 15:21 UTC+0200 Viktor Szakats (vszakats.net/harbour) * contrib/hbpgsql/hbpgsql.hbx * contrib/hbpgsql/hbpgsql.hbp - contrib/hbpgsql/hdbcpg.prg - Deleted HDBC class layer due references to deprecated wrapper function which caused link errors in dynamic builds or HDBC apps. Please readd the file if interested in making this technially simple fix. Поэтому с чистой совестью можете копировать файлы из harbour\contrib\hbpgsql и пересобирать библиотеку, как я уже говорил, новой функциональности вы не получите. Работать должно стабильнее. Изменения в копирайтах и т.п. не в счет.
| |
|
Петр
|
| постоянный участник
|
Пост N: 1283
Зарегистрирован: 09.10.06
|
|
Отправлено: 04.09.16 12:10. Заголовок: Вот hbpgsql с harbou..
Вот hbpgsql с harbour-core (https://github.com/vszakats/harbour-core) выглядит сейчас более интересно, в основном за счет изменений в tpostgre.prg В часности, расширен METHOD New( cHost, cDatabase, cUser, cPass, nPort, cSchema, hCustom ) :New( ..., { 'timeout' => '10' } )
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5093
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.09.16 16:45. Заголовок: Григорий, а нельзя л..
Григорий, а нельзя ли прикрутить показ иконок (ICO) для объекта MENUITEM ? SET MENUSTYLE EXTENDED SetMenuBitmapHeight( 48 ) DEFINE CONTEXT MENU OF &cForm MENUITEM "Меню..." ACTION .. IMAGE "W_add32х32"
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1000
Зарегистрирован: 11.02.10
|
|
Отправлено: 08.09.16 22:04. Заголовок: Andrey пишет: нельз..
Andrey пишет: цитата: | нельзя ли прикрутить показ иконок (ICO) для объекта MENUITEM |
| Да, это возможно при добавлении в Ваш проект следующих 2-х функций цитата: | extern HBITMAP Icon2Bmp( HICON hIcon ); HB_FUNC( MENUITEM_SETICON ) { HBITMAP himage1; HICON hIcon; hIcon = ( HICON ) LoadImage( GetModuleHandle( NULL ), hb_parc( 3 ), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR ); if( hIcon == NULL ) hIcon = ( HICON ) LoadImage( 0, hb_parc( 3 ), IMAGE_ICON, 0, 0, LR_LOADFROMFILE | LR_DEFAULTCOLOR ); // convert icon to bitmap himage1 = Icon2Bmp( hIcon ); if( newStyle ) { MENUITEMINFO MenuItemInfo; MYMENUITEM * pmyMenuItem; MenuItemInfo.cbSize = sizeof( MENUITEMINFO ); MenuItemInfo.fMask = MIIM_DATA; if( GetMenuItemInfo( ( HMENU ) HB_PARNL( 1 ), hb_parni( 2 ), FALSE, &MenuItemInfo ) ) { pmyMenuItem = ( MYMENUITEM * ) MenuItemInfo.dwItemData; if( pmyMenuItem->hBitmap != NULL ) DeleteObject( pmyMenuItem->hBitmap ); pmyMenuItem->hBitmap = himage1; } } HB_RETNL( ( LONG_PTR ) himage1 ); } |
| и на PRG уровне цитата: | *-----------------------------------------------------------------------------* PROCEDURE _SetMenuItemIcon ( ItemName , FormName , Icon ) *-----------------------------------------------------------------------------* LOCAL a := _GetMenuIds ( ItemName , FormName ) _HMG_aControlBrushHandle [GetControlIndex ( ItemName , FormName )] := MenuItem_SetIcon ( a [1] , a [2] , Icon ) RETURN |
| Пример использования: цитата: | ... POPUP "&Help" FONT Font0 ITEM "Index" IMAGE "BMPHELP" ITEM "Using help" SEPARATOR ITEM "Online forum" IMAGE "WORLD" ITEM "Buy/register" IMAGE "CART_ADD" SEPARATOR ITEM "About" NAME SetIcon ACTION MsgInfo ( MiniGuiVersion() ) END POPUP END MENU _SetMenuItemIcon( "SetIcon" , "Form_1" , "demo.ico" ) |
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5096
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.09.16 19:44. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Да, это возможно при добавлении в Ваш проект следующих 2-х функций |
| Спасибо БОЛЬШОЕ ! А по умолчанию в библиотеку добавить сразу нельзя ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1001
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.09.16 20:01. Заголовок: Andrey пишет: в биб..
Andrey пишет: цитата: | в библиотеку добавить сразу нельзя ? |
| Уже добавил эти функции в следующую сборку
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5097
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.09.16 21:24. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Уже добавил эти функции в следующую сборку |
| Спасибо БОЛЬШОЕ !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5102
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.09.16 16:33. Заголовок: Приятно увидеть свои..
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1002
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.09.16 16:19. Заголовок: Просто к сведению. В..
Просто к сведению. Выпустил сегодня первый RC для новой сборки библиотеки. Полный список изменений см. ниже Скрытый текст
* Fixed: Wrong executing of a new debug logging at console or mixed appls. Problem was reported by Mitja Podgornik. You can enable the logging output if you uncommented the constant _HMG_OUTLOG in the minigui header file. By default this is turned off to preserve the proper Harbour functionality. (look at minigui.ch in folder \include) Syntax of the logging output is below: ? <explist,...> ?? <explist,...> ?a <arr> ?v <arr> There is also the optional command SET LOGFILE TO <filename>. (see demo in folder \samples\Basic\OptionBox) * New: The Task Dialog support is based upon the Vista's TaskDialog API: - win_TaskDialog0( ,, cWindowTitle, cMainMessage, cContent, ; dwCommonButtons, nIcon, @nButton ) -> nResult - win_TaskDialogIndirect0( aConfig, @nButton, @nRadioButton, ; @lVerificationFlagChecked ) -> nResult - simple CLASS TTaskDialog FUNCTION TaskDialog. Usage: WITH OBJECT TaskDialog() :Title := 'Simple TaskDialog' :Instruction := 'My Main Text here' :Content := 'A simple text only function TaskDialog()' IF :Execute() == 0 MsgInfo( :ButtonResult ) ENDIF ENDWITH Note: This feature works properly at Windows Vista or later only. Contributed by Petr Chornyj <myorg63@mail.ru> (see demos in folder \samples\Basic\TaskDialogs) * Enhanced: The OwnerDraw Menu style supports the optional function: - _SetMenuItemIcon( ItemName , FormName , Icon ). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\MenuEx) * Enhanced: Added the following features to batch\Compile.bat file: - Descriptions of the syntax was moved to a separate file. - Added the reading of the variables from an external minigui.cfg in the batch files Compile.bat and MakeLibOpt.bat. The reading takes place if a variable MG_ROOT is not defined. If the configuration file is not present, the sequence of actions is the same as before. Contributed by Petr Chornyj <myorg63@mail.ru> * Updated: HbPgSQL harbour library: - update for using PostgreSQL version 9.5. Contributed by Petr Chornyj <myorg63@mail.ru> (see in folder \Source\HbPgSql) * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.14.1. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2016-09-05 17:04): * Updated: HbSqlDD library source code (see in folder \Source\HbSqlDD). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'MultiThread usage in HMG' sample. Based upon a contribution of Roberto Lopez <mail.box.hmg@gmail.com>. Enhanced by Pete D. <pete_westg/at/yahoo.gr> (see in folder \samples\Basic\MultiThread) * New: 'Enhanced CLASS TTaskDialogEx FUNCTION TaskDialogEx' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\TaskDialogs\TaskDialogEx) * New: 'Quick Message functions are based on TaskDialog API' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\TaskDialogs\ShowMessage) * New: 'Directory Watcher' sample is based on 'Change Notification' WinAPI. Based upon a contribution of Petr Chornyj <myorg63@mail.ru>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\DirWatcher) * Updated: 'Get Form Client Height' sample. Based upon a contribution of Russian user SergKis (see in folder \samples\Basic\GetClientSize) * Updated: The following samples are revised for compatibility with the latest Harbour changes: - \Utils\SqlDBU; - \samples\Basic\Charts_2; - \samples\Advanced\MSSQL; - \samples\Advanced\MySqlDD; - \samples\Advanced\OdbcDD; - \samples\Advanced\Sqlit3DD; - \samples\Advanced\Tsb_sqlite. Contributed by Grigory Filatov <gfilatov@inbox.ru>
| Благодарю за Ваше внимание
| |
|
Петр
|
| постоянный участник
|
Пост N: 1293
Зарегистрирован: 09.10.06
|
|
Отправлено: 17.09.16 17:35. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Выпустил сегодня первый RC для новой сборки библиотеки |
| Так и не понял куда вы их выкладываете..
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1004
Зарегистрирован: 11.02.10
|
|
Отправлено: 17.09.16 18:44. Заголовок: Петр пишет: куда вы..
Петр пишет: Ссылку на новую сборку отправил Вам по почте Буду благодарен за любые комментарии...
| |
|
Dima
|
| |
Пост N: 6017
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.09.16 11:35. Заголовок: gfilatov2002 А нель..
gfilatov2002 А нельзя ли в модальном окне возле крестика закрытия окна добавить кнопку минимизации , при нажатии на которую сворачивалось бы все приложение ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1230
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.09.16 11:54. Заголовок: Dima Зачем эти ручн..
Dima Зачем эти ручные манипуляции ? Андрей показал решение. Можно в любое окно сунуть такое: FUNC MinAll( lMinimize) LOCAL i, cWnd, cForm := ThisWindow.Name If lMinimize For i := 1 To Len(_HMG_aFormNames) cWnd := _HMG_aFormNames [ i ] If cWnd != cForm .and. _IsWindowDefined(cWnd) // что Андрей писал EndIf Next EndIf RETURN NIL
| |
|
Dima
|
| |
Пост N: 6018
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.09.16 12:23. Заголовок: SergKis я о кнопке ..
SergKis я о кнопке
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1231
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.09.16 12:36. Заголовок: Dima пишет я о кнопк..
Dima пишет Если именно о кнопке, то делай стандартный заголовок с (Minimaize, Maximaize) кнопками и вешай на события блоки кода с обработчиками (ON MINIMAIZE ... ON MAXIMAIZE ...), но по мне решение на ON INIT MinAll( .T. ) и ON RELEASE MaxAll( .T. ) от внешнего управления (переменной) лучше. Можно и свой Title окна сделать (в примерах где то было) со своими кнопками\контролами ... и обрабатывать нажатия так же
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1005
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.09.16 13:20. Заголовок: Dima пишет: нельзя ..
Dima пишет: цитата: | нельзя ли в модальном окне возле крестика закрытия окна добавить кнопку минимизации |
| Можно, и это всего одна строчка в коде (см.пример ниже) Скрытый текст
#include "minigui.ch" Function Main SET DEFAULT ICON TO GetStartupFolder() + "\new.ico" SET CENTERWINDOW RELATIVE PARENT DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 600 HEIGHT 400 ; TITLE 'MiniGUI StatusBar Demo (Based Upon a Contribution Of Janusz Pora)' ; MAIN ; FONT 'Arial' SIZE 10 DEFINE MAIN MENU POPUP '&StatusBar Test' ITEM 'Set StatusBar Item 1' ACTION Form_1.StatusBar.Item(1) := "New value 1" ITEM 'Set StatusBar Item 2' ACTION Form_1.StatusBar.Item(2) := "New value 2" ITEM 'Set StatusBar Item Icon' ; ACTION ( Form_1.StatusBar.Icon (3) := 'New.ico', Form_1.StatusBar.Item(3) := "A Smile!" ) ITEM 'Open Other Window...' ACTION Modal_Click() END POPUP POPUP '&Help' ITEM '&About' ACTION MsgInfo ("MiniGUI StatusBar Demo") END POPUP END MENU DEFINE STATUSBAR FONT 'MS Sans Serif' SIZE 8 STATUSITEM "Item 1" ACTION MsgInfo('Click! 1') STATUSITEM "Item 2" WIDTH 100 ACTION MsgInfo('Click! 2') STATUSITEM 'A Car!' WIDTH 100 ICON 'Car.Ico' CLOCK DATE END STATUSBAR END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return Nil *-----------------------------------------------------------------------------* Procedure Modal_Click *-----------------------------------------------------------------------------* DEFINE WINDOW Form_2 ; AT 0,0 ; WIDTH 400 HEIGHT 300 ; TITLE 'StatusBar Test' ; MODAL NOSIZE DEFINE STATUSBAR STATUSITEM "Modal 1" WIDTH 100 ACTION MsgInfo('Click! 1') STATUSITEM "Modal 2" WIDTH 100 ACTION MsgInfo('Click! 2') END STATUSBAR END WINDOW Form_2.MinButton := .T. CENTER WINDOW Form_2 ACTIVATE WINDOW Form_2 Return
|
| |
|
Dima
|
| |
Пост N: 6019
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.09.16 13:25. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет:
| |
|
Dima
|
| |
Пост N: 6020
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.09.16 16:44. Заголовок: Петр пишет: Понятно..
Петр пишет: цитата: | Понятно, что собака зарыта здесь: FUNCTION Events ( hWnd, nMsg, wParam, lParam ) Понятно, что код там (и не только там) нужно оптимизировать в любом случае, даже если бы не было артефактов. |
| Просто решил напомнить , было бы не плохо починить оптимизировать код , глядишь и косяков не будет....
| |
|
Петр
|
| постоянный участник
|
Пост N: 1294
Зарегистрирован: 09.10.06
|
|
Отправлено: 20.09.16 14:32. Заголовок: Dima пишет: Просто ..
Dima пишет: цитата: | Просто решил напомнить , было бы не плохо починить оптимизировать код |
| Код создания окна, в котором размещен tsbrowse можно увидеть? Обработчики [ ONGOTFOCUS <GotFocusProcedure> ] ; [ ONLOSTFOCUS <LostFocusProcedure> ] ; использовались?
| |
|
Dima
|
| |
Пост N: 6021
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.09.16 14:37. Заголовок: Петр пишет: Код со..
Петр пишет: цитата: | Код создания окна, в котором размещен tsbrowse можно увидеть? |
| Да конечно. Только глючит и в примерах так же на семерке. Скрытый текст DEFINE WINDOW SPR_REC AT GetDesktopRealTop(),GetDesktopRealLeft() ; WIDTH WidthWindow_MyApl HEIGHT HighWindow_MyApl ; TITLE if (n_fltrecept==0,"Готовая продукция",if(n_fltrecept==1,"Черновые рецептуры","Архив рецептур")) ; ICON if(n_fltrecept==0,"AMAINICON",if(n_fltrecept==1,"BLACKS","YELLOW")) ; WINDOWTYPE STANDARD ; NOMAXIMIZE ; NOSIZE ; ON INIT Domethod("Form_0","Hide") ; ON RELEASE {||closebase(a_base),Domethod("Form_0","Show") } ; ON INTERACTIVECLOSE {|| .t.} ; ON GOTFOCUS {|| IsFocBut()} -------------- Func IsFocBut() // это костыль так как obrw:setfocus() не становился на нужный бровс , переделал на _PUSHKEY(VK_TAB) if lbut4x _PUSHKEY(VK_TAB) if lfocbrw4 _PUSHKEY(VK_TAB) endif lbut4x:=.f. endif return nil
|
| |
|
Петр
|
| постоянный участник
|
Пост N: 1295
Зарегистрирован: 09.10.06
|
|
Отправлено: 20.09.16 14:47. Заголовок: Dima пишет: DEFINE..
Dima пишет: И в этом окне помещены два tsbrowse, так? У меня примеры не глючат, библиотека стандартная или своя?
| |
|
Dima
|
| |
Пост N: 6022
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.09.16 14:48. Заголовок: да два бровса библио..
да два бровса библиотека стандартная
| |
|
Dima
|
| |
Пост N: 6023
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.09.16 14:52. Заголовок: Петр пишет: У меня ..
Петр пишет: Я взял поклацал свертку и разворот всех окон , на 5 попытке в примере C:\MiniGUI\SAMPLES\Advanced\Tsb_LoadFields\ получил чистое окно , без бровса. Могу кино снять если надо. PS Винда не глючит и другие приложения тоже. Глюки исключительно в Минигуи.
| |
|
Петр
|
| постоянный участник
|
Пост N: 1296
Зарегистрирован: 09.10.06
|
|
Отправлено: 20.09.16 15:10. Заголовок: Пока спасибо за отве..
Пока спасибо за ответы, буду смотреть. А у бровса bWhen установлены?
| |
|
Петр
|
| постоянный участник
|
Пост N: 1297
Зарегистрирован: 09.10.06
|
|
Отправлено: 20.09.16 15:16. Заголовок: Dima пишет: Я взял ..
Dima пишет: цитата: | Я взял поклацал свертку и разворот всех окон , на 5 попытке в примере C:\MiniGUI\SAMPLES\Advanced\Tsb_LoadFields\ получил чистое окно , без бровса. Могу кино снять если надо. |
| На 7? Кино не надо, а откомпилированный пример куда-то выложить?
| |
|
Dima
|
| |
Пост N: 6024
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.09.16 15:20. Заголовок: Петр пишет: откомпи..
Петр пишет: цитата: | откомпилированный пример куда-то выложить? |
| Скрытый текст Петр пишет: цитата: | А у бровса bWhen установлены? |
| Не нашел у себя в сырцах такого.
| |
|
Петр
|
| постоянный участник
|
Пост N: 1298
Зарегистрирован: 09.10.06
|
|
Отправлено: 20.09.16 16:15. Заголовок: Протестировал на XP ..
Протестировал на XP и 7 - ничего необычного.
| |
|
Dima
|
| |
Пост N: 6025
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.09.16 16:22. Заголовок: Петр Понял , спасиб..
Петр Понял , спасибо ! Придется мириться с тем что есть ...
| |
|
PSP
|
| постоянный участник
|
Пост N: 1274
Зарегистрирован: 27.01.07
|
|
Отправлено: 20.09.16 16:22. Заголовок: У меня на 10-ке "..
У меня на 10-ке "эффект" воспроизвёлся: WIN-D, затем клик по свернутому окну в панели задач. Так несколько раз. В восстановленном окне пусто. Когда щелкаешь мышой внутрь, появляются ячейки бровса.
| |
|
Dima
|
| |
Пост N: 6026
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.09.16 16:53. Заголовок: PSP пишет: У меня н..
PSP пишет: цитата: | У меня на 10-ке "эффект" воспроизвёлся: |
| Забавно а Has утверждал что на оси win 8 и выше таких косяков нет. Видимо он не шибко то и "гонял" свою задачу.
| |
|
Петр
|
| постоянный участник
|
Пост N: 1299
Зарегистрирован: 09.10.06
|
|
Отправлено: 20.09.16 16:54. Заголовок: Dima пишет: Придетс..
Dima пишет: цитата: | Придется мириться с тем что есть |
| Нет-нет, просто копать глубже надо. Пока соображаю
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1232
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.09.16 17:37. Заголовок: PSP пишет У меня на ..
PSP пишет На 2-х 8.1 получил следующее: - Win+D Win+D окно в фокусе, но с TSB фокус снят (раскраска курсора об этом говорит) и VK_TAB не восстанавливает фокус курсора (хоть ужмись) - клик на кнопке минимизации и по свернутой иконке (фокуса на TSB нет) жмем VK_TAB, фокус на TSB (курсор) восстановился, ALt+VK_TAB и ALt+VK_TAB + VK_TAB также восстанавливает фокус курсора TSB
| |
|
ММК
|
| постоянный участник
|
Пост N: 239
Зарегистрирован: 29.05.10
|
|
Отправлено: 20.09.16 17:42. Заголовок: 10-ка корпоративная..
10-ка корпоративная 64. Пример Димы работает без проблем при любом управлении.
| |
|
Dima
|
| |
Пост N: 6028
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.09.16 17:48. Заголовок: ММК Да проблема про..
ММК Да проблема происходит рандомно , у меня с 5 раза получилось , у тебя может получится с тысячного или сотого. Я пробовал мучать так же , окно задачи на FW , вот там все работает как надо и ни чего не ломается. Но мне нравится Минигуи
| |
|
ММК
|
| постоянный участник
|
Пост N: 240
Зарегистрирован: 29.05.10
|
|
Отправлено: 20.09.16 17:55. Заголовок: Dima пишет: Но мне ..
Dima пишет: Слишком много надо менять в Минигуи , что бы все работало , как в FW. Кстати TsBrows в FW так и не заработал ( нормально) . Его просто заменили
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1006
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.09.16 10:06. Заголовок: Опубликована новая с..
Опубликована новая сборка 16.09 для следующих С-компиляторов: - BCC 5.51 (Harbour и xHarbour) - MinGW 6.2.0 32/64 bits (только Harbour) - BCC 10.1 (только Harbour) - XCC (xHarbour) Прямые ссылки на дистрибутивы есть на домашней странице библиотеки Если кого-то интересует компилятор Pelles C 8.0, то я могу подготовить сборку для него также... Благодарю за помощь Петра и Андрея Верченко
| |
|
Dima
|
| |
Пост N: 6030
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.09.16 10:11. Заголовок: gfilatov2002 пишет: ..
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1007
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.09.16 10:54. Заголовок: Dima пишет: Сборка ..
Dima пишет: цитата: | Сборка похудела аж на 15 метров |
| Я почистил неиспользуемые компоненты из поставки компилятора MinGW (библиотеки для поддержки python и т.п.) Теперь качать надо меньше...
| |
|
sashaBG
|
| постоянный участник
|
Пост N: 181
Зарегистрирован: 15.09.05
|
|
Отправлено: 22.09.16 16:33. Заголовок: В MiniGUI 16.09 - Модальное окно
Привет ! в версии 16.09 Модальное окно с кнопочкой (Form_2.MinButton := .T.) для сворачивания работает по другому сворачивается само окно а не вся прога !?
| |
|
Dima
|
| |
Пост N: 6031
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.09.16 16:41. Заголовок: sashaBG пишет: свор..
sashaBG пишет: цитата: | сворачивается само окно а не вся прога |
| это не айс... уверен что окно модальное ?
| |
|
sashaBG
|
| постоянный участник
|
Пост N: 182
Зарегистрирован: 15.09.05
|
|
Отправлено: 22.09.16 16:55. Заголовок: Да уверен :)
Да уверен . Понравился трюк с ( Form_2.MinButton := .T. ) и переделал у себя в программе, на версии 16.08 все было ОК , но на новой сворачивает в низ только окно .
| |
|
Dima
|
| |
Пост N: 6032
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.09.16 17:07. Заголовок: Тогда это косячок.....
Тогда это косячок... С модальным так не должно быть !
| |
|
Dima
|
| |
Пост N: 6033
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.09.16 09:16. Заголовок: sashaBG Добрался я ..
sashaBG Добрался я до новой сборки. Собрал пример который дал Григорий в этой теме. Все работает нормально. Сворачивается все приложение !
| |
|
sashaBG
|
| постоянный участник
|
Пост N: 183
Зарегистрирован: 15.09.05
|
|
Отправлено: 23.09.16 12:04. Заголовок: Запусти пример через проводник
Странно , когда запускаю через FAR все похоже OK , запускаю через проводник Виндовса - сворачивается , но в нижнем левом углу остается полоска окна . А когда сделаеш ссылку demo.exe на десктоп наблюдается тот ефект о котором я говорил. У меня Windows 10 + anniversary update PS: под Windows 8.1 32bit - тоже самое
| |
|
Dima
|
| |
Пост N: 6034
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.09.16 12:12. Заголовок: sashaBG пишет: Стра..
sashaBG пишет: цитата: | Странно , когда запускаю через FAR все похоже OK , запускаю через проводник Виндовса - сворачивается , но в нижнем левом углу остается полоска окна |
| Точно. И у меня так. До этого проверял из FAR. Win 7 PS Вывод: Запускать из FAR
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5112
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.09.16 15:49. Заголовок: Не работает вывод от..
Не работает вывод отладки в файл. Наверное из-за переключения в другие папки. Нужно наверно сделать в h_ini.prg: FUNCTION _SetGetLogFile( cFile ) *-----------------------------------------------------------------------------* LOCAL cOld STATIC MLog_File := GetStartUpFolder()+"\_MsgLog.txt" Если делаю у себя в программе cFileLog := GetStartUpFolder()+"\_MsgLog.txt" //_SetGetLogFile() DELETEFILE(cFileLog) SET LOGFILE TO &cFileLog То вывод отладки в файл начинает происходить.... На маленьких программках вывод отладки в файл всегда проходит...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1009
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.09.16 21:50. Заголовок: Andrey пишет: MLog_..
Andrey пишет: цитата: | MLog_File := GetStartUpFolder()+"\_MsgLog.txt" |
| Сделал
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5113
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.09.16 16:37. Заголовок: Если выводить массив..
Если выводить массив ?v M->aDim, то в файле отладке массив выводиться через строчку. А зачем ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1011
Зарегистрирован: 11.02.10
|
|
Отправлено: 01.10.16 19:21. Заголовок: Andrey пишет: в фай..
Andrey пишет: цитата: | в файле отладке массив выводиться через строчку |
| Попробуй изменить эти команды: #command ?a [<arr>] => aEval( <arr>, { |xv, ne| _LogFile( (ne==1), ne, xv ), _LogFile() } ) #command ?v [<arr>] => aEval( <arr>, { |xv, ne| _LogFile( (ne==1), ne, iif( Valtype(xv) == "A", hb_valtoexp(xv), xv ) ), _LogFile() } )
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5119
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.10.16 09:52. Заголовок: Перешёл на версию 16..
Перешёл на версию 16.09 Перестала работать отладка в файл, не компилируется вообще проекты ! ain.prg(393) Error E0030 Syntax error "syntax error at '?'" Строка 393: ?v aDim Проверял на 3-х проектах. Вернулся на 16.08 - всё нормально компилируется... Только у меня так или ошибка в МиниГуи ?
| |
|
Петр
|
| постоянный участник
|
Пост N: 1303
Зарегистрирован: 09.10.06
|
|
Отправлено: 03.10.16 10:13. Заголовок: Andrey пишет: Тольк..
Andrey пишет: цитата: | Только у меня так или ошибка в МиниГуи ? |
| Вы это читали? 2016/09/21: HMG Extended Edition version 16.09. * Fixed: Wrong executing of a new debug logging at console or mixed appls (introduced in the build 16.08). Problem was reported by Mitja Podgornik. You can enable the logging output if you uncommented the constant _HMG_OUTLOG in the minigui header file. By default this is turned off to preserve the proper Harbour functionality. (look at minigui.ch in folder \include) Syntax of the logging output is below: ? <explist,...> ?? <explist,...> ?a <arr> ?v <arr>
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5120
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.10.16 10:23. Заголовок: Петр пишет: Вы это ..
Петр пишет: Да конечно же не читал... Всегда раньше читал и смотрел, а вот в этот раз установил и побежала работа ! Спасибо за подсказку !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5121
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.10.16 10:27. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Попробуй изменить эти команды: |
| То что нужно ! Спасибо !
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1013
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.10.16 11:46. Заголовок: Опубликована новая с..
Опубликована новая сборка 16.10 для следующих С-компиляторов: - BCC 5.51 (Harbour и xHarbour) - MinGW 6.2.0 32/64 bits (только Harbour) - BCC 10.1 (только Harbour) - XCC (xHarbour) Прямые ссылки на дистрибутивы есть на домашней странице библиотеки Искренняя благодарность за помощь - Петру
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5135
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.10.16 16:07. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Опубликована новая сборка 16.10 для следующих С-компиляторов: |
| Классная сборка ! Особенно понравились примеры samples\Basic\CURSOR_2 samples\Basic\IMAGE
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1014
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.10.16 10:50. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Опубликована новая сборка 16.10 |
| Выложил срочное обновление для этой сборки (только для BCC) по адресу http://hmgextended.com/files/CONTRIB/hmg-16.10-setup.zip Что исправлено: - опечатка в Си-функции RegisterWindow(), которая приводила к пропаданию основной иконки приложения, если она была задана из внешнего файла. - отображение CueBanner на WinVista с классической темой оформления. Инсталляторы для других Си-компиляторов обновлю позже вечером
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|