Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть V) (продолжение) » Ответить

Новая версия Расширенного релиза библиотеки MiniGUI (часть V) (продолжение)

gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №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

gfilatov2002: SergKis пишет: назвать его можно SetArrayTo(...) Добавил этот код с небольшими изменениями в новую сборку

Alex_Cher: Уважаемый gfilatov2002 ... где можно скачать полный перечень кодов по последней сборки, хотя бы с небольшим описание ...?

Dima: Alex_Cher пишет: где можно скачать полный перечень кодов по последней сборки Каких еще кодов ?


Haz: Каких еще кодов ? чит кодов типа неубиваемая программа , монопольное владение процессором, самовосстановление при сбое и пр

Dima: Haz пишет: чит кодов я думал коды запуска ракет надо

Haz: Alex_Cher пишет: где можно скачать полный перечень кодов по последней сборки, хотя бы с небольшим описание ...? Исходники минигуи открыты , все в них. В сборку входят и сами сырцы

Dima: gfilatov2002 Предлагаю все WINAPI функции (работающие корректно) присутствующие только в примерах , прикрутить к основной библиотеке.

gfilatov2002: Dima пишет: все WINAPI функции ... прикрутить к основной библиотеке. Этот подход сейчас используется в официальной сборке HMG. И он привел к тому, что размер экзешника простого примера составляет свыше 3,5 MБ. Подобный пример, собранный с помощью минигуи с компилятором MinGW, будет иметь размер около 2.2 MБ. Поэтому сохранение компактного ядра библиотеки рассматривается как приоритетная задача в Минигуи. А использование дополнительных функций из примеров рекомендуется только в случае необходимости. Поэтому и ответ на Ваше предложение - отрицательный

Dima: gfilatov2002 пишет: Поэтому и ответ на Ваше предложение - отрицательный Да , предложение я не совсем верно озвучил. Скорее всего правильней было бы эти функции сложить в отдельную либу (хош линкуй , не хош не линкуй). В общем ладно....проехали.

SergKis: gfilatov2002 Можно подправить некоторое места, добавив Self при вызове блока кода (выделено bold-ом) ? [pre2] METHOD KeyDown( nKey, nFlags ) CLASS TSBrowse ... Case nKey == VK_CONTEXT .and. nFlags == 22872065 If ::bContext != Nil Eval( ::bContext, ::nRowPos, ::nColPos, Self ) EndIf Case !::lCellbrw .and. ( nKey == VK_RETURN .or. nKey == VK_SPACE ) .and. ::bLDblClick != Nil // 14.07.2015 Eval( ::bLDblClick, Nil, nKey, nFlags, Self ) // .08. Otherwise ::SuperKeyDown( nKey, nFlags ) EndCase Return 0 ... METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse ... #ifndef __EXT_SELECTION__ ElseIf ::lCanSelect .and. ::bUserKeys == Nil // Added 28.09.2012 ::Selection() #endif ElseIf ::bLDblClick != Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self ) // .08. EndIf ElseIf nClickRow == 0 .and. ::lDrawHeaders .and. ! ::lNoChangeOrd // GF 1.71 If ::bLDblClick != Nil .and. ::aActions == Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self ) // .08. Else ::SetOrder( ::nAtCol( nColPix, ! ::lSelector ) ) //V90 EndIf ElseIf nClickRow == -2 .and. ::lDrawSpecHd .and. ::aColumns[ nCol ]:lEditSpec ... METHOD RButtonDown( nRowPix, nColPix, nFlags ) CLASS TSBrowse ... ::DrawSelect() bRClicked := If( ::aColumns[ nCol ]:bRClicked != Nil, ; ::aColumns[ nCol ]:bRClicked, ::bRClicked ) If bRClicked != Nil Eval( bRClicked, uPar1, uPar2, ::nAt, Self ) //V90 .08. Return 0 //V90 Else Return 0 EndIf ElseIf lHeader [/pre2]

PSP: SergKis пишет: METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) SergKis пишет: METHOD RButtonDown( nRowPix, nColPix, nFlags ) А тут разве не надо в параметрах Self указать?

SergKis: PSP пишет:А тут разве не надо в параметрах Self указать? Нет. Метод уже принадлежит объекту Self. Это не функция. В блок кода параметром будет передана ссылка на объект TsBrowse для использования

SergKis: SergKis пишет: Это не функция В итоге, конечно, это статик функция, как конечная единица кода, но собственные свойства (DATA ..., METHOD ..., ....) доступны ей без параметров

PSP: SergKis, thanks )

gfilatov2002: SergKis пишет: подправить некоторое места, добавив Self Благодарю! Сделал, конечно

SergKis: gfilatov2002

Haz: gfilatov2002 Григорий , можно в класс TsBrowse добавить метод :GoToRec ( nRec ) ? А то Seek есть, Locate есть , а чтоб встать на нужную запись приходится ее или сикать или локатить по сути это кусок из метода :expSeek() который просто отвечает за правильную прорисовку после перехода по DbSeek() , такой же кусок в методе :ExpLocate() . Можно его продублировать как метод :GoToRec(), а можно и упростить :ExpSeek() и ExpLocate() заменив подобный код вызовом :GoToRec() [pre2] METHOD GoToRec( nRec ) CLASS TSBrowse Local nRecNo, nLines If ::lIsDbf ::Reset() nRecNo := (::cAlias )->( RecNo() ) nLines := ::nRowCount() ::lValidating := .T. ( ::cAlias )->( DbGoto( nRec ) ) If nRecNo != ( ::cAlias )->( RecNo() ) .and. ::nLen > nLines nRecNo := ( ::cAlias )->( RecNo() ) ( ::cAlias )->( DbSkip( nLines - ::nRowPos ) ) If ( ::cAlias )->( EoF() ) Eval( ::bGoBottom ) ::nRowPos := nLines ::nAt := ::nLogicPos() While ::nRowPos > 1 .and. ( ::cAlias )->( RecNo() ) != nRecNo ::Skip( -1 ) ::nRowPos -- EndDo Else ( ::cAlias )->( DbGoTo( nRecNo ) ) ::nAt := ::nLogicPos() EndIf ::Refresh( .F. ) ::ResetVScroll() ElseIf nRecNo != ( ::cAlias )->( RecNo() ) nRecNo := ( ::cAlias )->( RecNo() ) Eval( ::bGoTop ) ::nAt := ::nRowPos := 1 While nRecNo != ( ::cAlias )->( RecNo() ) ::Skip( 1 ) ::nRowPos ++ EndDo ::Refresh( .F. ) ::ResetVScroll() EndIf If ::bChange != Nil Eval( ::bChange, Self, 0 ) EndIf ::lHitTop := ::lHitBottom := .F. end Return .T. [/pre2]

gfilatov2002: Haz пишет: в класс TsBrowse добавить метод :GoToRec ( nRec ) Благодарю за помощь! Сделал

gfilatov2002: Просто к сведению. Выпустил сегодня RC1 для следующей сборки 2.5.2. [pre2] * New: AES File Encryption Library source code (see in folder \Source\HbAES). This library is based on PolarSSL (http://www.polarssl.org). You can use the following function for crypt/decrypting a file: CryptFileAES( cFileIn, cFileOut, cPassword, nMode ) - nMode = 0 for Encryption and nMode = 1 for Decryption; - cPassword can be either a character string or a key filename. Based upon a contribution of S.Rathinagiri <srgiri@dataone.in>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\AESDEMO) * Updated: Synchronized Extended HMG for compatibility with Official HMG: - Fixed: Added auto scroll of a text in EDITBOX and TEXTBOX controls at the changing of a 'CaretPos' property. - New: Added optional clause STOREJOBDATA <aJobData> in the command START PRINTDOC. Note that aJobData memvar must be declared as Public or Private for using in the function HMG_PrintGetJobInfo(). aJobInfo := HMG_PrintGetJobInfo ( aJobData ) --> {} or { nJobID, cPrinterName, cMachineName, cUserName, cDocument, cDataType, cStatus, nStatus, nPriorityLevel, nPositionPrintQueue, nTotalPages, nPagesPrinted, cSubmittedDate, cSubmittedTime } Contributed by Dr. Claudio Soto <srvet@adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\Print_JobStatus) - New: Added the helpful function HMG_PrinterGetStatus ( [ cPrinterName ] ) --> nStatusPrinter Contributed by Dave. (see demo in folder \samples\Basic\Print_JobStatus) * Enhanced: Compatibility flags for Windows Vista, 7, 8, 8.1 and 10 were added to an application manifest. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see Windows7.Manifest in folder \Resources) * Updated: HBPrinter library (see source in folder \Source\HBPrinter): - PRG-code was formatted by Harbour contrib hbformat utility; - C-code was formatted to Harbour standard using uncrustify tool. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Dll library source code (see in folder \Source\Dll): - correction of using of WIN32_LEAN_AND_MEAN constant at compiling. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - the C-function GetSysMetrics() is defined as pseudo-function; - the function LoadImage() supports JPG, GIF, TIF and PNG images. Transparent property will be added to these images automatically. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see 'Grid Test' at demo in folder \samples\Advanced\TSBrowse) - added a new method SetArrayTo in the TSBrowse class. Contributed by SergKis (see demo in folder \samples\Advanced\Tsb_array_2) - added a new method GoToRec( nRec ) in the TSBrowse class. Contributed by Igor Nazarov (see demo in folder \samples\Advanced\Tsb_addrecord) * Updated: Harbour Compiler 3.2.0dev (SVN 2015-08-26 16:21). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: 'Get Password with CredUI' sample: - added the function GetDomainName(); - added a show of usage of the CredUIPrompt flags. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\GetPassword) * Updated: 'MiniPrint: Enhanced look of Print Preview window' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\MiniPrint) * Updated: 'Process Information' sample is based on the ProcInfo library: - fixed a memory leak in the C-function EnumWindows(). Problem was reported by Igor Nazarov. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\ProcInfo) [/pre2]Искренне балагодарен зв Вашу помощь в улучшении и развитии библиотеки TSBrowse

SergKis: gfilatov2002 Обнаружил бяку с LoadsField(...) TsBrowse. Пример: [pre2] #include "minigui.ch" #include "tsbrowse.ch" REQUEST DBFCDX FUNCTION Main() LOCAL i, k, n, cForm, cBrw, oBrw, aFld RDDSETDEFAULT('DBFCDX') SET EXCLUSIVE ON SET AUTOPEN ON SET DECIMALS TO 4 SET DATE TO GERMAN SET EPOCH TO 2000 SET CENTURY ON SET EXACT ON If ! Open_Table("TZAK", "TZAK") MsgStop("File not used !", "Error") RETURN EndIf cForm := "Form_1" DEFINE WINDOW &cForm AT 0,0 ; WIDTH 700 ; HEIGHT 500 ; TITLE 'Demo test' ; MAIN cBrw := "oBrw5" DEFINE TBROWSE &cBrw AT 10,10 ; WIDTH 670 HEIGHT 450 ; ALIAS "TZAK" ; HEADERS "Value 1" , "Op.", "Name", "Op.", "Value 2" ; WIDTHS 150 , 40, 150, 40, 150 ; COLUMNS { "R_1" , "R_5", "R_2", "R_6", "R_3" } :SetAppendMode( .F. ) :SetDeleteMode( .F. ) :lNoHScroll := .T. END TBROWSE oBrw := _HMG_aControlIds[ GetControlIndex(cBrw, cForm) ] // aFld := { "R_1", "R_5", "R_2", "R_6", "R_3" } // LoadFields(cBrw, cForm, .F., aFld) LoadFields(cBrw, cForm) oBrw:bOnEscape := {|o| DoMethod(cForm, 'Release') } END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 RETURN Function Open_Table( cFile, cAlias ) Local a, i DEFAULT cFile := "tzak", ; cAlias := cFile cFile := lower(cFile) If ! file(cFile+".dbf") dbCreate(cFile, { {"R_0", "C", 1, 0}, ; {"R_1", "C", 40, 0}, ; {"R_2", "C", 30, 0}, ; {"R_3", "C", 40, 0}, ; {"R_4", "C", 30, 0}, ; {"R_5", "C", 2, 0}, ; {"R_6", "C", 2, 0}, ; {"R_7", "C", 10, 0}, ; {"R_8", "C", 80, 0}, ; {"R_9", "C", 160, 0} ; }) a := { {"D", "", "Perionds", "", "99.99.9999" , "<=", "<="}, ; {"C", "", "Sclad" , "", "XXXXXXXXXXXXXXXXXXXX", "<=", "<="}, ; {"C", "", "Material", "", "XXXXXXXXXXXXXXXXXXXX", "<=", "<="}, ; {"N", "", "Kol-vo" , "", "999999999.999" , "<=", "<="}, ; {"N", "", "Summa" , "", "9999999999.99" , "<=", "<="} ; } USE ( cFile ) ALIAS ( cFile ) NEW For i := 1 To len(a) dbAppend() AEval(a[ i ], {|x,n| FieldPut(n, x) }) Next USE EndIf If ( i := RAt('\', cAlias) ) > 0 cAlias := upper(subs(cAlias, i+1)) EndIf USE ( cFile ) ALIAS ( cAlias ) SHARED NEW Return Used() [/pre2] искажаются заголовки, не беруться уст. width, picture Исправил так: METHOD LoadFields( lEditable ) [pre2] было cHeading := If( ! ::aHeaders == Nil .and. Len( ::aHeaders ) >= nE, ::aHeaders[ nE ], ; ::Proper( ( ::cAlias )->( Field( nE ) ) ) ) стало If ValType(::aHeaders) == "A" .and. ! empty(::aHeaders) .and. n <= Len( ::aHeaders ) // .08. cHeading := ::aHeaders[ n ] Else cHeading := ::Proper( ( ::cAlias )->( Field( nE ) ) ) EndIf было nSize := If( ! aColSizes == Nil .and. Len( aColsizes ) >= nE, aColSizes[ nE ], Nil ) cType := aStru[ nE, 2 ] If cType == "C" стало If ValType(::aColSizes) == "A" .and. ! empty(::aColSizes) .and. n <= Len( ::aColSizes ) // .08. nSize := ::aColSizes[ n ] Else nSize := If( ! aColSizes == Nil .and. Len( aColsizes ) >= nE, aColSizes[ nE ], Nil ) EndIf cType := aStru[ nE, 2 ] If cType == "C" было nSize := Max( GetTextWidth( 0, Replicate( "B", Len( cHeading ) ), hFont ), nSize ) nSize += If( ! Empty( cOrder ), 14, 0 ) //V90 EndIf cBlock := 'FieldWBlock("' + aStru[ nE, 1 ] + '",Select("' + ::cAlias + '"))' стало nSize := Max( GetTextWidth( 0, Replicate( "B", Len( cHeading ) ), hFont ), nSize ) nSize += If( ! Empty( cOrder ), 14, 0 ) //V90 EndIf If ValType(::aFormatPic) == "A" .and. ! empty( ::aFormatPic ) .and. n <= Len( ::aFormatPic ) // .08. cPicture := ::aFormatPic[ n ] EndIf cBlock := 'FieldWBlock("' + aStru[ nE, 1 ] + '",Select("' + ::cAlias + '"))' [/pre2]



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