Форум » GUI » Примеры из Минигуи -ошибки, вопросы..... » Ответить

Примеры из Минигуи -ошибки, вопросы.....

Andrey: Всем привет. Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ? А заодно может и исправить и добавить новые.... Очень красочный пример: \MiniGUI\SAMPLES\Advanced\AVI_Animation - не работает под Win7 (наверно AVI-шки нет в ресурсах) Предложение Григорию: Можно ли добавить еще один пример с отдельным AVI-файлом в ресурсах проекта и показом такого же бегунка ? Пример: \MiniGUI\SAMPLES\Advanced\DisplayMode - не работает под ХР и далее.... Пример: \MiniGUI\SAMPLES\Advanced\Tsb_filter - вылетает на ХР -------------------------------------------------------------------------------- Harbour MiniGUI Errorlog File Harbour MiniGUI Extended Edition 2.0.1 - 2011.09.21 -------------------------------------------------------------------------------- Date: 11/15/2011 Time: 22:13:24 Error BASE/1124 Argument error: LEFT Called from LEFT(0) Called from SCANSOFT(195) Called from MAIN(84) Пример: \MiniGUI\SAMPLES\BASIC\MsgEdit - не собирается... Z:\MiniGUI\SAMPLES\BASIC\MsgEdit>call ..\..\..\batch\compile.bat demo /L shell32 Harbour 3.1.0dev (Rev. 17042) Copyright (c) 1999-2011, http://harbour-project.org/ Compiling 'demo.prg'... Lines 20133, Functions/Procedures 30 Generating C source output to 'demo.c'... Done. Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland demo.c: Error E2141 demo.prg 993: Declaration syntax error *** 1 errors in Compile *** C compile error.

Ответов - 301, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All

gfilatov2002: Andrey пишет: А по горячей клавише F4 - вылетает с ошибкой А если попробовать так: [pre]#include "minigui.ch" #define PROGRAM 'Тест-Grid' #define COPYRIGHT MiniGUIVersion()+","+Version()+","+hb_compiler() REQUEST HB_CODEPAGE_RU1251 Function MAIN() Local cResPicture, nWidth, nHeight LOCAL fColor := { | Val, CellRowIndex | IF ( CellRowIndex / 2 == Int( CellRowIndex / 2 ) , RGB( 0, 0, 255 ) , RGB( 0, 255, 0 ) ) } LOCAL fColor2 := { | Val, CellRowIndex | IF ( CellRowIndex / 2 == Int( CellRowIndex / 2 ) , RGB( 159, 191, 236 ) , RGB( 159, 191, 236 ) ) } SET LANGUAGE TO RUSSIAN SET CODEPAGE TO RUSSIAN SET DATE TO GERMAN DEFINE WINDOW Form_1; AT 0,0 ; WIDTH 650 HEIGHT 500 ; ICON "ICO_AAA" ; TITLE PROGRAM ; NOMAXIMIZE NOSIZE ; MAIN @ 0,10 LABEL Label_9 WIDTH 500 HEIGHT 40 ; VALUE 'MiniGUI ТЕСТ объекта GRID !' TRANSPARENT FONT "ARIAL" ; SIZE 18 BOLD FONTCOLOR BLACK BACKCOLOR YELLOW CENTERALIG DEFINE GRID Grid_Report Row 110 Col 15 WIDTH 590 HEIGHT 250 HEADERS {'№','Наименование отчета', 'Файл' } WIDTHS { 30,430, 120 } ITEMS LoadReport() VALUE 1 HEADERIMAGES {} BACKCOLOR { 159, 191, 236 } FONTSIZE 16 FONTBOLD .T. FONTCOLOR { 255, 0, 255 } DYNAMICFORECOLOR { fColor , fColor, fColor } DYNAMICBACKCOLOR { fColor2, fColor2, fColor2 } TOOLTIP 'Выбор отчета/F4-Редактирование отчета' ONHEADCLICK { {|| MsgInfo('Header 1 Clicked !')} , { || MsgInfo('Header 2 Clicked !')} } ONDBLCLICK LoadViewFr3(1) END GRID DEFINE STATUSBAR FONT "MS Sans serif" SIZE 10 BOLD STATUSITEM COPYRIGHT DATE CLOCK END STATUSBAR ON KEY F4 ACTION LoadViewFr3(2) END WINDOW SetProperty( "Form_1", "BackColor" , { 159, 191, 236 } ) CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return Nil ///////////////////////////////////////////////////////////// FUNCTION LoadViewFr3(nK) //MsgInfo( GetColValue( "Grid_Report", "Form_1", 3 ),"GetColValue ->" ) //MsgInfo( GetColValue( "Grid_Report", "Form_1", 2 ),"GetColValue ->" ) IF nK == 1 MsgInfo( Form_1.Grid_Report.Cell( this.value, 3 ) ,"this.value, 3 ->") MsgInfo( Form_1.Grid_Report.Cell( this.value, 2 ),"this.value, 2 ->" ) ELSE MsgInfo( Form_1.Grid_Report.Cell( GetProperty("Form_1", "Grid_Report", "value"), 3 ) ,"value, 3 ->") MsgInfo( Form_1.Grid_Report.Cell( GetProperty("Form_1", "Grid_Report", "value"), 2 ),"value, 2 ->" ) ENDIF RETURN NIL //////////////////////////////////////////////////////////// FUNCTION LoadReport() LOCAL aRows := { } AAdd( aRows, {"1.", "Свод по поступлению из банка", "prixod.fr3" } ) AAdd( aRows, {"2.", "Свод по начислению из банка" , "nachis.fr3" } ) AAdd( aRows, {"3.", " резерв..............3 ", "*3.fr3" } ) AAdd( aRows, {"4.", " резерв..............4 ", "*4.fr3" } ) RETURN aRows *--------------------------------------------------------------* Function GetColValue( xObj, xForm, nCol ) *--------------------------------------------------------------* Local nPos:= GetProperty(xForm, xObj, 'Value') Local aRet:= GetProperty(xForm, xObj, 'Item', nPos) Return aRet[nCol] [/pre]

Andrey: gfilatov2002 пишет: А если попробовать так: Спасибо ! Я понял как делать...

Andrey: Есть красивый пример \MiniGUI\SAMPLES\Advanced\Tsb_filter\demo.prg Пробовал его переделать под себя и не получилось: 1) Как запретить вывод(показ) всех полей базы (т.е. поля NOT1, NOT2, NOT3 - не показывать в TsBrowse) ? 2) Как разрешить редактировать ВСЕ поля в TsBrowse ? 3) Как разрешить редактировать ТОЛЬКО выборочные поля (KVIEWUK, KOD_EIRC, EIRC) в TsBrowse ? Заранее спасибо за ответ. Пример и база здесь. http://files.mail.ru/AEKHPY


gfilatov2002: Andrey пишет: 1) Как запретить вывод(показ) всех полей базы (т.е. поля NOT1, NOT2, NOT3 - не показывать в TsBrowse) ? Можно просто скрыть их (как сделано в примере ниже) или не загружать вовсе (с помошью функции LoadFields()). Andrey пишет: 2) Как разрешить редактировать ВСЕ поля в TsBrowse ? Вызвать метод oBrw:LoadFields( .T. ) c параметром .T. - и все поля редактируемые Andrey пишет: 3) Как разрешить редактировать ТОЛЬКО выборочные поля (KVIEWUK, KOD_EIRC, EIRC) в TsBrowse ? Для этого надо разрешить перемещение по полям внутри строки данных и установить флажок редактирования для требуемых полей. Рабочий пример см. ниже (все изменения сделаны в FUNCTION CreateBrowse): [pre]#include "minigui.ch" #include "tsbrowse.ch" REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866 STATIC aFont := {} MEMVAR oBrw_1 FUNCTION Main() LOCAL cIndex, cFilter LOCAL cDbf := GetStartupFolder() + '\test_2.dbf' LOCAL cFileIndex := GetStartupFolder() + '\test_200.cdx' REQUEST DBFCDX , DBFFPT SET LANGUAGE TO RUSSIAN // язык SET CODEPAGE TO RUSSIAN // кодовая страница RDDSETDEFAULT('DBFCDX') SET CENTURY ON SET DELETED ON DEFINE FONT Font_1 FONTNAME "Times New Roman" SIZE 12 DEFINE FONT Font_2 FONTNAME "Times New Roman" SIZE 11 DEFINE FONT Font_3 FONTNAME "Times New Roman" SIZE 10 BOLD AAdd( aFont, GetFontHandle( "Font_1" ) ) AAdd( aFont, GetFontHandle( "Font_2" ) ) AAdd( aFont, GetFontHandle( "Font_3" ) ) DEFINE WINDOW Form_0 ; At 0, 0 ; WIDTH 790 ; HEIGHT 450 ; TITLE 'TsBrowse sample: Incremental search' ; ICON 'lupa.ico' ; MAIN ; NOMAXIMIZE ; NOSIZE DEFINE LABEL Message ROW 7 COL 10 WIDTH 80 HEIGHT 16 VALUE 'Поиск:' FONTBOLD .T. END LABEL DEFINE TEXTBOX Text_1 ROW 5 COL 90 WIDTH 345 HEIGHT 21 ON CHANGE {|| RefreshBrowse()} END TEXTBOX ON KEY ESCAPE ACTION ThisWindow.Release END WINDOW DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 600 ; HEIGHT 40 ; CHILD ; NOSYSMENU ; NOCAPTION DEFINE LABEL Label_1 ROW iif( IsVista().or.IsSeven(), 5, 10 ) COL 10 WIDTH 580 HEIGHT 24 VALUE '' CENTERALIGN .T. END LABEL END WINDOW //ScanSoft( cDbf ) USE (cDbf) ALIAS 'B1' SHARED NEW CODEPAGE("RU866") cIndex := "UPPER(FIELD->Name_UK)" cFilter := "FIELD->Kod_UK > 0 .AND. DELETED()==.F." INDEX ON &cIndex TAG KODVIEW TO (cFileIndex) ; FOR &cFilter ADDITIVE ORDLISTADD( cFileIndex ) DBSETORDER(1) GOTO TOP CreateBrowse( "oBrw_1", 'Form_0', 30, 2, Form_0.Width-10, Form_0.Height-60, 'B1' ) oBrw_1:aColumns[1]:cHeading := "Код" + CRLF + "Упр.Комп." oBrw_1:SetColSize(1, 60) oBrw_1:aColumns[1]:nAlign := DT_CENTER oBrw_1:aColumns[2]:cHeading := "Наименование Упр.Комп." oBrw_1:SetColSize(2, 350) oBrw_1:aColumns[2]:nAlign := DT_LEFT oBrw_1:aColumns[3]:cHeading := "Код" + CRLF + "показа" oBrw_1:SetColSize(3, 60) oBrw_1:aColumns[3]:nAlign := DT_CENTER oBrw_1:aColumns[4]:cHeading := "Код" + CRLF + "ЕИРЦ" oBrw_1:SetColSize(4, 60) oBrw_1:aColumns[4]:nAlign := DT_RIGHT oBrw_1:aColumns[5]:cHeading := "Наименование ЕИРЦ г.Москвы" oBrw_1:SetColSize(5, 250) oBrw_1:aColumns[5]:nAlign := DT_LEFT Form_0.Text_1.Setfocus CENTER WINDOW Form_0 ACTIVATE WINDOW ALL RETURN Nil FUNCTION CreateBrowse( cBrw, cParent, nRow, nCol, nWidth, nHeight, cAlias ) LOCAL i PUBLIC &cBrw DEFINE TBROWSE &cBrw ; AT nRow, nCol ; ALIAS cAlias ; OF &cParent ; WIDTH nWidth ; HEIGHT nHeight ; COLORS { CLR_BLACK, CLR_BLUE } ; FONT "MS Sans Serif" ; SIZE 8 ; SELECTOR .T. END TBROWSE &cBrw:LoadFields( .F. ) // &cBrw:LoadFields( .T. ) - все поля редактируемые &cBrw:HideColumns( {6,7,8}, .T.) &cBrw:lNoHScroll := .T. &cBrw:lCellBrw := .T. &cBrw:aColumns[3]:lEdit := .T. &cBrw:aColumns[4]:lEdit := .t. &cBrw:aColumns[5]:lEdit := .T. &cBrw:nSelWidth := 16 &cBrw:ChangeFont( aFont[ 1 ], , 1 ) &cBrw:ChangeFont( aFont[ 3 ], 1 , 1 ) &cBrw:ChangeFont( aFont[ 3 ], , 2 ) &cBrw:nHeightCell += 6 &cBrw:nHeightHead += 14 &cBrw:nWheelLines := 1 &cBrw:SetColor( { 16 }, { Rgb( 43, 149, 168 )}) // Цвет фона в суперхидере &cBrw:SetColor( { 3 }, { Rgb( 255, 255, 255 )}) // шрифт в шапке &cBrw:SetColor( { 4 }, { { || { Rgb( 43, 149, 168 ), Rgb( 0, 54, 94 )}}}) // Шапка &cBrw:SetColor( { 17 }, { Rgb( 255, 255, 255 )}) // Цвет шрифта в суперхидере &cBrw:SetColor( { 6 }, { { || { Rgb( 255, 255, 74 ), Rgb( 240, 240, 0 )}}}) // фон курсора &cBrw:SetColor( { 12 }, { { || { Rgb( 128, 128, 128 ), Rgb( 250, 250, 250 )}}}) // фон курсора неактивного &cBrw:SetColor( { 2 }, { { || Rgb( 230, 240, 255 )}}) // фон не в курсоре &cBrw:SetColor( { 1 }, { { || Rgb( 0, 0, 0 )}}) // текст в ячейках &cBrw:SetColor( { 5 }, { { || Rgb( 0, 0, 255 )}}) // текст в ячейках с фокусом &cBrw:SetColor( { 11 }, { { || Rgb( 0, 0, 0 )}}) // цвет текста в курсоре неактивном &cBrw:nClrLine := COLOR_GRID &cBrw:SetAppendMode( .F. ) &cBrw:SetDeleteMode( .F. ) &cBrw:ResetVScroll() RETURN Nil STATIC FUNCTION RefreshBrowse() LOCAL cSeek := Alltrim( Form_0.Text_1.Value ) LOCAL cExp := "'" + UPPER(cSeek) + "' $ UPPER(B1->Name_Uk)" IF !Empty(cSeek) B1->( DbSetFilter( &("{||" + cExp + "}"), cExp ) ) ELSE B1->( DbClearFilter() ) END oBrw_1:Reset() RETURN Nil [/pre]

Andrey: gfilatov2002 пишет: Рабочий пример см. ниже Спасибо БОЛЬШОЕ !!! Чувствуется рука мастера !!! А еще вопрос по этому примеру: зачем нужно в этом примере следующая конструкция ? DEFINE LABEL Label_1 ROW iif( IsVista().or.IsSeven(), 5, 10 ) COL 10 WIDTH 580 HEIGHT 24 VALUE '' CENTERALIGN .T. END LABEL

Andrey: Добавил этот пример к своему проекту. ОДИН раз работает, при повторном вызове - вылетает с ошибкой: 53 строка: DEFINE FONT Font_1 FONTNAME "Times New Roman" SIZE 12 DEFINE FONT Font_2 FONTNAME "Times New Roman" SIZE 11 DEFINE FONT Font_3 FONTNAME "Times New Roman" SIZE 10 BOLD Я так понимаю, что шрифт повторно переопределяется ? Я нашел что нужно делать RELEASE FONT <cName>. В примере для выхода есть: ON KEY ESCAPE ACTION ThisWindow.Release Вместо неё (ThisWindow.Release) нужно написать свою функцию и там УДАЛИТЬ фонты ? Или можно как то по другому сделать ?

subbota: У меня вопрос простой. Можно ли в MiniGui запускать ide сразу с проектом по щелчку мышки на файле проекта *.hpj или *.hbp ?

SergKis: Andrey пишет:Или можно как то по другому сделать ? Можно: ON RELEASE ( <свои действия> ) ... ON KEY ESCAPE ACTION ThisWindow.Release // не менять Применяя команды препроцессора (как в Clipper std.ch ), надо смотреть, что внутри - сильно помогает в понимании MiniGui, которая устроена довольно стройно: I_<Контрл>.CH - команды препроцессора H_<Контрл>.PRG - функции создания контрола и работы с ним C_<Контрл>.C - HB_FUN для работы с контролом Примеры: DEFINE FONT ... из i_font.ch вызывает _DefineFont(...) из h_font.prg , @ <row>,<col> LABEL ... из i_Label.ch вызывает _DefineLabel(...) из h_Label.prg , @ <row>,<col> GRID ... из i_grid.ch вызывает _DefineGrid(...) из h_Grid.prg и так далее. Посмотрев на функцию _Define...(...) можно увидеть, что назначено по умолчанию, а самое главное, как используются переменные _HMG_... ( полный список в I_VAR.CH). В примере с GRID была использована доп. функция GetColValue( xObj, xForm, nCol ), а можно было использовать готовую функцию из h_grid.prg _GetGridCellValue ( ControlName , ParentForm , Row , Col ) и для замены _SetGridCellValue ( ControlName , ParentForm , Row , Col , CellValue ).

Andrey: SergKis спасибо БОЛЬШОЕ !

Andrey: В примере MiniGUI\SAMPLES\Advanced\CHECKMAILBOX используется функция для пароля CHARXOR(): PUBLIC cCryptKey := REPL( "#$@%&", 2 ) ........... cPass := CHARXOR( GetIni( NTRIM(nI)+"/16", "Password", "", cIniFile ), cCryptKey ) Я её к себе в программу поставил и обнаружил фигню.... Если пароль из цифр ставить, то все.... ! Перестает работать пароль. С чем связано, не знаю, наверно из ини-файла эту строку Харбор считать не может. Я с таким еще на Клипере сталкивался. Чем можно заменить эту функцию, чтобы можно было считывать/записывать любой пароль в ини-файл ? Пример здесь. http://files.mail.ru/VAPIMT

a_sidorov: Вы пишете в текстовой ини файл бинарный код. Для некоторых символов Вы получаете в ини файле коды 10, 13 и т.д. которые при считывании GetPrivateProfileString воспринимаются как конец строки и пароль обрезается. Нужно писать не коды символов, а их представление, например \u0013 -код 13

Andrey: Я понял это еще в клипере. Просто думал что есть готовая функция в Харборе для таких целей... А так получается, что строку нужно писать в кодах ascii или еще как нибудь. Наверно достаточно будет воспользоваться функциями HB_StrToHEX() и HB_HexToStr() !

SergKis: Andrey пишет: Наверно достаточно будет воспользоваться функциями HB_StrToHEX() и HB_HexToStr() Никогда не скрывал пароли разными способами, запоминал как есть. Рано или поздно всегда, кто нибудь забудет и тогда просто глянул и проблема снята !

Andrey: SergKis пишет: Рано или поздно всегда, кто нибудь забудет и тогда просто глянул Для этого есть пароль Админа в программе (для изменения и просмотра).

SergKis: Andrey пишет:Для этого есть пароль Админа в программе (для изменения и просмотра) Это когда ты один, а если Админами являются люди "внедренцы" со своими паролями Админ (я не знаю эти пароли) и когда они не доступны, по разным причинам, обращаются ко мне и достаточно по удаленке просто глянуть ини и ВСЕ ... , а не разбираться что и где надо запустить с паролем Админ. Но все это субъективно и дело привычки.

Andrey: Подскажите пожалуйста пример (или функции), где можно запомнить координаты своей задачи на рабочем столе (в файл ini), а затем восстановить окно в этих координатах.

Avf: ResizeIt из Samples\Advanced

Andrey: Avf пишет: ResizeIt из Samples\Advanced Спасибо БОЛЬШОЕ !!!

Andrey: Подскажите, как можно проверить ввод 2-х паролей и если они не одинаковы, то вернуться назад ? Имею такую конструкцию: Local cPwd, cPwd2 ...... @ 173,155 TEXTBOX Text_Pass1 HEIGHT 24 WIDTH 190 VALUE cPwd PASSWORD ; ON LOSTFOCUS {|| cPwd := Form_1.Text_Pass1.Value } ; ON ENTER Form_1.Text_Pass2.SetFocus @ 214,30 LABEL Label_Pass2 VALUE "Повтор:" WIDTH 120 HEIGHT 24 ; @ 211,155 TEXTBOX Text_Pass2 HEIGHT 24 WIDTH 190 VALUE cPwd2 PASSWORD ; ON LOSTFOCUS {|| cPwd2 := Form_1.Text_Pass2.Value } ; ON ENTER {|| IF( cPwd2#cPwd,MsgInfo("Пароли не одинаковы ! Повторите ввод заново !") , SaveConfig(cUsr,cPwd) ) }

Avf: Можно, например, так while .t. ввод если пароли совпадают выйти иначе сбросить контролы end



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