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

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

Haz: Dima пишет: пробну так нарисовать в любом окне ShowNotifyIcon( GetFormHandle('Form_1'), .T., LoadTrayIcon( GetInstance(), "MY.ICO" ), "тултип" ) Так убить ( при убиении окно Form_1 должно жить ) DeleteNotifyIcon( GetFormHandle('Form_1') ) Это сама убивалка #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #define WM_TASKBAR WM_USER + 1043 static BOOL DeleteNotifyIcon( HWND hWnd ); HB_FUNC( DELETENOTIFYICON ) { hb_retl( ( BOOL ) DeleteNotifyIcon( ( HWND ) hb_parnl( 1 ) ) ); } static BOOL DeleteNotifyIcon( HWND hWnd ) { BOOL bRet; NOTIFYICONDATA nid; ZeroMemory( &nid, sizeof( nid ) ); nid.cbSize = sizeof( NOTIFYICONDATA ); nid.hWnd = hWnd; nid.uID = 0; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage = WM_TASKBAR; bRet = Shell_NotifyIcon( NIM_DELETE, &nid ); return bRet; } #pragma ENDDUMP

Haz: Andrey пишет: что не так Все так но, Почитай последние сообщения

Andrey: Везде в примерах: MAIN NOSHOW ; .... NOTIFYICON 'AID_MAIN' ; NOTIFYTOOLTIP PROGRAM ; ON NOTIFYCLICK ????() А мне нужен STANDART. Как можно сделать тогда ? Сначала сделать окно без иконки, а потом присвоить ему иконку ?


Haz: Andrey пишет: Как можно сделать тогда ? Андрей , ты издеваешься ? Все ж написано , прочитай последние 5 сообщений по твоему вопросу

Andrey: Haz пишет: Андрей , ты издеваешься ? Да не издеваюсь, а уточняю... Сначала сделать окно без иконки, а потом присвоить ему иконку ? Так ?

Haz: Andrey пишет: Да не издеваюсь, а уточняю... я пас

Haz: Andrey пишет: Сначала сделать окно без иконки, а потом присвоить ему иконку ? Так ? да так

Andrey: Спасибо ! Что-то мозила тормозит... Пока предложение добавишь, а уже ответ есть на незаконченное предложение...

Haz: Andrey пишет: а уже ответ есть почитай еще это https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb762159(v=vs.85).aspx там есть метод StFocus. Возможно он дает фокус на скрытую в трее икону ( не пробовал ) Прикрутить можно подправив ChangeNotifyIcon , пример на примере DeleteNotifyIcon скинул

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

Dima: Смотрю движок форума на автомате стал закрывать "длинные" темы.

Andrey: Всем привет. Имею текст (заголовок) из трех строчек, разделитель CRLF - типа: "Строка длинная 1"+CRLF+"Строка длинная 2"+CRLF+"Строка длинная 3" Вверху формы окна делаю вывод: @ 0, 0 LABEL Label_1 WIDTH nMaxWidth HEIGHT 120 VALUE cTitle ; SIZE 24 BOLD FONTCOLOR WHITE BACKCOLOR aBackColor1 ; CENTERALIGN VCENTERALIGN Строка вытягивается в одну строчку. И не влазиет в ширину окна. Если убрать VCENTERALIGN то 3 строки, но заголовок к верху окна прилипает. Как отцентовать по вертикали текст из нескольких строчек ?

Haz: Andrey пишет: Как отцентовать по вертикали текст из нескольких строчек при выводе текста используется DrawText() или DrawTextEx() где НЕ ПОДДЕРЖИВАЕТСЯ вертикальное выравнивание многострочного текста https://msdn.microsoft.com/en-us/library/windows/desktop/dd162499(v=vs.85).aspx Для решения предлагается писать свою выравнивалку http://forums.codeguru.com/showthread.php?253508-How-to-align-a-text-in-vertical-center&highlight=center%20vertical%20text

Andrey: Спасибо большое за разъяснение ! А то я думал, что опять где-то что-то пропустил... Haz пишет: Для решения предлагается писать свою выравнивалку Да там не на харборе... Может есть готовый код для Харбора ?

Dima: Andrey пишет: Может есть готовый код для Харбора ? Так все равно править то придется сишный сырец.

Andrey: Dima пишет: Так все равно править то придется сишный сырец. Я в Си вообще не силён...

Dima: Andrey пишет: Я в Си вообще не силён... А может и не Си. Там 2 сырца я так понял H_label.prg и C_label.c (в последнем я ни нашел DrawText) Посмотри для начала H_label.prg , возможно там что надо поправить.

Andrey: Всем привет. Вопрос про окна. Если я создал окно MODAL и нахожусь на этой форме, то как можно вызвать другое окно CHILD просто для показа ожидания ? Где то уже осуждали это, не могу найти.... Функция ожидания с окном CHILD - \samples\Basic\WAIT_WINDOW_2)

SergKis: Andrey пишет:Если я создал окно MODAL и нахожусь на этой форме, то как можно вызвать другое окно CHILD просто для показа ожидания ? Создай сначала CHILD, потом modal

Andrey: SergKis пишет: Создай сначала CHILD, потом modal Да не могу. Нужно только в этом порядке.

Haz: Andrey пишет: Да не могу. Нужно только в этом порядке. можно в ЛЮБОМ порядке создавать , а обрабатывать (hide, show ...) в нужном

gfilatov2002: Andrey пишет: Где то уже осуждали это, не могу найти.... Посмотри в этой теме пост №7 http://clipper.borda.ru/?1-1-0-00000434-000-0-0-1425331688

Andrey: gfilatov2002 пишет: Посмотри в этой теме пост №7 Спасибо БОЛЬШОЕ ! То что нужно !

Andrey: Что то не получается. На модальном окне кнопка, по ней отдельная функция в которой делаю: _HMG_IsModalActive := .F. // разрешить вызов другого окна после модального // создать окно ожидания aBegin := WaitWinCreate( 'Загружаю отчёт в EXCEL ...' ) ..... WaitWinClose(aBegin) // убить окно ожидания _HMG_IsModalActive := .T. // запретить вызов другого окна после модального RETURN NIL После отработки этой функции я могу попадать в ЛЮБОЕ ОКНО - а не возвращаюсь в это модальное окно. Что не так делаю ?

nick_mi: А что, по умолчанию теперь в MiniGui берется минимальный размер шрифта? По крайней для ...SAMPLES\BASIC GRID_X и Tree это верно. Размер шрифта меню - как по умолчанию в системе, а все Control's имеют микроскопический шрифт.

Dima: nick_mi Да вроде все норм. В каком примере такая не понятка ?

nick_mi: ...SAMPLES\BASIC\GRID_1, ...SAMPLES\BASIC\GRID_2, ...SAMPLES\BASIC\TREE ...SAMPLES\ADVANCED\ACHOICE

Dima: nick_mi пишет: SAMPLES\BASIC\TREE Да вроде в норме все , по остальным тоже Скрин покажи

gfilatov2002: nick_mi пишет: Размер шрифта меню - как по умолчанию в системе Да, теперь так nick_mi пишет: все Control's имеют микроскопический шрифт Лечится в одну строку в начале программы set font to _GetSysFont() , 10

nick_mi: gfilatov2002 ]Лечится в одну строку в начале программы Это конечно хорошо, что лечится, лечится также, если в окне явно указать шрифт и размер шрифта. Но если не очень подготовленный пользователь , или, предположим, просмотреть несколько примеров, как в моем случае я проматривал GRID-ы, и в каждом примере править править пример? Мне кажется не кошерно как-то.

gfilatov2002: nick_mi пишет: Мне кажется не кошерно как-то Так в чем тут проблема-то - в том, что используется шрифт (и его размер) СИСТЕМЫ по умолчанию ?

nick_mi: Я конечно, дико извиняюсь, но проблема осталась. Я только что проверил системные настройки для оформления экрана , кругом, где только допускалось, шрифты проставлены. У меня дома на WINDOWS 7 все нормально. На работе на WINDOWS XP шрифты микроскопические click here

Dima: nick_mi пишет: У меня дома на WINDOWS 7 все нормально. То же на 7 все хорошо XP не могу проверить , слез с нее.

Andrey: nick_mi пишет: Я конечно, дико извиняюсь, но проблема осталась. Да поставь свои шрифты - любые. Одна строчка всего: SET FONT TO "Tahoma", 16

SergKis: Andrey пишет:Да поставь свои шрифты - любые. Одна строчка всего: SET FONT TO "Tahoma", 16 Это спорный вопрос, т.к. было (теперь когда то, вер. 2.4.8. уже была изменена) 1. _HMG_DefaultFontName := 'Arial' _HMG_DefaultFontSize := 9 стало 2. _HMG_DefaultFontName := _GetSysFont () _HMG_DefaultFontSize := GetDefaultFontSize () пробнул на двух компах с 8.1 (разные разрешения) на одном приемлемо, на другом почти приемлемо, но мелковато. Если расчеты размеров контролов, окон от первого варианта, то при переходе на второй - все сыпется в разной степени и это не есть хорошо, надо править старые тексты ... Я согласен с nick_mi Мне кажется не кошерно как-то.

Dima: SergKis пишет: Я согласен с nick_mi +1

SergKis: SergKis пишет:Было ... 1. _HMG_DefaultFontName := 'Arial' _HMG_DefaultFontSize := 9 стало 2. _HMG_DefaultFontName := _GetSysFont () _HMG_DefaultFontSize := GetDefaultFontSize () Если глянем, например, h_button.prg FUNCTION _DefineButton (...), размеры button по умолчанию hb_default( @w, 100 ) hb_default( @h, 28 ) это соответствует для Arial, 9 (расчет из инчес в пиксели), т.е. размеры заявлены для h_init.prg п.1 Что получим с применением пункта 2 для размеров ? И это относится не только к button, По мне пункт 2 становися все не более не кошерным. Но может я гляжу не стой колокольни на изменения ?

Dima: nick_mi Можешь выложить скрины одного и того же окна в XP и в семерке ? Что то микро-шрифта я не увидел. ХЗ может зрение упало.

nick_mi: На скрине размер шрифта в меню-10. Уменьши изображение так чтобы шрифт на меню примерно соответствовал размеру 10. Тогда шрифт на GRID будет очень мелким. Завтра выложу с XP . С семерки выкладываю C опцией уменьшить до 640х480 click here и без опции уменьшить до 640х480 click here

Dima: nick_mi OK , ждем.

nick_mi: И тот же GRID в XP С опцией Уменьшить до 640х480 click here Без опции Уменьшить до 640х480 click here И еще я выполнил программу с SergKis _HMG_DefaultFontName := _GetSysFont () _HMG_DefaultFontSize := GetDefaultFontSize () Для WIN 7 [pre]_GetSysFont () = Segoe UI GetDefaultFontSize () = 9 [/pre] Для WIN XP [pre]_GetSysFont () = Tahoma GetDefaultFontSize () = 4 [/pre] Хотя в настройках экрана я нигде не ставил шрифт размера 4

SergKis: nick_mi пишет:И еще я выполнил программу с SergKis Теперь такая настройка стоит в h_init.prg (уст. значений переменным _HMG_...). Если не ставим специально set font ... , то работают такие значения для фонта

gfilatov2002: SergKis пишет: Теперь такая настройка стоит в h_init.prg С учетом этого обсуждения изменил определение размера шрифта на _HMG_DefaultFontSize := Max( 9, GetDefaultFontSize () )

SergKis: gfilatov2002

Haz: Столкнулся с проблемой жора памяти при использовании функции EnumWindows из примеров минигуи. Каждый ее вызов отгрызает память . Как бороть ? Вот самодостаточный пример . При нажатии кнопки старт наглядно виден аппетит EhumWindows и прога падает без слов [pre2] #include "hbthread.ch" #include "minigui.ch" Function Main local nFreeMem := MemoryStatus(2) DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 365 HEIGHT 245 ; TITLE "Free memory status" ; MAIN @ 20,145 BUTTON Button_1 ; CAPTION "Start" ; ACTION { || hb_threadStart( HB_THREAD_INHERIT_PUBLIC, @Start() ) } ; WIDTH 80 HEIGHT 26 DEFAULT @ 70,31 PROGRESSBAR Progress_1 ; RANGE 0, nFreeMem ; WIDTH 300 HEIGHT 26 ; TOOLTIP "" END WINDOW DEFINE TIMER Timer_1 OF Form_1 INTERVAL 100 ACTION {|| Form_1.Progress_1.Value := MemoryStatus(2) } CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return Nil Func start() local aWin := {} while .t. aWin := EnumWindows () end return nil #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #include "hbapiitm.h" static PHB_ITEM pArray; BOOL CALLBACK EnumWindowsProc (HWND hWnd, LPARAM lParam) { hb_arrayAddForward (pArray, hb_itemPutNLL (NULL, (LONG) hWnd)); return TRUE; } HB_FUNC ( ENUMWINDOWS ) { pArray = hb_itemArrayNew ( 0 ); EnumWindows ((WNDENUMPROC) EnumWindowsProc, (LPARAM) 0); hb_itemReturnRelease ( pArray ); pArray = NULL; } #pragma ENDDUMP [/pre2]

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

Haz: Haz пишет: Столкнулся с проблемой жора памяти при использовании функции EnumWindows из примеров минигуи. Каждый ее вызов отгрызает память . Как бороть ? Поборол, Работает корректно. [pre2] Func EnumWindows() local aWin := {} EnumWin( {|hWin, nLParam| AADD( aWin, hWin ) } ) return aWin #pragma BEGINDUMP #include <hbapi.h> #include <hbapiitm.h> #include <windows.h> void hb_evalBlock( PHB_ITEM pCodeBlock, ... ); static PHB_ITEM pCodeBlock = NULL; BOOL CALLBACK static EnumWinProc( HWND hWnd, LPARAM lParam ) { PHB_ITEM pHWnd = hb_itemPutNL( NULL, ( LONG ) hWnd ); PHB_ITEM pParam = hb_itemPutNL( NULL, ( LONG ) lParam ); if( pCodeBlock ) hb_evalBlock( pCodeBlock, pHWnd, pParam, 0 ); hb_itemRelease( pHWnd ); hb_itemRelease( pParam ); return TRUE; } HB_FUNC( ENUMWIN ) { LPARAM lParam = ( LPARAM ) hb_parnl( 2 ); pCodeBlock = hb_param( 1, HB_IT_BLOCK ); hb_retl( EnumWindows( (WNDENUMPROC) EnumWinProc, lParam)); pCodeBlock = NULL; } #pragma ENDDUMP [/pre2] PS. Григорий В примерах MiniGui есть другой вариант EnumWindows , выше в своем сообщении приводил тест, подтверждающий жор памяти. Может в библиотеку включить из этого поста, нормально работающую ?

Andrey: Если допустим в цикле вывожу список полей базы на форму: ELSEIF cType == 'N' .OR. cType == 'D' .OR. cType == 'C' xRet := FIELDGET( FIELDNUM( cPole ) ) cRet := "A"+ TRANSFORM( xRet, cPicture ) + "A" nWFld := GetTxtWidth( cRet, aFontFields[ 2 ], aFontFields[ 1 ] ) @ nRowFld, nColFld GETBOX &cObj VALUE xRet ; PICTURE cPicture ; WIDTH nWFld HEIGHT aFontFields[ 2 ] *2.5 - nDelHeight ; FONT aFontFields[ 1 ] SIZE aFontFields[ 2 ] ; BACKCOLOR { aBackColorPage, {255,255,200},{200,255,255}} ; FONTCOLOR { aClrFld , {255,255,200},{0,0,255}} ТО как мне определить, было ли исправлено хоть одно значение в GETBOX ?

gfilatov2002: Haz пишет: Может в библиотеку включить из этого поста, нормально работающую ? Благодарю за помощь Конечно, сделаю...

gfilatov2002: Haz Предлагаю проверить еще такой вариант этой функции: [pre]static PHB_ITEM pArray; #if defined( __BORLANDC__ ) #pragma argsused #endif BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam ) { PHB_ITEM pHWnd = hb_itemPutNL( NULL, ( LONG ) hWnd ); #if defined( __MINGW32__ ) UNREFERENCED_PARAMETER( lParam ); #endif hb_arrayAddForward( pArray, pHWnd ); hb_itemRelease( pHWnd ); return TRUE; } HB_FUNC ( ENUMWINDOWS ) { pArray = hb_itemArrayNew( 0 ); EnumWindows( ( WNDENUMPROC ) EnumWindowsProc, ( LPARAM ) 0 ); hb_itemReturnRelease( pArray ); pArray = NULL; }[/pre]

Haz: Григорий Предлагаю проверить еще такой вариант этой функции: протестирую завтра, на первый взгляд она практически та же, что я выкладывал в примере жора памяти. Разница в этом [pre2] #if defined( __BORLANDC__ ) #pragma argsused #endif [/pre2] и в передаче параметра в функцию [pre2] hb_arrayAddForward( pArray, pHWnd ) [/pre2] не уверен что это поможет, но всяко бывает ) ПОМОГЛО ! увидел в чем проблема hb_itemRelease( pHWnd ) - лечит жор PS Григорий в официале HMG тоже жор будет вот из последнего [pre2] BOOL CALLBACK EnumWindowsProc (HWND hWnd, LPARAM lParam) { UNREFERENCED_PARAMETER (lParam); hb_arrayAddForward (pArray, hb_itemPutNLL (NULL, (LONG_PTR) hWnd)); return TRUE; } [/pre2]

gfilatov2002: Haz пишет: ПОМОГЛО ! увидел в чем проблема Благодарю за подтверждение Тогда буду использовать этот вариант в примерах новой сборки

Haz: gfilatov2002 пишет: Тогда буду использовать этот вариант в примерах новой сборки спасибо PS Григорий в официале HMG тоже жор будет вот из последнего [pre2] BOOL CALLBACK EnumWindowsProc (HWND hWnd, LPARAM lParam) { UNREFERENCED_PARAMETER (lParam); hb_arrayAddForward (pArray, hb_itemPutNLL (NULL, (LONG_PTR) hWnd)); return TRUE; } [/pre2]

Andrey: Делаю следующее: @ 0, 50 LABEL Label_1 VALUE .... СENTERALIGN VCENTERALIGN Как можно потом снять у этого объекта СENTERALIGN и VCENTERALIGN ?

gfilatov2002: Andrey пишет: Как можно потом снять у этого объекта СENTERALIGN и VCENTERALIGN ? Это можно сделать с помощью функции ChangeStyle(), см. пример ниже [pre]/* * MINIGUI - Harbour Win32 GUI library Demo * */ #include "minigui.ch" #include "i_winuser.ch" Function Main DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 300 ; TITLE "MiniGUI Label Demo" ; MAIN ; FONT "Arial" SIZE 10 @ 010,10 LABEL Label_1 VALUE "Label_1" WIDTH 200 TOOLTIP "Label 1" CENTERALIGN VCENTERALIGN backcolor GRAY END WINDOW DeleteStyleCenter( GetControlHandle('Label_1','Form_1') ) Form_1.Label_1.Value := 'New Value' CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return Nil Function DeleteStyleCenter( hControl ) ChangeStyle( hControl, , ES_CENTER, .F. ) ChangeStyle( hControl, , SS_CENTERIMAGE, .F. ) return .t. [/pre]

Andrey: gfilatov2002 пишет: Это можно сделать с помощью функции ChangeStyle(), см. пример ниже Спасибо БОЛЬШОЕ !

Andrey: Со сменой версии (не помню с какой) теперь какая то фигня с окнами. Создаю основное окно MAIN - не на весь экран. Из него WINDOWTYPE STANDARD. Оно становиться активным и в нем работаю. И стало теперь ВСЕГДА при вызове MODAL окна - появляться MAIN окно ! Т.е. какой то бутерброд: STANDARD окно,поверх MAIN окно, а потом MODAL окно. А должно быть просто STANDARD окно, а потом MODAL окно. Как исправить (убрать) появление MAIN окна поверх STANDARD окна ?

gfilatov2002: Andrey пишет: Как исправить (убрать) появление MAIN окна поверх STANDARD окна ? Есть два пути на выбор: 1) изменить при определении окна класс STANDARD на CHILD; 2) скрывать (а затем снова показывать) главное окно MAIN при вызове MODAL окна.

Andrey: gfilatov2002 пишет: 2) скрывать (а затем снова показывать) главное окно MAIN при вызове MODAL окна. Вот это мне больше нравиться ! А как скрывать ? Делать HIDE или минимизировать окно ?

Haz: Andrey пишет: А как скрывать из толкового словаря русского языка ( Ожегова ) [pre2] СКРЫТЬ, Спрятать, чтобы кто-н. не обнаружил. [/pre2] т.е. Если минимизировать, то кто -то может обнаружить

Andrey: Всем привет. Хочу в GETBOX адреса, отвечающим за буквы сделать перекодировку автоматом латинские буквы в русские. Как это сделать ?

Haz: Andrey пишет: Как это сделать ? самое простое - в процедуре по ON CHANGE делай замену через CharRepl , типа [pre2] SetProperty('Form_1', 'GetBox_1', 'Value', CharRepl("qwert", GetProperty('Form_1', GetBox_1', 'Value'), "йцуке" ) [/pre2]

Andrey: Haz пишет: самое простое - в процедуре по ON CHANGE делай замену через CharRepl , типа Спасибо ! Как получить список устанновленных SET RELATION по базе ? Хотя это вопрос не по МиниГуи, но нужно получить список для контроля.

Haz: Andrey пишет: Как получить список устанновленных SET RELATION по базе начать читать справку, для начала эту http://harbour.edu.pl/clipper/en/ng2dfcc.html

Andrey: Haz пишет: начать читать справку, для начала эту http://harbour.edu.pl/clipper/en/ng2dfcc.html Классная справка. И не знал что есть такая, более подробная чем xHarbour Language Reference Guide.chm

Haz: Andrey пишет: Классная справка эта функция из Clipper, ей 25 лет примерно

Andrey: Haz пишет: эта функция из Clipper, ей 25 лет примерно Так я не про функцию пишу, а про справку. Искать Клиперовскую справку было влом, а здесь всё под рукой, включая Клипер. Ктож упомнит то всё...

Andrey: Привет всем. Вопрос возник по окнам STANDARD. На главной форме Form_Main есть кнопка. В этой кнопке: ACTION { || Form_Main.Minimize,; Form_MyTable(),; Form_Main.Restore } Один раз (первый) срабатывает как положено. На второй раз нет. Почему ? Т.е. я хочу чтобы окно STANDARD во второй раз открылось на экране, а главная форма минимизировалась. ///////////////////////////////////////////////// Function Form_MyTable() .............. IF !_IsWindowActive( cFormName ) DEFINE WINDOW &cFormName ; WINDOWTYPE STANDARD TOPMOST ; ....... ELSE hWndMain := GetFormHandle("Form_Main") IF IsIconic( hWndMain ) // главное окно на экране DoMethod( "Form_Main", "Minimize" ) // минимизировать главное окно ENDIF SwitchToWin( cFormName ) // переключить на тек.форму hWnd := GetFormHandle(cFormName) BringWindowToTop( hWnd ) // поверх всех окон Brw4Focus() // фокус на таблицу ENDIF // !IsWindowActive() RETURN NIL

Andrey: Привет всем ! Вот вопрос возник:

gfilatov2002: Andrey Цветной Таб настроен для размера шрифта до 12 пунктов. Настройка, оптимизированная для шрифтов большего размера, как на рисунке, будет доступна в следующей сборке (уже поправил исходник)

Andrey: gfilatov2002 пишет: будет доступна в следующей сборке (уже поправил исходник) Ура ! Спасибо !

Andrey: Заодно ещё вопрос по Tab:

krutoff: У меня в программе во всех меню пропали иконки. Начал разбираться и вычислил проблему в использовании RichEdit, который я брал практически один в один из примеров. Нашел ошибку в папке RichEditEx. Если вставить оператор SET MENUSTYLE EXTENDED то иконки показываться не будут вообще. В папке RichEditEx_2 такой ошибки уже нет. Скорей всего ошибка в модуле l_richeditbox.prg. Там проги на C, поэтому не докопал... Поменял этот модуль и у меня все заработало.

Andrey: Почему не компилируется вот такое: Form_AYC.Image_0.BackgroundColor := aBColor Синтаксис объекта IMAGE отличается от других объектов ? И в хелпе нет ничего по этому свойству. Как тогда мне "передёрнуть" цвет у уже выведенной PNG картинки на форме ?

Softlog86: Andrey , я у себя такие штуки делаю через SETPROPERTY('Form_AYC','Image_0','BackgroundColor',aBColor) И всё компилируется отлично :)

Andrey: Softlog86 пишет: И всё компилируется отлично :) Компилируется да. Спасибо. Только вот цвет на ходу не передёргивается ... Наверно еще что-то нужно подшаманить...

Andrey: Не, не шаманиться.... Делаю так: ACTION { || aBColor := GetColor(),; Form_AYC.Label_1.BackColor := aBColor,; Form_AYC.Label_2.BackColor := aBColor,; Form_AYC.Label_3.BackColor := aBColor,; Setproperty(ThisWindow.Name,'Image_0','Visible',.F.),; Setproperty(ThisWindow.Name,'Image_0','BackgroundColor',aBColor),; Setproperty(ThisWindow.Name,'Image_0','Visible',.T.),; RedrawAll() } Может ещё как то надо ?

Andrey: Я понял из примера MiniGUI\SAMPLES\BASIC\IMAGE_2 что объект надо убить... А потом заново нарисовать.... Ну блин, ...

Softlog86: Не убить , а [выключить] изменить и [включить] :)

Andrey: Softlog86 пишет: Не убить , а [выключить] изменить и [включить] :) А я что делаю: Setproperty(ThisWindow.Name,'Image_0','Visible',.F.),; Setproperty(ThisWindow.Name,'Image_0','BackgroundColor',aBColor),; Setproperty(ThisWindow.Name,'Image_0','Visible',.T.),;

Andrey: Как правильно поднять EXCEL и оставить его на экране в МиниГуи ? Т.е. я создаю файл EXCEL переключаюсь на него и нужно остаться в EXCEL-е. А у меня управление возвращается на мою программу и она выходит на первый план. ..... hWnd := oExcel:hWnd ShowWindow( hWnd, 3 ) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 BringWindowToTop( hWnd ) // вот здесь в терминалке я ставил INKEY(0) и было для юзера удобно ! // Что поставить для МиниГуи ? RETURN NIL

Andrey: Всем привет ! Непонятка одна... Читаем доку: @ <nRow> ,<nCol> GETBOX <ControlName> ..... [ NOBORDER ] Классный вид, т.е. привычный юзеру. А если я хочу включить "бордюр" для уже выведенного объекта на форме ? SetProperty( ..., ..., "NoBorder" , .F./.T. ) SetProperty( ..., ..., "Border" , .F./.T. ) - не работает...

Dima: Andrey пишет: SetProperty( ..., ..., "NoBorder" , .F./.T. ) Может включить надо так ? SetProperty( ..., ..., "NoBorder" , .F. )

Haz: Dima пишет: Может включить надо так ? SetProperty( ..., ..., "NoBorder" , .F. ) Дима, так скорее не получится. думаю надо стиль окна Getbox менять. Во всяком случае проперти GetBoх сделать это не позволяют ( в исходниках нет такой возможности ).

gfilatov2002: Haz пишет: надо стиль окна Getbox менять С этим засада - стиль WS_BORDER не будет устанавливаться после определения контрола (по-видимому, ограничение WinAPI). Поэтому можно решить "в лоб" эту задачу таким образом (см. ниже) [pre2]/* * MINIGUI - Harbour Win32 GUI library Demo * */ #include "minigui.ch" Function Main DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 300 ; TITLE "MiniGUI GetBox Demo" ; MAIN ; FONT "Arial" SIZE 10 @ 030,30 GETBOX GetBox_1 VALUE "Input value" WIDTH 200 TOOLTIP "GetBox 1" NOBORDER @ 110,30 BUTTONEX BUTTON_1 ; CAPTION "Set Border" ; ACTION SetBorderStyle( 'GetBox_1','Form_1' ); WIDTH 80 ; HEIGHT 28 END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return Nil Function SetBorderStyle( Control, Form ) Local v := _GetValue( Control, Form ) _ReleaseControl( Control, Form ) @ 030,30 GETBOX &Control OF &Form VALUE v WIDTH 200 TOOLTIP Control Form_1.BUTTON_1.Enabled := .F. return .t. [/pre2]

Andrey: gfilatov2002 пишет: С этим засада - стиль WS_BORDER не будет устанавливаться после определения контрола (по-видимому, ограничение WinAPI). Поэтому можно решить "в лоб" эту задачу таким образом (см. ниже) Спасибо БОЛЬШОЕ Григорий ! Эх, опять кучу текста переделывать нужно....

Andrey: Привет всем ! Можно ли заранее определить какой ПОСЛЕДНИЙ тип окна уже открыт ? Т.е. если последнее окно у меня открыто MODAL, то при открытии из него другого типа окна кроме MODAL приводит программу к ошибке и закрытию программы... Или можно поступить как то по другому в этом случае ?

Haz: Andrey пишет: Или можно поступить как то по другому в этом случае ? Можно не открывать из модального окна немодальные. Не понятно зачем самому себе раскладывать грабли ? ЗЫ в минигуи есть псевдопеременная _HMG_IsModalActive, она устанавливается при активации модального окна. См. исходники

SergKis: Andrey пишет:Можно ли заранее определить какой ПОСЛЕДНИЙ тип окна уже открыт ? GetWindowType ( FormName ) - даст тип окна посмотри содержимое: aEval(_HMG_aFormNames, {|n,i| MsgDebug(i, n, _HMG_aFormType [ i ], _HMG_aFormActive [ i ]) })

Haz: Andrey пишет: какой ПОСЛЕДНИЙ тип окна В данном контексте вопрос звучит странно . т.к если открыто модальное окно - ПОСЛЕДНИМ может быть ТОЛЬКО модальное "Non Modal Window can't be activated when a Modal window is active."

Andrey: Всем доброй ночи ! А можно сделать функцию, которая бы показывалась ВЕЗДЕ при нажатии комбинаций клавиш ? Попробовал сделать как в примере SAMPLES\Applications\FOCUS_IT, но у меня в других окнах эти клавиши не срабатывают.... Но может я тест простой написал ? ОДНО окно (CHILD и MODAL) без других объектов...

Andrey: Привет всем ! Как сделать конструкцию из терминалки nKey := INKEY(nTime) в МиниГуи ? ? LASTKEY(nKey) Можно так сделать nKey := INKEYGUI(nTime*1000) ? Или INKEYGUI() ничего не возвращает ?

Haz: Andrey пишет: Или INKEYGUI() ничего не возвращает ? Посмотри в C:\MiniGUI\Doc\ChangeLog.txt что возвращает

Andrey: Почему не всегда показывается картинка на форме ? У меня показывает, на Win2008 нет...

Dima: Andrey пишет: У меня показывает На футболке ? Хоть бы код показал которым выводишь пикчу , по ходу если дергаешь ее из файла то скорее всего забыл его сложить на сервант 2008.

Andrey: Вот код: FUNCTION WinOpenDbf( cTitle ) ..... DEFINE WINDOW Form_TrsfDbf ; ..... WINDOWTYPE MODAL ; NOSHOW ; @ 30, (nWidth-nImgWidth)/2 IMAGE Image_1 ; PICTURE cImgRes ; WIDTH nImgWidth ; HEIGHT nImgHeight .... Form_TrsfDbf.Center Activate Window Form_TrsfDbf NoWait ProcessMessages() // ОБЯЗАТЕЛЬНО ! Чтобы форма ОБНОВИЛАСЬ ! Form_TrsfDbf.Hide // скрыть окно RETURN aRet Строю скрытое окно, а там дальше проверяю, если нужно показать, то делаю domethod("Form_TrsfDbf","Show") // показать окно и включаю бегунки... Ресурсы все в ехе-нике. У меня Win8.1 и у других нормально. А на Win2008 сбоит и то не всегда. Что ещё можно сделать для прорисовки картинки ?

Andrey: А как подключить русский язык для архиватора zip из библиотеки Минигуи ? Дело в том что русские имена файлов в архиве становятся кракозябами... Использую оператор: COMPRESS aFiles ; TO cBackupZip ; BLOCK { | cFile, nPos | ProgressUpdate( nPos, cFile, aSizeFiles, .T. ) } ; LEVEL 7 ; OVERWRITE ; STOREPATH ; FILEPROGRESS { | nPos, nTotal | ProgressFile( nPos, nTotal, .T. ) } ; RESULT lSuccess

Dima: Andrey пишет: А как подключить русский язык для архиватора zip из библиотеки Минигуи ? Самодостаточный пример сюда сложи. PS Русский язык указывается заданием "нужной" кодовой страницы.

Andrey: Dima пишет: Самодостаточный пример сюда сложи. Сделал и выложил. В папке \FR3\ файлы с русскими буквами. Файл с русскими буквами преобразуется в архиве кракозябами... https://cloud.mail.ru/public/8MDq/upmSqF2xn

Haz: Andrey пишет: Файл с русскими буквами преобразуется в архиве кракозябами... Андрей , имена файлов в ZIP-архиве хранятся в кодировке DOS, соответствующей языку локали. это СТАНДАРТ для понимания -> http://www.opennet.ru/tips/info/2494.shtml т.к. в самой библе минизип нет установки нужной OEM кодировки нужно обеспечить выполнение архивирования в кодовой странице "RU866" для русского языка проблему с именами ВНУТРИ архива это решит, но появится новая - GUI интерфейс работает не в OEM так что придется еще и кой какой вывод транслировать в ANSI

Andrey: Haz пишет: т.к. в самой библе минизип нет установки нужной OEM кодировки нужно обеспечить выполнение архивирования в кодовой странице "RU866" для русского языка А есть функция определения русского языка в строке ? Хотя это не сложно сделать, но хочется посмотреть, как делают другие...

Haz: Andrey пишет: хочется посмотреть, как делают другие... Другим тоже хочется посмотреть как делают другие , тем более это не сложно сделать

Andrey: Haz пишет: Другим тоже хочется посмотреть как делают другие , тем более Вот мой вариант: FUNCTION IsRusChar(cStr) LOCAL lRet := .F., nI, cBukva FOR nI := 1 TO LEN(cStr) cBukva := SUBSTR(cStr,nI,1) IF ASC(cBukva) > 127 lRet := .T. EXIT ENDIF NEXT RETURN lRet

Andrey: Haz пишет: Андрей , имена файлов в ZIP-архиве хранятся в кодировке DOS, соответствующей языку локали. это СТАНДАРТ Спасибо БОЛЬШОЕ за разъяснения !

Haz: Andrey пишет: Вот мой вариант: тоже самое ( но нужен hbxpp ) [pre2] Func test( str) local c for each c in str if asc(c) < 127 exit end end return asc(c) < 127 [/pre2]

Dima: Haz пишет: тоже самое ( но нужен hbxpp ) Да похоже что не нужен уже , проверил работает и без него. Я про строку for each c in str

Andrey: А как при выводе в EDITBOX объекта Edit_Memo - показывать последнюю строку переменной ? Т.е. я всегда добавляю в переменную и хочу в окне EDITBOX видеть последнюю строку. cText := Form_Main.Edit_Memo.Value + CRLF .... cText += " .... -> FMEMO" + CRLF Form_Main.Edit_Memo.Value := cText Form_Main.Edit_Memo.Setfocus Исходник - https://cloud.mail.ru/public/Cp97/yM2KA9ba3

gfilatov2002: Andrey пишет: как при выводе в EDITBOX объекта Edit_Memo - показывать последнюю строку переменной ? Посмотри пример ниже [pre2]/* * MINIGUI - Harbour Win32 GUI library Demo * */ #include "minigui.ch" #define WM_VSCROLL 277 // 0x0115 #define SB_PAGEDOWN 3 #define SB_PAGEUP 2 #define SB_BOTTOM 7 Function Main local v := "" for i:=1 to 100 v += strzero(i,3) + CRLF next DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 640 HEIGHT 480 ; TITLE 'Harbour MiniGUI Demo' ; ICON 'DEMO.ICO' ; MAIN ; FONT 'Arial' SIZE 10 DEFINE STATUSBAR STATUSITEM 'HMG Power Ready!' END STATUSBAR @ 30,10 EDITBOX Edit_1 ; WIDTH 410 ; HEIGHT 140 ; VALUE v ; TOOLTIP 'EditBox' ; NOHSCROLL // NOVSCROLL DEFINE BUTTON A ROW 210 COL 10 CAPTION 'PageDown' ACTION ( SendMessage ( GetControlHandle('Edit_1', 'Form_1') , WM_VSCROLL , SB_PAGEDOWN , 0 ) , Form_1.Edit_1.SetFocus ) END BUTTON DEFINE BUTTON B ROW 250 COL 10 CAPTION 'PageUp' ACTION ( SendMessage ( GetControlHandle('Edit_1', 'Form_1') , WM_VSCROLL , SB_PAGEUP , 0 ) , Form_1.Edit_1.SetFocus ) END BUTTON END WINDOW SendMessage ( GetControlHandle('Edit_1', 'Form_1') , WM_VSCROLL , SB_BOTTOM , 0 ) Form_1.Center() Form_1.Activate() Return Nil [/pre2]

Andrey: gfilatov2002 пишет: Посмотри пример ниже Спасибо ОГРОМНОЕ ! То что надо !

Andrey: Имею проблему с ресурсами.... На компе с Server Win2003 использую удалённый рабочий стол в сети. На главной форме моей программы располагаются кнопки с иконками 96х96 color - WinXP (т.е. полная палитра цвета). При старте иконки нормально показываются, но поработав некоторое время в программа, пропадают иконки в меню, даже в других окнах.... Т.е. программа работает а иконок и картинок нет.... С чем это связано ? Как исправить баг ? Работал с несколькими другими удалёнными рабочими столами, такого не было...

Haz: Andrey пишет: Т.е. программа работает а иконок и картинок нет... Это не относится к Minigui. Поищи в гугле , может кто решил. Если это утешит - то вот тут друзья по несчастью из 1С http://forum.infostart.ru/forum10/topic32848/

Andrey: Спасибо большое, Haz ! Я подозревал, что дело не в МиниГуи, просто не мог заказчику это обосновать... Под Win2008 и 2012 такого нет.

Andrey: Всем привет ! Почему при команде на кнопке: SetProperty( сForm, cObj, "Enabled", .F. ) одни иконки дают четкую серую картинку, а другие просто квадрат ? Я понимаю что это не МиниГуи виноват, просто нужно чтобы всегда была картинка ! Фон у этих иконок прозрачный !

Dima: Наверное фон разный у этих иконок или связано с прозрачностью.

Haz: Подниму сюда глюк ScrollBar в TsBrowse при RDDADS, флейм не все читают, а тут прочитав уже народ в курсе будет . Скажу сразу как победить не нашел, похоже с этим надо смириться. Описание глюка: При использовании SQL запросов содержащих сложный ORDER BY ( из двух и более значений ) в RDDADS нет способа возврата индекса сортировки ( логического порядкового номера записи). Когда результат такого запроса показываем в TSBrowse , то скроллбар при навигации по базе скачет вверх-вниз беспорядочно, Причина в том что скрол пытаясь получить значение для расчета позиции , получает физический номер записи , а не логический Кому интересно - тут пример https://yadi.sk/d/9wpBy1V2nrfWG Что в примере В примере создается тестовая база и смотрится в бровсе. В EditBox показан запрос , по которому ее видим. SELECT * FROM ScrollFuck /*ORDER BY FirstName, LastName*/ комменты в запросе игнорируются , т.е. выполнен только SELECT * FROM ScrollFuck В этом случае скроллбар адекватен и все ОК. Меняем запрос удаляя знаки коммента , получив SELECT * FROM ScrollFuck ORDER BY FirstName, LastName Нажимаем кнопку SQL и при навигации стрелками вверх-низ с клавы или колесом мыши , видим всю дурь скрола. PS. Перерыл весь исходник RDDADS по слогам - в нем нет способа получить логический номер. Выкурил хелп от ADS - аналогично. Короче бросил ) Если что. привинчу костыли на скрол в виде получения позиции из специально построенного хеш массива

Andrey: Спасибо за сообщение ! Будем знать.

Andrey: А как сделать, чтобы при 1-ом показе Tsbrowse показывалась пустая таблица ? А уже потом, после нажатия кнопки - показывались данные....

Haz: Выполнить первый запрос с условием которое вернет пустую таблицу. К примеру поле ID типа AutoInc и не может принимать значения < 0 тогда запрос SELECT * FROM ScrollFuck WHERE ID < 0 даст пусто в примере можно так cSql := "SELECT * FROM ScrollFuck /*ORDER BY FirstName, LastName*/" DOSQL('SF', cSql + " WHERE ID < 0 ")

Andrey: Haz пишет: Выполнить первый запрос с условием которое вернет пустую таблицу. Таблица то пустая, а в ней нет строк.... А я хочу чтобы была пустая таблица, с линиями... Юзеру будет легче понять - я уже показывал такой вариант. Юзера тормозят... Говорят а почему нет таблицы ?

Haz: Andrey пишет: А я хочу чтобы была пустая таблица, с линиями... Строки в таблице рисуются по записям. Какие строки на пустой базе ? Сделать можно что угодно 1. При первом показе пихать клон базы с пустыми полями 2. При первом показе делать аппенды в базу и показывать только их , потом тереть 3. При первом показе поверх бровса выводить разграфленный битмап, потом его прятать Только зачем ????

Dima: Haz пишет: Только зачем ???? Он хочет как в ёкселе :) Там разметка есть всегда.

Andrey: Haz пишет: Только зачем ???? Чтобы юзера не доставали.... Картинка им не нравиться. Пустая таблица, а ячеек нет. В Екселе пустая таблица - ячейки есть, а здесь нет. Haz пишет: 1. При первом показе пихать клон базы с пустыми полями Наверное это самый лучший вариант ! Haz пишет: 3. При первом показе поверх бровса выводить разграфленный битмап, потом его прятать Для разных разрешений наверно будет трудно это сделать ? Хотя картинку легче прятать...

Andrey: При ошибках: Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland Error: Unresolved external '_HB_FUN_MYPATHFILES' referenced from W:\HB_PROJECT\ кракозябы \OBJ\TestHMG1.OBJ hbmk2[IEntrepreneur]: Error: Running linker. 2 Как убрать кракозябы в файле ошибок ? Это папка на русском. Если на английском, то пишется нормально.

Andrey: Всем привет ! Если я задаю при старте изменения размера окна, а потом блокирую на время это таким кодом: // ------- заблокировать изменение размеров окна ---------- SetProperty(cForm, "Sizable" , .F. ) // NOSIZE SetProperty(cForm, "MaxButton" , .F. ) // NOMAXIMIZE SetProperty(cForm, "MinButton" , .F. ) // NOMINIMIZE То размеры объектов на окне меняются. Так должно быть или что то не так делаю ?

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

Andrey: Пример сложно дать. Он большой... Постараюсь сделать... А на картинке выглядит так: Еще после запрета изменения размеров формы в Tbrowse накладывается фильтр на базу и кол-во записей меняется и вертикальный скролинг уходит и появляется ПУСТОТА между окном и Tbrowse. Это глюк или я что то не так делаю ?

Andrey: Вот ещё одна картинка:

Haz: Andrey пишет: вертикальный скролинг уходит ::ResetVscroll(lInit) делал перед ::Refresh() ?

Andrey: Не помогает... Пробовал по разному: и после и перед oBrw1:Refresh(.T.) и с параметрами и без параметров. У меня на кнопку повешен блок: { || MyButtonRun2(), DbSetorder(1), ; oBrw1:Reset(), oBrw1:ResetVScroll(.T.), oBrw1:Refresh(.T.) , ; SetProperty(oBrw1:cParentWnd, oBrw1:cControlName, "Enabled", .T.),; DoMethod(oBrw1:cParentWnd, oBrw1:cControlName, "SetFocus") } в MyButtonRun2(): SetProperty(oBrw1:cParentWnd, oBrw1:cControlName, "Enabled", .F.) // ------- заблокировать изменение размеров окна ---------- SetProperty(cForm, "Sizable" , .F. ) // NOSIZE SetProperty(cForm, "MaxButton" , .F. ) // NOMAXIMIZE SetProperty(cForm, "MinButton" , .F. ) // NOMINIMIZE ....

Haz: вертикальный скролл автоматом пропадает когда строк меньше чем может показать бровс. [pre2] If ::nLen <= ::nRowCount() nMin := nMax := 0 Else nMin := Min( 1, ::nLen ) nMax := Min( ::nLen, MAX_POS ) EndIf [/pre2] Можно его включить принудительно кодом [pre2] If oBrw:oVScroll != Nil oBrw:oVScroll:SetRange( nMin, nMax ) :oBrwoVScroll:SetPos( oBrw:RelPos( oBrw:nLogicPos() ) ) EndIf [/pre2]

Andrey: А почему так ? На ХР маленькая дырка, на Win7-8 больше. Разве функции nFWidth := GetClientWidth( GetFormHandle( _HMG_ThisFormName ) ) nFHeight := GetClientHeight( GetFormHandle( _HMG_ThisFormName ) ) не определяют правильно размеры ? Или Tsbrowse сам меняет размеры - при смене изменений: // ------- заблокировать изменение размеров окна ---------- SetProperty(cForm, "Sizable" , .F. ) // NOSIZE SetProperty(cForm, "MaxButton" , .F. ) // NOMAXIMIZE SetProperty(cForm, "MinButton" , .F. ) // NOMINIMIZE

Andrey: Haz пишет: Можно его включить принудительно кодом Спасибо, сделал, только чуток исправив код. Появился скролинг, но дырка остается.... Наверно все таки сам Tsbrowse меняет свои размеры ? Или я неправ ?

Haz: Andrey пишет: Наверно все таки сам Tsbrowse меняет свои размеры ? Или я неправ ? Сам не меняет точно. Это можно сделать только изменив размеры окна oBrw:hWnd принудительно

Andrey: Странненько.... Взял после изменения - добавил пересчёт размеров формы. oBrw1:Reset() oBrw1:Refresh(.T.) oBrw1:ResetVScroll(.T.) If oBrw1:oVScroll != Nil oBrw1:oVScroll:SetRange( nMin, nMax ) oBrw1:oVScroll:SetPos( oBrw1:RelPos( oBrw1:nLogicPos() ) ) EndIf SetProperty(oBrw1:cParentWnd, oBrw1:cControlName, "Enabled", .T.) ResizeForma1(.F.) // без перерисовок кнопок RETURN NIL И получается фигня - размеры LABEL объектов тоже другие, кнопки налезают на бровс. Может при создании окна бровса нужно делать что то такое ? DEFINE TBROWSE oBrw1 ; AT 1 + iif( IsVistaOrLater(), GetBorderWidth()/2, 0 ), ; 1 + iif( IsVistaOrLater(), GetBorderHeight()/2, 0 ) ; WIDTH test.WIDTH - 2 * GetBorderWidth() ; HEIGHT test.HEIGHT - GetTitleHeight() .... Хотя у меня при изменении размера стоит так: FUNCTION ResizeForma1(lButton) LOCAL cForm := _HMG_ThisFormName LOCAL hWnd := GetFormHandle(cForm) LOCAL actpos:={0,0,0,0}, i, w, h, nWLbl LOCAL nHStBar := GetWindowHeight(GetControlHandle("Label_StatusBar", cForm)) // высота StatusBar внизу окна LOCAL nFWidth := GetClientWidth( GetFormHandle( cForm ) ) LOCAL nFHeight := GetClientHeight( GetFormHandle( cForm ) ) DEFAULT lButton := .T. GetClientRect(hWnd, actpos) w := actpos[3]-actpos[1] h := actpos[4]-actpos[2] - oBrw1:nTop - nHStBar IF w !=0 .and. h != 0 nWLbl := GetProperty(cForm, "Label_0", "Col" ) SetProperty(cForm, "Label_0", "Width", nFWidth - nWLbl ) SetProperty(cForm, "Label_1", "Width", nFWidth - nWLbl ) SetProperty(cForm, "Label_2", "Width", nFWidth - nWLbl ) SetProperty(cForm, "Label_3", "Width", nFWidth - nWLbl ) SetProperty(cForm, "Label_4", "Width", nFWidth - nWLbl ) SetProperty(oBrw1:cParentWnd, oBrw1:cControlName, "Enabled", .F.) _SetControlHeight( oBrw1:cControlName, oBrw1:cParentWnd, h) _SetControlWidth ( oBrw1:cControlName, oBrw1:cParentWnd, w) oBrw1:Paint() // Иначе не перерисовываются вертикальные разделители SetProperty(oBrw1:cParentWnd, oBrw1:cControlName, "Enabled", .T.) //oBrw1:Display() //SetNoHoles( oBrw1 ) // убрать дырку внизу таблицы перед подвалом oBrw1:Refresh(.T.) // перечитывает данные в таблице IF lButton MyButtonBar(.T.) // перепостроить кнопки на форме ENDIF Endif DoMethod(oBrw1:cParentWnd, oBrw1:cControlName, "SetFocus") Return Nil

Andrey: Нашёл где собака зарыта: ДО: actpos= {0, 0, 1259, 979} HStBar= 70 w= 1259 h= 761 // ------- заблокировать изменение размеров окна ---------- SetProperty(cForm, "Sizable" , .F. ) // NOSIZE SetProperty(cForm, "MaxButton" , .F. ) // NOMAXIMIZE SetProperty(cForm, "MinButton" , .F. ) // NOMINIMIZE ПОСЛЕ: actpos= {0, 0, 1269, 989} nHStBar= 70 w= 1269 h= 771 Т.е. после запрета изменения размера окна, размер окна меняется на 10х10 пикселей !!! Разве так должно быть ?

Haz: 1 Если после первого показа бровса сразу вызвать пересчет , то что ? 2 Перепроверь свой пересчет размеров, возможно там не то считает.

Haz: Haz пишет: Т.е. после запрета изменения размера окна, размер окна меняется на 10х10 пикселей !!! Разве так должно быть ? скорее всего косяк

Andrey: Всем привет ! Вопрос такой созрел: как из другого объекта можно раскрыть комбобох ? Т.е. допустим при нажатии мышкой на картинке , открылся комбобох. @ 10, nFWidth - 30 IMAGE Image_1 PICTURE aFlags[M->nPubLang] WIDTH 26 HEIGHT 26 ; OnMouseHover RC_CURSOR( "MINIGUI_FINGER" ) ..... ; ACTION { || Forma_1.ComboEx_1.Show, Forma_1.ComboEx_1.?????? }

SergKis: Andrey пишет: как из другого объекта можно раскрыть комбобох PostMessage( GetControlHandle(<ComboBoxName>, cFormName), WM_KEYDOWN, VK_F4, 0)

Andrey: SergKis пишет: PostMessage( GetControlHandle(<ComboBoxName>, cFormName), WM_KEYDOWN, VK_F4, 0) Не срабатывает ! ACTION { || Forma_1.ComboEx_1.Show ,; PostMessage( GetControlHandle( "ComboEx_1", "Forma_1" ), WM_KEYDOWN, VK_F4, 0) }

SergKis: Andrey а так ACTION { |hCB| Forma_1.ComboEx_1.Show , hCB := GetControlHandle( "ComboEx_1", "Forma_1" ), ; SetFocus(hCB), PostMessage( hCB, WM_KEYDOWN, VK_F4, 0) }

Andrey: SergKis пишет: а так Тоже не работает ...

gfilatov2002: Andrey Посмотри функцию ComboboxShowList() в примере samples\Advanced\FileMan

SergKis: Andrey пишет:Тоже не работае у меня просто combobox и msvc работает, твой вариант работает так: [pre2] ACTION { || Forma_1.ComboEx_1.Show, ; SetFocus(GetControlHandle( "ComboEx_1", "Forma_1" )), ; _PushKey ( VK_F4 ) } [/pre2]

Andrey: SergKis пишет: у меня просто combobox и msvc работает, твой вариант работает так: Ура ! Заработало ! Спасибо !

Andrey: gfilatov2002 пишет: Посмотри функцию ComboboxShowList() в примере samples\Advanced\FileMan Спасибо !

Andrey: Всем привет ! Возможно ли закрыть показ вывода объектов на форму ? А потом разрешить показ. А то забодало мельтешение объектов на форме при пересчете формы.

Vlad04: Создаем в дизайнере форму, добавляем Тоолбар и ... все вываливается с ошибкой.

gfilatov2002: Vlad04 пишет: вываливается с ошибкой Благодарю за сообщение! Поправил эту ошибку - обновить Ide можно через меню Help->Update C праздником!

Vlad04: Спасибо огромное за оперативность! Вас так же!

Vlad04: И еще просьба. Не могли бы повторить один из примеров c:\MiniGUI\SAMPLES\BASIC\mdi\** но с использованием Дизайнера. (Что поделаешь - нравится мне работать с Дизайнером, точнее - комбинированный метод)

Andrey: Почему криво работает функция ChangeFileExt() ? Делаю так cFileDbf := "Customer.dbf" cFileDbfNew := ChangeFileExt( cFileDbf, "_new.dbf" ) cFileDbfMemo := ChangeFileExt( cFileDbf, "_new.fpt" ) Возвращает спереди ещё дополнительный знак "\", т.е. "\Customer_new.dbf" и "\Customer_new.fpt" Или так задумано ? И чем тогда обрезать расширение файла, по старинке - как в Клипере SUBSTR(cFile,1,RAT(".",cFile)-1 ) ?

Dima: Andrey Живет она в i_pseudofunc.ch , переделай если надо. Andrey пишет: cFileDbfNew := ChangeFileExt( cFileDbf, "_new.dbf" ) Работает она я так понял с расширением (глубже не копал ) а ты указал часть имени + расширение

Haz: Andrey пишет: Или так задумано ? так задумано [pre2] #xtranslate ChangeFileExt( <cFile>, <cExt> ) ; => ; cFilePath( <cFile> ) + "\" + cFileNoExt( <cFile> ) + <cExt> [/pre2] И чем тогда обрезать расширение файла, по старинке - как в Клипере SUBSTR(cFile,1,RAT(".",cFile)-1 ) ? по старинке или используй [pre2] hb_FNameSplit( cFileSpec, @cPath, @cFile, @cExt ) [/pre2]

Andrey: Haz пишет: или используй Спасибо БОЛЬШОЕ !

Andrey: Dima пишет: а ты указал часть имени + расширение Понял. Если бы полный путь указал, не было бы ошибки.

Andrey: Вопрос по окнам созрел. Делаю MAIN окно. Из него вызываю WINDOWTYPE STANDARD , а из этого окна вызываю карточку, окно: MODAL NOSYSMENU ; После переключения программы, мне нужно переключаться на MAIN окно, там оказывается сидит эта карточка. Но иконка и надпись в MAIN окна - свои. Юзера путаются. Что делать ? 1) менять тип окна карточки ? 2) менять иконку и надпись MAIN окна на карточку, а потом возвращать ?

Andrey: Всем привет ! А как сделать в объекте TEXTBOX не показывался ноль ? INPUTMASK '@Z 99999' - не прокатывает... FORMAT '@Z 99999' - тоже не прокатывает... @ 20, 80 TEXTBOX TextBox_Dolg VALUE 0 WIDTH 175 HEIGHT nFontSize*2 ; BACKCOLOR WHITE NUMERIC INPUTMASK '99999' RIGHTALIGN ; ON CHANGE {|| nDolg := Form_1.TextBox_Dolg.Value }

Andrey: Подскажите люди добрые, как получить инвертный цвет из любого цвета ? Может функция есть для этого ?

Haz: Andrey пишет: Подскажите люди добрые, как получить инвертный цвет из любого цвета ? Может функция есть для этого ? Гуглить http://www.cyberforum.ru/csharp-net/thread302302.html

Andrey: C# public Color invert(Color c) { return Color.FromArgb(c.A, 0xFF - c.R, 0xFF - c.G, 0xFF - c.B); } Блин, и как это переделать ?

Haz: Andrey пишет: Блин, и как это переделать ? а что тут сложного ? 1 разложить цвет на компоненты R,G,B 2 получить новые компоненты R1 := oxFF - R , G1 := 0XFF -G и B1 := 0xFF - B 3 собрать цвет nColor := RGB( R1, G1, B1 )

Andrey: Haz пишет: 2 получить новые компоненты R1 := oxFF - R , G1 := 0XFF -G и B1 := 0xFF - B Вот так понятней ! Спасибо !

Andrey: Ещё вопрос возник по кнопке. Надписи не всегда в кнопке помещаются.... Обрезает кнопка. Как определить - поместиться надпись в кнопке или нет (чтобы шрифт потом уменьшить) ?

SergKis: Andrey ты в своем примере уже проделывал такое клиент.width и подбираешь размер фонта под width

Andrey: SergKis пишет: ты в своем примере уже проделывал такое клиент.width и подбираешь размер фонта под width Под Tsbrowse делал. А под кнопку нет. Кнопка же с картинкой, слева или справа. Т.е. какая ширина картинки в кнопке ? Отступы разные в кнопке. Какая ширина между картинкой и надписью ? Можно коеффицент ввести, но на разных разрешениях экрана использую разную ширину кнопок, вот и проблема... 1) Как подсчитать разрешённый максимальный размер ширины надписи на кнопке ???? 2) Кол-во строк в кнопке тоже бывает не видно. Значит нужно подсчитать кол-во видимых строк в кнопке. Как ?

Andrey: Вот так получается: Нужно уменьшать шрифт. А как ?

Andrey: Не работают клавиши PgUp и PgDw на форме. Код примерно такой: DEFINE WINDOW Form_1 ; WINDOWTYPE STANDARD TOPMOST ; NOMAXIMIZE NOSIZE NOSYSMENU ; ......... DEFINE WINDOW Win_2 ; VIRTUAL HEIGHT nHeight*2 ; WINDOWTYPE PANEL ......... END WINDOW ON KEY PRIOR ACTION SendMessage( Application.Handle, WM_VSCROLL, SB_PAGEUP, 0 ) ON KEY NEXT ACTION SendMessage( Application.Handle, WM_VSCROLL, SB_PAGEDOWN, 0 ) ON KEY UP ACTION SendMessage( Application.Handle, WM_VSCROLL, SB_LINEUP, 0 ) ON KEY DOWN ACTION SendMessage( Application.Handle, WM_VSCROLL, SB_LINEDOWN, 0 ) END WINDOW Что не так делаю ?

gfilatov2002: Andrey пишет: Что не так делаю ? Поскольку эти клавиши определяются для окна типа STANDARD (а не для основного окна приложения) надо заменить Application.Handle на GetFormHandle("Form_1")

Andrey: Спасибо БОЛЬШОЕ, Григорий !

Andrey: gfilatov2002 пишет: GetFormHandle("Form_1") Не заработало... Поставил GetFormHandle("Win_2") - только тогда заработало !

Andrey: Всем привет ! Опять непонятка с окнами... С окна WINDOWTYPE STANDARD c Tsbrowe вызываю первое окно MODAL (тоже c Tsbrowe). Далее вызываю прелодер с ожиданием (тоже MODAL), строю другое (второе) MODAL окно с шестью Tab+Tsbrowse, заполняю данными, закрываю прелодер и вуаля - НЕТ этого MODAL окно с шестью Tab+Tsbrowse. Это окно под ПЕРВЫМ MODAL. Переключиться не могу. Только после закрытия ПЕРВОГО MODAL могу переключиться на второе окно. Как сделать активным второй MODAL ? Пробовал на второе окно ставить SetProperty("Form_2", "Topmost", .T.) - окно на переднем плане, но нажать на нём ничего нельзя..., только после закрытия первого MODAL можно работать со вторым окном.

Andrey: Andrey пишет: Далее вызываю прелодер с ожиданием (тоже MODAL) Убрал это прелодер. Второе модал окно заработало ! Т.е. нормально работает, фокус на втором окне сразу. Вывод: В прелодере (\SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg) что-то портит вывод MODAL окон ! Подскажите пожалуйста, что-там нужно исправить ?

Andrey: Подскажите пожалуйста, как курсор мышки программно убрать с окна или передвинуть на нужные координаты ?

Dima: Andrey пишет: Подскажите пожалуйста, как курсор мышки программно убрать с окна или передвинуть на нужные координаты ? Смотри пост Григория намбер 597

Andrey: Dima пишет: Смотри пост Григория намбер 597 Подскажи как смотреть/искать посты по номерам ?

Dima: Andrey http://clipper.borda.ru/?1-20-0-00000322-000-0-0-1192707682

Andrey: Dima , спасибо !

Andrey: Не совсем то получается. Создаю форму: cFormName, на форму ставлю картинку, форму центрирую. В процедуре делаю следующее: ON INIT {|| SetProperty( cFormName, "Image_0","Setfocus"), SetCursorPos( nImgRow, nImgCol ) } Как узнать координаты окна cFormName относительно начала окна 0,0 ?

Haz: Andrey пишет: Как узнать координаты окна cFormName относительно начала окна 0,0 Гусары молчать Свои примеры глянь getclientrect как то так

Andrey: Я нашел функцию hWnd := GetFormHandle(cFormName) GetClientRect(hWnd, actpos) // размеры окна MsgDebug(actpos) Но она же выдаёт размеры окна, т.е. типа 0,0,1024,660 Окно же само по центру экрана. Можно же конечно посчитать разрешение экрана - размеры окна, поделить на 2 минус... и т.д. Есть готовая функция или нет ?

Haz: Andrey пишет: Но она же выдаёт размеры окна, т.е. типа 0,0,1024,660 Это точно? Пробовал ? Вроде всегда выдавала координаты. Проперти окна проверял? Пишу с мобилы. Но вопрос чес слово не серьезный.

Andrey: Да, пробовал. Не то я делал. Нужно было другую функцию брать. GetWindowRect( hWnd, actpos ) и всё... Всем спасибо !

Haz: Andrey пишет: Нужно было другую функцию брать. GetWindowRect( hWnd, actpos ) и всё... Кстати не знал что меж ними разница есть GetClientRect() лишняя какая то получается , GetWindowRect() более информативна

Andrey: Haz пишет: GetClientRect() лишняя какая то получается Нет не лишняя. Очень часто использую.

Haz: Andrey пишет: Очень часто использую. для чего ?

Andrey: Haz пишет: для чего ? nHStBar := GetWindowHeight(GetControlHandle('STATUSBAR', 'Form_0')) // высота StatusBar и т.д.

Andrey: Как убрать предупреждение при компиляции с ключом -w2 -es2: form_test.prg(351) Warning W0004 Codeblock parameter 'A' declared but not used in function "CREATEBROWSE" Я понимаю, что переменную такую не использую, но и удалить её не хочется (на будущее пригодиться): // переназначим цвет: строка маркера/курсора текущй записи базы oBrwA:SetColor( { 6 }, { { |a,b,c| IF( c:nCell == b,{ 4915199, 255 }, { Rgb( 255, 192, 160 ), Rgb( 255, 226, 0 ) }) } } )

gfilatov2002: Andrey пишет: Как убрать предупреждение [pre2]{ |a,b,c| IF( c:nCell == b,{ 4915199, 255 }, { Rgb( 255, 192, 160 ), Rgb( 255, 226, 0 ), a:=NIL }[/pre2]

Haz: Haz пишет: GetClientRect() лишняя какая то получается , GetWindowRect() более информативна Уяснил для себя разницу в функциях GetClientRect() GetWindowRect() http://shot.qip.ru/00Qiof-3ZkNFxXnN/

SergKis: Haz пишет:Уяснил для себя разницу в функциях GetClientRect() ... Функция применима и к контролам и к окнам, пример исп. есть в TBrw_create(...) \Advanced\Tsb_seek_2

Haz: SergKis пишет: Функция применима и к контролам и к окнам Спасиб. И без примера понятно , функция возвращает размер рабочего поля окна в относительных координатах начиная с 0, 0 .

Andrey: Всем привет ! Использую объект TAB. На маленьких разрешениях объекты которые положил на TAB уезжают вниз экрана. Можно ли как то сделать виртуальный TAB, чтобы объекты на нём можно было сдвигать вверх или вниз ? Как в примере MiniGUI\SAMPLES\BASIC\ExtractIcon\demo2.prg

Andrey: Использую объект GetBox. 1) Как в нём сделать переход на другие объекты (КНОПКУ) по клавише ENTER ? 2) Как сделать для числа отбивку влево (как у текста) ? Заранее спасибо за помощь !

Haz: Andrey пишет: 1) Как в нём сделать переход на другие объекты (КНОПКУ) по клавише ENTER ? В примере C:\MiniGUI\SAMPLES\BASIC\GetBox\demo.prg вроде так и есть 2) Как сделать для числа отбивку влево (как у текста) ? Изучить наконец шаблоны и функции GET объектов, они унаследованы еще из CLIPPERа а то подобные вопросы , учитывая твой стаж просто ставят в тупик

Andrey: Haz пишет: Изучить наконец шаблоны и функции GET объектов, они унаследованы еще из CLIPPER А я думал как у TEXTBOX типа RIGHTALIGN и NUMERIC и ON ENTER ( Форма.Кнопка.Setfocus ) .... Понял. Спасибо. Haz пишет: В примере C:\MiniGUI\SAMPLES\BASIC\GetBox\demo.prg так и есть Да я его до этого смотрел. Не то... Делаю на форме один GETBOX и две кнопки. На кнопках стоит NOTABSTOP. Как после ввода в GETBOX при нажатии на ENTER перейти на кнопку ( Форма.Кнопка.Setfocus ) ?

Haz: Andrey пишет: Да я его до этого смотрел. Не то... Делаю на форме один GETBOX и две кнопки. На кнопках стоит NOTABSTOP. попробуй на Valid это повесить ( Форма.Кнопка.Setfocus )

Haz: Andrey пишет: На кнопках стоит NOTABSTOP. в этом кстати какой смысл ?

Andrey: Haz пишет: в этом кстати какой смысл ? SergKis посоветовал.

Andrey: Кто как делает для Больших Фонтов - Крупный размер 120 (точек/дюйм) в объекте GETBOX ? Приходиться писать так: @ 40, 40 GETBOX Get_1 .... ; HEIGHT nFontSize*IIF(LargeFonts(),3,2) ; Для LABEL есть AUTOSIZE, а для GETBOX что можно использовать ?

Haz: Andrey пишет: SergKis посоветовал. Однако аргумент а самому-то зачем

Andrey: Всем привет ! Как сделать курсор мышки - песочные часы ? Есть ли в МиниГуи готовая модель или самому нужно делать (искать) ?

Dima: Andrey пишет: (искать) Ага в примерах Минигуи )) C:\MiniGUI\SAMPLES\BASIC\CURSOR

Andrey: Dima пишет: Ага в примерах Минигуи )) Это видел, спасибо. Мне песочные часы нужно. Если нет, то нет...

Andrey: Ещё вопрос по курсорам возник. Мне нужен кусор мышки ожидания при переходе с Tbrowse на карточку. Как это сделать ? Судя по описанию: SetWaitCursor( Application.Handle ) // Курсор мышки - ожидание нужно передавать Application.Handle в ту функцию, где курсор нужно убирать ? Или я неправ. Но у меня курсор ожидания так и не выходит... вообще ....

Andrey: Всем привет ! Вопрос простой возник. На форме есть кнопка BUTTONEX Button_Dbf с обработкой ACTION {|| ..... } Как эмулировать нажатие на эту кнопку ? Т.е. хочу в ON INIT формы поставить "нажатие на эту кнопку".

SergKis: Andrey поставь фокус на нее и пошли _pushkey(VK_SPACE)

Andrey: Спасибо большое !

Andrey: Всем привет ! Использую текстовый GETBOX Как сделать чтобы центровка текста была по центру ? В свойствах нашёл только RIGHTALIGN ....

Dima: Andrey пишет: Как сделать чтобы центровка текста была по центру ? Похоже пока ни как.

SergKis: Andrey пишет: Как сделать чтобы центровка текста была по центру ? SetWidowStyle(hWnd, ES_LEFT\ES_CENTER\ES_RIGHT, .T.\.F.) в минигуи вроде такая

Andrey: SergKis пишет: SetWidowStyle(hWnd, ES_LEFT\ES_CENTER\ES_RIGHT, .T.\.F.) в минигуи вроде такая А как её прикрутить к GETBOX ? cObj := "GetBox_"+HB_NtoS(nJ)+"x"+HB_NtoS(nI) @ nRowGet, nCol GETBOX &cObj VALUE aTxtDim[nJ,nI] ; WIDTH nGetWidth HEIGHT nFontSize*IIF(LargeFonts(),3,2) ; BACKCOLOR { aBackColor, aBackColor, {200,255,255} } ; FONTCOLOR { aFontColor, aFontColor, aFontColor } ; ON CHANGE { || aTxtDim[nJ,nI] := SetProperty( ThisWindow.Name, cObj, "Value" ) }

Dima: Andrey пишет: А как её прикрутить к GETBOX ? Как то так SetWidowStyle(GetFormHandle( "Form_1" ), ES_CENTER, .T.) только Минигуи ни чё не знает о SetWidowStyle

SergKis: Andrey пишет А как её прикрутить к GETBOX ? @ ... GETBOX ... SetWindowStyle(GetControlHandle(cGetBoxName, cFormName), ES_CENTER, .T.)

SergKis: Dima пишет только Минигуи ни чё не знает о SetWidowStyle должна знать, c_window.c[pre2] HB_FUNC( SETWINDOWSTYLE ) { LONG_PTR Style = GetWindowLongPtr( ( HWND ) HB_PARNL( 1 ), GWL_STYLE ); SetWindowLongPtr( ( HWND ) HB_PARNL( 1 ), GWL_STYLE, ( hb_parl( 3 ) ) ? Style | ( LONG_PTR ) HB_PARNL( 2 ) : Style & ( ~( LONG_PTR ) HB_PARNL( 2 ) ) ); } [/pre2] сам пользую самопальную

Dima: SergKis пишет: SetWidowStyle похоже n пропущена вот у меня и не нашло

SergKis: Dima пишет похоже n пропущена n пропустил это да - маленький экран и клава - не увидел

Andrey: Не собирается, выдаёт ошибку: form_PrnA20.prg(300) Warning W0001 Ambiguous reference 'ES_CENTER' No code generated. hbmk2[form_1]: Error: Running Harbour compiler (embedded). 1 Проехали... Подключил #include "i_winuser.ch" Красиво получается !!! Спасибо БОЛЬШОЕ !

Andrey: Григорий, в МиниГуи есть у тебя функция MsgDebug() - удачная функция. Но вот стандартной функции отладки вывода в файл нет. Я понимаю, каждый пишет свои функции, но для полноты содержания отладки было бы неплохо иметь такую функцию. Может поместишь в библиотеку функцию SergKis - MsgLog() ? Она короткая и удобная.

Dima: Andrey StrFile()

Andrey: Dima пишет: Andrey StrFile() Неудобен. Нет вывода массива, и т.д., т.е. нужно ручками преобразовывать в строку нужные тебе переменные. А в функции MsgLog() это делается автоматом... И не задумываешься, что делать, написал MsgLog("aDim=", aDim) и всё. Я эту функцию тащу в каждый свой проект. Даже небольшой пример и то удобней с ней отлаживать. Вот и хотелось бы иметь встроенную функцию MsgLog(), как и MsgDebug() !

SergKis: Andrey пишет Может поместишь в библиотекуфункцию SergKis - MsgLog() ? тогда другой вариант [pre2] FUNCTION MLogFile( cFile ) // Получить \ установить имя файла вывода ф-ии MLog(...) LOCAL cOld STATIC MLog_File := "_MsgLog.txt" cOld := MLog_File If cFile != NIL; MLog_File := cFile EndIf RETURN cOld FUNCTION MLog( ... ) // Сначала идет CRLF (первый параметер .T.\.F.) потом данные вывода LOCAL i, k LOCAL aParams := hb_aParams() LOCAL nParams := len(aParams) LOCAL hFile, cFile := MLogFile(), xVal, cTp, lCrLf := .T. hFile := iif( File(cFile), FOpen(cFile, 2) , FCreate(cFile) ) IF hFile < 1; RETURN .F. ENDIF FSeek( hFile, 0, 2) IF nParams > 0 k := 1 If hb_IsLogical(aParams[1]) k := 2 lCrLf := aParams[1] EndIf If lCrLf FWrite( hFile, CRLF, 2 ) EndIf FOR i := k TO nParams xVal := aParams[ i ] cTp := ValType( xVal ) IF cTp == 'C' ; xVal := iif(Empty(xVal), "'"+"'", trim(xVal)) ELSEIF cTp == 'N' ; xVal := hb_ntos(xVal) ELSEIF cTp == 'L' ; xVal := iif(xVal, ".T.", ".F.") ELSEIF cTp == 'D' ; xVal := hb_DtoC(xVal, 'DD.MM.YYYY') ELSEIF cTp == 'A' ; xVal := "ARRAY[" + hb_NToS( Len(xVal) ) + "]" ELSEIF cTp == 'H' ; xVal := "HASH[" + hb_NToS( Len(xVal) ) + "]" ELSEIF cTp == 'B' ; xVal := "'" + "B" + "'" ELSEIF cTp == 'T' ; xVal := hb_TSToStr(xVal, .T.) ELSEIF cTp == 'U' ; xVal := 'NIL' ELSE ; xVal := "'" + cTp + "'" ENDIF FWrite(hFile, xVal + Chr(9) ) NEXT ELSE FWrite( hFile, CRLF, 2 ) ENDIF FClose( hFile ) RETURN .T. в комплекте с: #command ? [<explist,...>] => MLog( .T., <explist> ) #command ?? [<explist,...>] => MLog( .F., <explist> ) #command ?a [<arr>] => aEval( <arr>, {|xv,ne| MLog(.T., ne, xv), MLog() }) #command ?v [<arr>] => aEval( <arr>, {|xv,ne| MLog(.T., ne, iif( Valtype(xv)=="A", hb_valtoexp(xv), xv )), MLog() }) использовать ? nKey, chr(nKey), cKey, cTxt, aDim ?a aDim ?v aDim ... [/pre2]

SergKis: Andrey пишет Я эту функцию тащу в каждый свой проект А сделать общую для всех проектов lib и туда складывать полезное и одинаково используемое пробовал ?

Andrey: SergKis пишет: А сделать общую для всех проектов lib и туда складывать полезное и одинаково используемое пробовал ? Нет. Люблю держать всё в исходниках. Очень редко использую свои Lib. Но это дело вкуса...

SergKis: Andrey пишет Очень редко использую свои Lib тогда положи в ch файл и подключай в исходнике

Dima: Andrey пишет: Может поместишь в библиотеку функцию SergKis - MsgLog() Почему бы нет , я за

Andrey: Вопрос по ходу создания кода на МиниГуи. Нужны периодически делать разные менюшки. Всегда делаю ручками. Устал... Времени тратиться куча. Кто на чём делает менюшки, типа вот такую надо ?

Петр: Andrey пишет: Кто на чём делает менюшки, типа вот такую надо ? А где там меню?

Dima: Петр пишет: А где там меню? +1

Andrey: SergKis пишет: тогда другой вариант FUNCTION MLogFile( cFile ) // Получить \ установить имя файла вывода ф-ии MLog(...) LOCAL cOld STATIC MLog_File := "_MsgLog.txt" cOld := MLog_File If cFile != NIL; MLog_File := cFile EndIf RETURN cOld Что то сменить имя файла вывода не получается. Постоянно выводит _MsgLog.txt

SergKis: Andrey используй SET LOGFILE TO "_debug.txt" ? ...,... это уже в МиниГуи есть и глянь FUNCTION _SetGetLogFile( cFile ) и FUNCTION _LogFile( lCrLf, ... ) сам же просил

Andrey: SergKis пишет: сам же просил Да не знал, что Григорий так быстро вставил в эту версию. А как быть с #command ? [<explist,...>] => _LogFile( <explist> ) #command ?a [<arr>] => aEval(<arr>, {|xv,ne| _LogFile( ne, xv ) }) #command ?v [<arr>] => aEval(<arr>, {|xv,ne| _LogFile( ne, iif(valtype(xv) == "A", hb_valtoexp(xv), xv )) }) У меня первый параметр вывода пропадает...

Andrey: Сделал так: #command ? [<explist,...>] => _LogFile( .t.,<explist> ) #command ?a [<arr>] => aEval(<arr>, {|xv,ne| _LogFile( .t., ne, xv ) }) #command ?v [<arr>] => aEval(<arr>, {|xv,ne| _LogFile( .t., ne, iif(valtype(xv) == "A", hb_valtoexp(xv), xv )) })

SergKis: Andrey пишет Сделал так ... в i_ini.ch и так все нормально [pre2] #command ? [<explist,...>] => _LogFile( .T., <explist> ) #command ?? [<explist,...>] => _LogFile( .F., <explist> ) #command ?a [<arr>] => aEval( <arr>, { |xv, ne| _LogFile( .T., ne, xv ), _LogFile() } ) #command ?v [<arr>] => aEval( <arr>, { |xv, ne| _LogFile( .T., ne, iif( Valtype(xv)=="A", hb_valtoexp(xv), xv ) ), _LogFile() } ) [/pre2]

Andrey: SergKis пишет: в i_ini.ch и так все нормально А я через свой mydefines.ch делал...

Andrey: Всем привет ! Решил добавить на кнопки (объект BUTTONEX ) вызов контекстного меню. Не получается, выдаёт ошибку: Error BASE/1132 Переполнение массива: Неверное количество аргументов Called from _ENDMENU(530) Called from METRO_BUTTON(382) Called from (b)ADDITION_MAINFORMS(161) Called from AEVAL(0) Called from ADDITION_MAINFORMS(161) Called from (b)MAIN(96) Called from (b)_DEFINESPLASHWINDOW(134) По коду у меня это выглядит так: DEFINE BUTTONEX &cObject PARENT &cForm ...... END BUTTONEX DEFINE CONTEXT MENU CONTROL &cObject cInfo1 := cCaption cInfo2 := "Object: "+cObject MENUITEM cInfo1 MENUITEM cInfo2 SEPARATOR MENUITEM "Запуск старой программы" ACTION { || MsgDebug(cObject) } SEPARATOR MENUITEM "Запуск новой программы" ACTION { || MsgDebug(cObject) } SEPARATOR MENUITEM "Выход из меню" ACTION {|| Tone(100,0.1) } END MENU // строка 382 Если убрать DEFINE CONTEXT MENU CONTROL &cObject ... то всё работает нормально ! Что за ошибка такая ? Как преодолеть её ?

Andrey: Разгадал загадку... Достаточно было поставить - DEFINE CONTEXT MENU CONTROL &cObject OF &cForm Хотя на маленьком примере можно и не ставить OF &cForm ... и без него работает...

Andrey: По доке: Enable and disable Context Menu Control SET CONTEXT MENU CONTROL <cControlName> OF <cParentName> ON | OFF Что то не работает... SET CONTEXT MENU CONTROL "oBut_6" OF 'Form_Main' OFF Всё равно по правой кнопки мышки появляется контекстное меню...

gfilatov2002: Andrey пишет: Что то не работает... SET CONTEXT MENU CONTROL "oBut_6" OF 'Form_Main' OFF А если попробовать записать без кавычек SET CONTEXT MENU CONTROL oBut_6 OF Form_Main OFF

Andrey: Понял. Спасибо !

Andrey: Вопрос насчёт курсора. Имеется таблица. При нажатии Enter или мышкой открывается карточка. Открытие карточки бывает с задержкой (комп тормознутый, да и пока поля из базы по сетке прочитаешь)... Как прикрутить курсор ожидания ? Пробовал делать ДО создания окна карточки (не работает!): SetWaitCursor( Thiswindow.Handle ) или SetWaitCursor( Application.Handle ) А восстановление курсора делаю в последней строчке ON INIT окна карточки: SetArrowCursor( Thiswindow.Handle ) Разъясните пожалуйста как нужно правильно делать операции с курсором.

Dima: А если в Init окна первой строкой...

Andrey: Dima пишет: А если в Init окна первой строкой... Да без разницы. Нет мышки-курсора ожидания, вообще. Нужно чтобы сразу после нажатия в таблице - появлялся курсор ожидания. Не получается у меня это. Как это сделать ?

gfilatov2002: Andrey пишет: Как это сделать ? Посмотри рабочий пример ниже (процедура ONDBLCLICK() ) [pre2]#include "hmg.ch" Function Main SET CENTURY ON DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 640 HEIGHT 480 ; TITLE 'MiniGUI Browse Demo' ; MAIN NOMAXIMIZE ; ON INIT OpenTables() ; ON RELEASE CloseTables() DEFINE MAIN MENU POPUP 'File' ITEM 'Set Browse Value' ACTION Form_1.Browse_1.Value := 10 ITEM 'Get Browse Value' ACTION MsgInfo ( Form_1.Browse_1.Value ) ITEM 'Refresh Browse' ACTION Form_1.Browse_1.Refresh() ITEM 'Show Browse' ACTION Form_1.Browse_1.Show() ITEM 'Hide Browse' ACTION Form_1.Browse_1.Hide() ITEM 'Enable Browse' ACTION Form_1.Browse_1.Enabled := .t. ITEM 'Disable Browse' ACTION Form_1.Browse_1.Enabled := .f. SEPARATOR ITEM 'Exit' ACTION Form_1.Release() END POPUP POPUP 'Help' ITEM 'About' ACTION MsgInfo ("MiniGUI Browse Demo") END POPUP END MENU DEFINE STATUSBAR STATUSITEM 'HMG Power Ready!' END STATUSBAR DEFINE TAB Tab_1 ; AT 10,10 ; WIDTH 600 ; HEIGHT 400 - Form_1.Statusbar.Height ; VALUE 1 ; FONT 'Arial' SIZE 10 PAGE '&Browse ' DEFINE BROWSE Browse_1 COL 25 ROW 40 WIDTH 555 HEIGHT 350 - Form_1.Statusbar.Height HEADERS { 'Code' , 'First Name' , 'Last Name', 'Birth Date', 'Married' , 'BioGraphy' } WIDTHS { 150 , 150 , 150 , 150 , 150 , 150 } WORKAREA Test FIELDS { 'Test->Code' , 'Test->First' , 'Test->Last' , 'Test->Birth' , 'Test->Married' , 'Test->Bio' } VALUE 1 ONDBLCLICK ONDBLCLICK() ONHEADCLICK { {|| MsgInfo('Header 1 Clicked !')} , { || MsgInfo('Header 2 Clicked !')} , { || MsgInfo('Header 3 Clicked !')}, { || MsgInfo('Header 4 Clicked !')}, { || MsgInfo('Header 5 Clicked !')}, { || MsgInfo('Header 6 Clicked !')}} END BROWSE END PAGE PAGE '&More' @ 55,90 LABEL Label_1 ; VALUE 'Label !!!' ; WIDTH 100 HEIGHT 27 @ 80,90 CHECKBOX Check_1 ; CAPTION 'Check 1' ; VALUE .T. ; TOOLTIP 'CheckBox' @ 115,85 SLIDER Slider_1 ; RANGE 1,10 ; VALUE 5 ; TOOLTIP 'Slider' @ 45,240 FRAME TabFrame_2 WIDTH 125 HEIGHT 110 OPAQUE @ 50,260 RADIOGROUP Radio_1 ; OPTIONS { 'One' , 'Two' , 'Three', 'Four' } ; VALUE 1 ; WIDTH 100 ; TOOLTIP 'RadioGroup' END PAGE END TAB END WINDOW CENTER WINDOW Form_1 Form_1.Browse_1.SetFocus() ACTIVATE WINDOW Form_1 Return Nil Procedure OpenTables() Use Test Return Procedure CloseTables() Use Return Procedure ONDBLCLICK SetWaitCursor( GetControlHandle( 'Browse_1', 'Form_1' ) ) SetCursorSystem( IDC_WAIT ) InkeyGUI( 1000 ) SetArrowCursor( GetControlHandle( 'Browse_1', 'Form_1' ) ) SetCursorSystem( IDC_ARROW ) MsgInfo('DoubleClick!!') Return [/pre2]

Andrey: gfilatov2002 пишет: Посмотри рабочий пример ниже (процедура ONDBLCLICK() Чуток понял. Вопрос остался... [pre2]Procedure ONDBLCLICK SetWaitCursor( GetControlHandle( 'Browse_1', 'Form_1' ) ) SetCursorSystem( IDC_WAIT ) MyCardBrowse( .... ) //SetArrowCursor( GetControlHandle( 'Browse_1', 'Form_1' ) ) //SetCursorSystem( IDC_ARROW ) //MsgInfo('DoubleClick!!') Return Function MyCardBrowse(....) DEFINE WINDOW Form_Card ; ........... MODAL NOSYSMENU NOSIZE ; ON INIT { || MyInitCard(...),; Function MyInitCard(...) // доп. прорисовка ......... // вот здесь нужно отключить курсор ожидания ! SetArrowCursor( GetControlHandle( 'Browse_1', 'Form_1' ) ) SetCursorSystem( IDC_ARROW ) // вот так можно ? или нельзя ? RETURN NIL[/pre2]

Andrey: Григорий, всё получилось ! Спасибо большое !

Andrey: Всем привет. Вопрос назрел давно уже. Имею кнопки объекта BUTTONEX типа такого: Есть ли функции, которые позволяют определить, ширину название кнопки и поместилась ли нормально название на саму кнопку ? Если задать шрифт BOLD, то название кнопки иногда не помещается, обрезается по краям... Как можно рассчитать такую ситуацию ?

Петр: Andrey пишет: Как можно рассчитать такую ситуацию ? Сбросьте где-то на форму и попробуйте, сначала как есть, потом раскомментируйте строку Form1.Button2.Width [pre2] cCaptionLong := "Click here for update Data" cCaptionShort := "Click here.." @ 90,150 BUTTON Button2 CAPTION "?!" TOOLTIP "?!" // Form1.Button2.Width := GetTextWidth( , cCaptionLong, ) + 20 Form1.Button2.Caption := If( GetTextWidth( , cCaptionLong, ) >= Form1.Button2.Width, cCaptionShort, cCaptionLong ) IF Form1.Button2.Caption == cCaptionLong SetToolTip( Form1.Button2.Handle, cCaptionShort, GetFormToolTipHandle( "Form1" ) ) ELSE SetToolTip( Form1.Button2.Handle, cCaptionLong, GetFormToolTipHandle( "Form1" ) ) ENDIF [/pre2] Поищите в примерах и исходниках применение GetTextWidth. Если мне не изменяет память, вы уже и задавали подобный вопрос. А может и не вы..

Петр: Можете так попробовать выкрутиться [pre2] cCaptionLong := "Click here for update Data" @ 90, 150 BUTTON Button2 CAPTION cCaptionLong TOOLTIP cCaptionLong DO WHILE GetTextWidth( , cCaptionLong, ) > ( Form1.Button2.Width - GetTextWidth( , "..", ) ) cCaptionLong := Left( cCaptionLong, Len( cCaptionLong ) - 1 ) ENDDO Form1.Button2.Caption := cCaptionLong + ".." [/pre2]

Andrey: Петр пишет: Если мне не изменяет память, вы уже и задавали подобный вопрос. Да может и задавал. Только до сих пор не решил этот вопрос, из-за этого ещё раз задаю вопрос. Петр пишет: Поищите в примерах и исходниках применение GetTextWidth. Этой функцией пользуюсь, только в таком синтаксисе не пробовал: GetTextWidth( , cCaptionLong, ) Просто хотелось бы знать, на какой размер шрифта помещается в название кнопки, т.е. когда название обрезается и потом уже самостоятельно буду уменьшать размер шрифта кнопки.

Softlog86: FUNCTION GetTxtWidth( cText, nFontSize, cFontName ) // get the width of the text LOCAL hFont, nWidth IF Valtype(cText) == 'N' cText := Replicate('A', cText) ENDIF DEFAULT cText := Replicate('A', 2), ; cFontName := _HMG_DefaultFontName, ; nFontSize := _HMG_DefaultFontSize hFont := InitFont(cFontName, nFontSize) nWidth := GetTextWidth(0, cText, hFont) DeleteObject (hFont) RETURN nWidth

Andrey: GetTextWidth( , cCaptionLong, ) - не всегда верно даст результат. Например я на форме устанавливаю один размер шрифта, а на кнопках другой. Я это имел ввиду. И саму функция мне не нужно приводить. Я понял как мне делать ! Спасибо за подсказки !

Andrey: Всем привет. Есть ли в самой библиотеки МиниГуи окно без ожиданием ? Как в примере MiniGUI\SAMPLES\BASIC\WAIT_WINDOW\demo2.prg Делаю тестовые примеры, а тащить в свой проект отдельную функцию НЕ ХОЧУ ! Иначе теряется простота примера.

Andrey: Всем трудоголикам привет ! Как определить - запущено ли MAIN окно ?

SergKis: Andrey пишет Как определить - запущено ли MAIN окно ? Самое простое If empty(_HMG_MainHandle) MsgBox("Not found main window", "INFO") EndIf

Andrey: Как цвет из BLUE, RED и т.д. перевести в число ? Есть функция в МиниГуи, или самому ваять нужно (хотя делал уже такую) ?

Петр: Andrey пишет: Есть функция в МиниГуи Есть, RGB() называется. Также макрос в bostaurus.ch #define ArrayRGB_TO_COLORREF(aRGB) RGB(aRGB[1],aRGB[2],aRGB[3])

Andrey: Хотел укоротить конструкцию: aClr := BLUE oText:Font:Color = RGB(aClr[1],aClr[2],aClr[3]) Сделал как раньше у себя: oText:Font:Color = MyRGB(BLUE)

Andrey: Проект не трогал, под новой версией МиниГуи стала появляться ошибка: Error BASE/5056 MiniGUI Error: _SETFONTHANDLE Called from _SETFONTHANDLE(0) Called from _DEFINEOWNERBUTTON(497) Called from METRO3BUTTON(69) Один раз меню работает, второй раз вылетает. Что это за ошибка ? функция METRO3BUTTON(69) [pre2] DEFINE BUTTONEX &cObject PARENT &cForm ..... FONTNAME cFont FONTSIZE nFontSize ...... END BUTTONEX // вот эта 69 строка[/pre2]

Петр: Andrey пишет: Что это за ошибка ? Функция _SetFontHandle() в качестве второго параметра требует валидный хэндл шрифта. Почему этот хэндл не валидный, по приведенному щедрому отрывку кода установить не имеется возможности. Для инкапсуляции ошибки в файле h_button.prg строку 496 IF FontHandle != 0 замените на IF ( GetObjectType( FontHandle ) == 6 ) и перекомпилируйте библиотеку.

Andrey: Перенес тему сюда: gfilatov2002 пишет: Разобрался с этим... Дело в том, что Минигуи использует в качестве цвета фона окна по умолчанию системный цвет COLOR_BTNFACE. Для 7-й Винды этот цвет как раз {240,240,240}, а не чисто белый, как было сделано в примере. Думаю, что теперь вопрос закрыт Открываю заново вопрос. В обычной системе картинка серенькая на сером фоне. На другой системе Система Win2008, удалёнка (везде на удалёнке) - вот такая картинка получается: Что делать ? Как сделать, чтобы окно было всегда одинаковым ?

Петр: Andrey пишет: Что делать ? Как сделать, чтобы окно было всегда одинаковым ? И кто ж вам не видя кода чего-то посоветует? Для SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg фон окна вывода оставьте по умолчанию для системы (не указывайте BACKCOLOR), а gif файлы сконвертируйте в png с поддержкой альфа канала (очень легко сделать используя функцию пакетной обработки в IrfanView). Upd.: можно еще для картинки добавить ALPHALEVEL 150 - это сгладит возможные визуальные артефакты. Upd.2: .rc файл конечно-же поправить

Andrey: Петр пишет: gif файлы сконвертируйте в png с поддержкой альфа канала (очень легко сделать используя функцию пакетной обработки в IrfanView). Понял, спасибо ! Буду пробовать...

Andrey: Привет всем ! Попробовал прозрачный PNG в ресурсах и обломался. Все равно показывается серая картинка на белом фоне. Нашёл решение. прозрачные PNG делаю белыми. Тогда выходит картинка белая на белом фоне. Только по удалёнке небольшой артефакт появляется, чёрные точечки.... Вот такая картинка по удалёнке: Исправленные примеры здесь - https://cloud.mail.ru/public/9An6/Yo6pW6d7o

PSP: Андрей, не по поводу цвета, а по поводу надписей: раз уж ты так ревностно относишься к этой картинке, то будет правильней заменить "Time is passed" на "Elapsed time". Как-то оно благозвучней на мой взгляд)))) Без обид, ок?

Andrey: PSP пишет: то будет правильней заменить "Time is passed" на "Elapsed time". Как-то оно благозвучней на мой взгляд)))) Без обид, ок? Так Гугл мне перевел. Согласен с твоим переводом. Только это уже Григория нужно просить, чтобы исправил в библиотеке. Какие могут быть обиды, я ещё только разбираюсь в МиниГуи.

Vlad04: Andrey Ты чего по ночам не спишь? Вредно !

Петр: Andrey пишет: Попробовал прозрачный PNG в ресурсах MiniGUI работает только с PNG32, PNG8 не поддерживается. Andrey пишет: Только по удалёнке небольшой артефакт появляется, чёрные точечки.... Черные точечки у вас ведь на картинках присутствуют. И тип ресурса указывайте правильно.

Andrey: Петр пишет: MiniGUI работает только с PNG32, PNG8 не поддерживается. Поставил прогу IrfanView и конвертировал в PNG32 - прозрачный ! Как сделать с белым фоном я не нашел ? Пришлось каждую картинку заливать белым фоном. Черные точки у себя на картинах не наблюдаю.... Петр пишет: И тип ресурса указывайте правильно. Да, с этим пролетел, исправил. Удивительно, но сборщик проглотил этот формат файлов, значит не сильно отличается.

Петр: Andrey пишет: Пришлось каждую картинку заливать белым фоном. Какой слой заливали и зачем? И в чем теперь преимущество PNG перед GIF? Andrey пишет: Черные точки у себя на картинах не наблюдаю.... Не знаю, на тех картинках, что вы выкладывали не заметить точки - это надо еще постараться. Andrey пишет: Удивительно, но сборщик проглотил этот формат файлов, значит не сильно отличается А при чем там сборщик (наверное вы хотели все таки сказать компилятор ресурсов), что скормили, то сьел. Какое разрешение и глубина цвета поддерживается "по удаленке"? Вы это как-то учитываете?

Andrey: Петр пишет: Какой слой заливали и зачем? И в чем теперь преимущество PNG перед GIF? Делал залифку прозрачного фона на белый. GIF картинка сейчас всегда серая.... Раньше была белой. Из-за этого и перешёл на PNG, хотя можно было и JPG использовать. Петр пишет: Какое разрешение и глубина цвета поддерживается "по удаленке"? Вы это как-то учитываете? Использую стандартные параметры 32бита. Сейчас нормально картинка отображается, кроме черных точек. Наверное как то преобразовать GIF в PNG надо по другому, с белым фоном - тогда чёрных точек наверное не будет. Картинки я просматриваю через Shagit с увеличением - он чёрных точек не показывает...

Петр: Andrey пишет: GIF картинка сейчас всегда серая.... Раньше была белой. Код вывода для GIF покажите, что-то вроде [pre2] @ 40, (420-128)/2 IMAGE Image_1 PICTURE aStatPictWait[1] ; STRETCH ; TRANSPARENT[/pre2] Раньше деревья высокими были.. Версия MiniGUI какая (раньше была)?

Петр: Петр пишет: Картинки я просматриваю через Shagit с увеличением - он чёрных точек не показывает... Что вы монитор рассматриваете.. Вы что через тот же Irfan на исходные картинки посмотреть не можете? У вас какие-то артефакты на альфа-канале, а вы прямо на вопрос ответить не хотите: на тех картинках, что вы выкладывали ((папка FRAME *.png)) вы точки видите или нет ?

Andrey: В своём файле сборки 2Tbrw_table.hbp использую команду: -prgflag=-w2 -es1 С некоторых пор перестал собираться ехе-ник без ошибок, выдаёт непонятные мне ошибки: [pre2]hbmk2[2Tbrw_table]: Warning: Non-portable output filename: '-o2Tbrw_table.exe' in 2Tbrw_table.hbp:19. Delete '.exe' extension. C:\MiniGUI\include\i_controlmisc.ch(52) Warning W0002 Redefinition or duplicate definition of #define S_OK C:\MiniGUI\include\i_controlmisc.ch(53) Warning W0002 Redefinition or duplicate definition of #define S_FALSE C:\MiniGUI\include\i_controlmisc.ch(58) Warning W0002 Redefinition or duplicate definition of #define OBJ_PEN C:\MiniGUI\include\i_controlmisc.ch(59) Warning W0002 Redefinition or duplicate definition of #define OBJ_BRUSH C:\MiniGUI\include\i_controlmisc.ch(60) Warning W0002 Redefinition or duplicate definition of #define OBJ_DC C:\MiniGUI\include\i_controlmisc.ch(61) Warning W0002 Redefinition or duplicate definition of #define OBJ_METADC C:\MiniGUI\include\i_controlmisc.ch(62) Warning W0002 Redefinition or duplicate definition of #define OBJ_PAL C:\MiniGUI\include\i_controlmisc.ch(63) Warning W0002 Redefinition or duplicate definition of #define OBJ_FONT C:\MiniGUI\include\i_controlmisc.ch(64) Warning W0002 Redefinition or duplicate definition of #define OBJ_BITMAP C:\MiniGUI\include\i_controlmisc.ch(65) Warning W0002 Redefinition or duplicate definition of #define OBJ_REGION C:\MiniGUI\include\i_controlmisc.ch(66) Warning W0002 Redefinition or duplicate definition of #define OBJ_METAFILE C:\MiniGUI\include\i_controlmisc.ch(67) Warning W0002 Redefinition or duplicate definition of #define OBJ_MEMDC C:\MiniGUI\include\i_controlmisc.ch(68) Warning W0002 Redefinition or duplicate definition of #define OBJ_EXTPEN C:\MiniGUI\include\i_controlmisc.ch(69) Warning W0002 Redefinition or duplicate definition of #define OBJ_ENHMETADC C:\MiniGUI\include\i_controlmisc.ch(70) Warning W0002 Redefinition or duplicate definition of #define OBJ_ENHMETAFILE C:\MiniGUI\include\i_controlmisc.ch(71) Warning W0002 Redefinition or duplicate definition of #define OBJ_COLORSPACE C:\MiniGUI\include\i_controlmisc.ch(76) Warning W0002 Redefinition or duplicate definition of #define IDC_ARROW C:\MiniGUI\include\i_controlmisc.ch(77) Warning W0002 Redefinition or duplicate definition of #define IDC_IBEAM C:\MiniGUI\include\i_controlmisc.ch(78) Warning W0002 Redefinition or duplicate definition of #define IDC_WAIT C:\MiniGUI\include\i_controlmisc.ch(79) Warning W0002 Redefinition or duplicate definition of #define IDC_CROSS C:\MiniGUI\include\i_controlmisc.ch(80) Warning W0002 Redefinition or duplicate definition of #define IDC_UPARROW C:\MiniGUI\include\i_controlmisc.ch(81) Warning W0002 Redefinition or duplicate definition of #define IDC_SIZENWSE C:\MiniGUI\include\i_controlmisc.ch(82) Warning W0002 Redefinition or duplicate definition of #define IDC_SIZENESW C:\MiniGUI\include\i_controlmisc.ch(83) Warning W0002 Redefinition or duplicate definition of #define IDC_SIZEWE C:\MiniGUI\include\i_controlmisc.ch(84) Warning W0002 Redefinition or duplicate definition of #define IDC_SIZENS C:\MiniGUI\include\i_controlmisc.ch(85) Warning W0002 Redefinition or duplicate definition of #define IDC_SIZEALL C:\MiniGUI\include\i_controlmisc.ch(86) Warning W0002 Redefinition or duplicate definition of #define IDC_NO C:\MiniGUI\include\i_controlmisc.ch(87) Warning W0002 Redefinition or duplicate definition of #define IDC_APPSTARTING C:\MiniGUI\include\i_controlmisc.ch(88) Warning W0002 Redefinition or duplicate definition of #define IDC_HELP C:\MiniGUI\include\i_controlmisc.ch(151) Warning W0002 Redefinition or duplicate definition of #define SM_CXSCREEN C:\MiniGUI\include\i_controlmisc.ch(152) Warning W0002 Redefinition or duplicate definition of #define SM_CYSCREEN C:\MiniGUI\include\i_controlmisc.ch(153) Warning W0002 Redefinition or duplicate definition of #define SM_CXVSCROLL C:\MiniGUI\include\i_controlmisc.ch(154) Warning W0002 Redefinition or duplicate definition of #define SM_CYHSCROLL C:\MiniGUI\include\i_controlmisc.ch(155) Warning W0002 Redefinition or duplicate definition of #define SM_CYCAPTION C:\MiniGUI\include\i_controlmisc.ch(156) Warning W0002 Redefinition or duplicate definition of #define SM_CYMENU C:\MiniGUI\include\i_controlmisc.ch(158) Warning W0002 Redefinition or duplicate definition of #define SM_CXFRAME C:\MiniGUI\include\i_controlmisc.ch(159) Warning W0002 Redefinition or duplicate definition of #define SM_CYFRAME C:\MiniGUI\include\i_controlmisc.ch(160) Warning W0002 Redefinition or duplicate definition of #define SM_CXSIZEFRAME C:\MiniGUI\include\i_controlmisc.ch(161) Warning W0002 Redefinition or duplicate definition of #define SM_CYSIZEFRAME C:\MiniGUI\include\i_controlmisc.ch(163) Warning W0002 Redefinition or duplicate definition of #define SM_CXEDGE C:\MiniGUI\include\i_controlmisc.ch(164) Warning W0002 Redefinition or duplicate definition of #define SM_CYEDGE C:\MiniGUI\include\i_controlmisc.ch(169) Warning W0002 Redefinition or duplicate definition of #define SW_HIDE C:\MiniGUI\include\i_controlmisc.ch(170) Warning W0002 Redefinition or duplicate definition of #define SW_SHOWNORMAL C:\MiniGUI\include\i_controlmisc.ch(171) Warning W0002 Redefinition or duplicate definition of #define SW_NORMAL C:\MiniGUI\include\i_controlmisc.ch(172) Warning W0002 Redefinition or duplicate definition of #define SW_SHOWMINIMIZED C:\MiniGUI\include\i_controlmisc.ch(173) Warning W0002 Redefinition or duplicate definition of #define SW_SHOWMAXIMIZED C:\MiniGUI\include\i_controlmisc.ch(174) Warning W0002 Redefinition or duplicate definition of #define SW_MAXIMIZE C:\MiniGUI\include\i_controlmisc.ch(175) Warning W0002 Redefinition or duplicate definition of #define SW_SHOWNOACTIVATE C:\MiniGUI\include\i_controlmisc.ch(176) Warning W0002 Redefinition or duplicate definition of #define SW_SHOW C:\MiniGUI\include\i_controlmisc.ch(177) Warning W0002 Redefinition or duplicate definition of #define SW_MINIMIZE C:\MiniGUI\include\i_controlmisc.ch(178) Warning W0002 Redefinition or duplicate definition of #define SW_SHOWMINNOACTIVE C:\MiniGUI\include\i_controlmisc.ch(179) Warning W0002 Redefinition or duplicate definition of #define SW_SHOWNA C:\MiniGUI\include\i_controlmisc.ch(180) Warning W0002 Redefinition or duplicate definition of #define SW_RESTORE C:\MiniGUI\include\i_controlmisc.ch(181) Warning W0002 Redefinition or duplicate definition of #define SW_SHOWDEFAULT C:\MiniGUI\include\i_controlmisc.ch(261) Warning W0002 Redefinition or duplicate definition of #define hb_OsNewLine C:\MiniGUI\include\i_controlmisc.ch(339) Warning W0002 Redefinition or duplicate definition of #define WM_SYSCOMMAND C:\MiniGUI\include\i_controlmisc.ch(340) Warning W0002 Redefinition or duplicate definition of #define SC_CLOSE Harbour 3.2.0dev (r1704251545) Copyright (c) 1999-2016, http://harbour-project.org/ ...... [/pre2] Что за - Warning W0002 Redefinition or duplicate definition ? Как их убрать ?

PSP: Andrey пишет: Что за - Warning W0002 Redefinition or duplicate definition ? Повторное или дублирующее определение. Одинаковые #define два или более раз

Andrey: Создаю на форме виртуал-окно с вертикальным скролингом. DEFINE WINDOW Win_2 ; ............ VIRTUAL HEIGHT nHeight*2 ; ...... WINDOWTYPE PANEL Повесил на кнопки: hWnd := GetFormHandle('Win_2') ON KEY PRIOR ACTION SendMessage( hWnd, WM_VSCROLL, SB_PAGEUP, 0 ) ON KEY NEXT ACTION SendMessage( hWnd, WM_VSCROLL, SB_PAGEDOWN, 0 ) ON KEY UP ACTION SendMessage( hWnd, WM_VSCROLL, SB_LINEUP, 0 ) ON KEY DOWN ACTION SendMessage( hWnd, WM_VSCROLL, SB_LINEDOWN, 0 ) А как на колёсико мышки повесить листание вверх/вниз ?

Петр: Andrey пишет: А как на колёсико мышки повесить листание вверх/вниз ? С помощью ON KEY боюсь, что никак.

Andrey: Петр пишет: С помощью ON KEY боюсь, что никак. А почему в TsBrowse колёсико мышки очень шустро бегает ? Оттуда нельзя взять передвижение ?

Петр: Andrey пишет: А почему в TsBrowse колёсико мышки очень шустро бегает ? TsBrowse обрабатывает сообщение WM_MOUSEWHEEL. МiniGUI, кстати тоже, если для окна указано VIRTUAL HEIGHT. Поэтому не очень понимаю зачем вам свой город городить. Но если будете, то скорее всего с помощью set events func to и WM_MOUSEWHEEL, а не ON KEY.

ММК: Andrey пишет: Оттуда нельзя взять передвижение ? Кнопки, мышки ... Пора переходить на голосовое управление. http://subscribe.ru/group/internet-dlya-nachinayuschih-polzovatelej/12274362/?utm_campaign=subscribe-group-grp&utm_source=subscribe-groups&utm_medium=email

Andrey: Как узнать где текущий фокус объекта в окне ? Т.е. если фокус не на таблице, то кнопку сделать серой (не выбираемой) !

Петр: Andrey пишет: Т.е. если фокус не на таблице, то кнопку сделать серой (не выбираемой) Для реализации этого точное место нахождения фокуса не нужно. У browse, к примеру, есть события ON GOTFOCUS/ON LOSTFOCUS Все, что вам нужно - это при получении фокуса таблицей сделать кнопку доступной, при потере - ну вы понимаете..

Andrey: Спасибо !

Andrey: Подскажите пожалуйста, можно ли изменить ранее определённый LOSTFOCUS ? Вот код: [pre2] @ nRow, nCol GETBOX &cObj VALUE xRet ; ................ ON CHANGE { || xRet := GetProperty(cForm, cObj, "Value" ) } ; ON LOSTFOCUS { || WrtiteFldGetBox( cForm,cObj,cPole,xRet ) }[/pre2] На новый LOSTFOCUS: [pre2] ON LOSTFOCUS { || WrtiteFldGetBox( cForm,cObj,cPole,xRet ), MyRunGetBox(cFunc) }[/pre2]

SergKis: Andrey _SetControlAction(cControl, cForm, bBlock [, cEvent]) где cEvent := 'ONCHANGE' 'ONGOTFOCUS' 'ONLOSTFOCUS' 'ONDBLCLICK' по умолчанию на _HMG_aControlProcedures [ i ] := bBlock, т.е. ACTION

Andrey: SergKis пишет: _SetControlAction(cControl, cForm, bBlock [, cEvent]) bBlock := { || WrtiteFldGetBox( cForm,cObj,cPole,xRet ), MyRunGetBox(cFunc) } _SetControlAction(cObj, cForm, bBlock , 'ONLOSTFOCUS' ) Так заработало ! Спасибо БОЛЬШОЕ !

Andrey: Пере собрал прошлогодний проект. Вылезли вот такие ошибки: Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland Error: Unresolved external '_HB_FUN_WIN_PRINTEREXISTS' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xhbprn Error: Unresolved external '_HB_FUN_WIN_PRINTERGETDEFAULT' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xhbprn Error: Unresolved external '_HB_FUN_WIN_PRINTERSTATUS' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xhbprn Error: Unresolved external '_HB_FUN_WIN_PRINTERPORTTONAME' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xhbprn Error: Unresolved external '_HB_FUN_WIN_PRINTFILERAW' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xhbprn Error: Unresolved external '_HB_FUN_WIN_PRINTERLIST' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xhbprn Error: Unresolved external '_HB_FUN_WIN_PRINTERSETDEFAULT' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xhbprn hbmk2[IniFileHL]: Error: Running linker. 2 Почему ? Неужели придётся старым МиниГуи собирать ?

Dima: Andrey Мне кажется HBWIN нужно прицепить еще

Andrey: Точно ! Заработало... Хотя в прошлом году можно было и без него ! Спасибо !

Dima: Andrey пишет: Хотя в прошлом году можно было и без него Ты помнишь что было в том году , цеплял ты Hbwin или нет , цеплял скорее всего.

Andrey: Dima пишет: Ты помнишь что было в том году , цеплял ты Hbwin или нет , цеплял скорее всего. Нет не цеплял. В папке лежит IniFileLoad.hbp - без hbwin.lib и компилировалось нормально.

Dima: Пример C:\MiniGUI\SAMPLES\Advanced\GoogleDirections\ , собрал , запустил...бах , ошибка сценария. Как лечить ? Как сделать что бы юзался не Explorer а например FireFox ? ЗЫ Вылечил

SergKis: Dima пишет Вылечил Что и как ?

Dima: SergKis oActiveX:silent := 1 // вот эту строку добавил oActiveX:Navigate(CurDrive() + ":\" + CurDir() + "\rtemp.html" )

SergKis: Dima пишет oActiveX:silent := 1 // вот эту строку добавил Вроде, заработало Смотрю, сам начал строгать, не нашел прогу ?

Dima: SergKis А этот вариант думаю мне подойдет , только переработаю. Игорь подсказал с этой строкой

Andrey: Какой есть аналог функции МиниГуи - Lastkey() ?

Andrey: Нашёл только для oBrw:oWnd:nLastKey

Haz: Коллеги, подскажите как выйти из следующей ситуации: Есть форма 1 , на ней контекстное меню которое открывает форму 2. Пока форма 2 активна ( минимизирована или скрыта формой 1 ) контекстное меню на форме 1 не вызывается , ну никакой реакции на клики

SergKis: Haz Примерчик бы. А то вопросы по типам окон. 1 - sdi ? 2 - standart\child или 0 - sdi 1 - ? 2 - ?



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