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

Ответов - 198, стр: 1 2 3 4 5 6 7 8 9 10 All

Haz: Сергей Даже не знаю, что сказать ....

Andrey: Всем привет ! Есть ли стандартный объект типа MsgInfo только с прокруткой текста, который выводишь ? Или самому придётся делать такое окно ? А то у меня в MsgInfo не помещается весь текст и кнопки не видно. Вот так на экране обрезает:

Andrey: Haz пишет: Ты же сам в прошлом посте писал как это лечится Не лечиться, тогда начинает бровс на экране мелькать. На тяжёлых операциях, PACK, ZAP или таких: [pre2] For nI := 1 TO Len(aArray) if ! empty(aArray[ nI ]) ADD ITEM aArray[ nI ] TO &cBrw OF &cForm // вариант 1 EndIf IF nI % 500 DO EVENTS // чтобы показывать прелодер из WaitThreadCreate() ENDIF Next[/pre2] Прелодер показывается белым, без картинки и лепестки не крутятся. Такое впечатление что поток "замерз". Хотя бы картинку первую показывал. Почему не показывает, не знаю. Вот код из примера SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg: [pre2]FUNCTION WaitThreadCreate( cTitle ) .... DEFINE WINDOW &cFormName ; .... @ 40, (420-128)/2 IMAGE Image_1 PICTURE aStatPictWait[1] ; WIDTH 128 HEIGHT 128 STRETCH WHITEBACKGROUND TRANSPARENT END WINDOW Center Window &cFormName Activate Window &cFormName NoWait // Start preloding in a separate thread // Запускаем preloding в отдельном потоке hb_threadDetach( hb_threadStart( HB_THREAD_INHERIT_MEMVARS, @WaitThreadTimer(), SECONDS() ) ) RETURN NIL[/pre2]


Haz: Andrey пишет: For nI := 1 TO Len(aArray) if ! empty(aArray[ nI ]) ADD ITEM aArray[ nI ] TO &cBrw OF &cForm // вариант 1 EndIf IF nI % 500 DO EVENTS // чтобы показывать прелодер из WaitThreadCreate() ENDIF Next Так ты убрал отсюда заполнение бровса или нет

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

SergKis: Haz пишет Подготовил данные, дай их бровсу через сетаррай и все. Еще проще, до окна запусти прелодер, формируй в это время массив по завершении создавай окно с тсб и в on init убирай прелодер и работай. Ты все проделываешь, наверно, в on init ?

Andrey: SergKis пишет: Еще проще, до окна запусти прелодер, формируй в это время массив по завершении создавай окно с тсб и в on init убирай прелодер и работай. Да я так и сделал ! Скорость возрасла, несмотря на большые данные.

SergKis: Andrey пишет Вот код из примера То пример, а у тебя программа - это может быть большая разница

Andrey: SergKis пишет: Еще проще, до окна запусти прелодер, формируй в это время массив по завершении создавай окно с тсб и в on init убирай прелодер и работай. Да я так и сделал ! Скорость возрасла, несмотря на большые данные. Haz пишет: Так ты убрал отсюда заполнение бровса или нет Да ! Я ушёл от этого. Сейчас другая проблема. Первое окно прелодера - белое, без картинки. Как сделать чтобы первое окно было с картинкой ? Вот код из примера SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg: [pre2]FUNCTION WaitThreadCreate( cTitle ) .... DEFINE WINDOW &cFormName ; .... @ 40, (420-128)/2 IMAGE Image_1 PICTURE aStatPictWait[1] ; WIDTH 128 HEIGHT 128 STRETCH WHITEBACKGROUND TRANSPARENT END WINDOW Center Window &cFormName Activate Window &cFormName NoWait InkeyGui(100) DO EVENTS // поставил так, всё равно картинки нет ! // Start preloding in a separate thread // Запускаем preloding в отдельном потоке hb_threadDetach( hb_threadStart( HB_THREAD_INHERIT_MEMVARS, @WaitThreadTimer(), SECONDS() ) ) RETURN NIL[/pre2]

Andrey: SergKis пишет: То пример, а у тебя программа - это может быть большая разница Прелодер - один в один как и SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg

SergKis: Andrey Я без потоков делаю, если это в пределах до 60 сек. обхожусь сообщением (+может быть счетчик в StatusBar) Если использую окно с progressbar, так в таком виде вызов Do_WaitWindow( {|o| Otbor(o) } ) сама ф-я такая [pre2] FUNCTION Do_WaitWindow( bBlk, nMax, nStep, cCapt ) LOCAL nY := GetBorderHeight() LOCAL nX := GetBorderWidth() LOCAL nH := 60, nTime := 1000 //, lClose := .F. LOCAL hWnd, aHmg, lBlk := HB_ISBLOCK(bBlk) LOCAL y := 0, x := 0, w := 320, h := nH PRIV lClose := .F. DEFAULT bBlk := {|| Nil }, ; nStep := 10, ; nMax := 250, ; cCapt := gTxt(Wait) hWnd := iif( _HMG_BeginWindowMDIActive, GetActiveMdiHandle(), GetActiveWindow() ) aHmg := Save_Rest_HMG(hWnd) DEFINE WINDOW wWait ; AT y, x ; WIDTH w + nX * 2 ; HEIGHT h + nY * 2 + GetTitleHeight() ; TITLE cCapt ; MODAL NOSIZE NOSYSMENU ; ON INIT ( SetWaitCursor( App.Handle ), ; SetWaitCursor( This.ProgressBar.Handle ), ; CursorWait(), oWin:PostMsg(1), ; This.tWait.Enabled := .T., DoEvents(), ; Eval(bBlk, oWin), ; oWin:PostMsg(2), DoEvents() ) ; ON RELEASE ( This.tWait.Enabled := .F., ; This.ProgressBar.Value := oWin:Cargo[3], ; InkeyGui(500), ; SetArrowCursor( This.ProgressBar.Handle ), ; SetArrowCursor( App.Handle ), ; CursorArrow(), InkeyGui(100), ; Save_Rest_HMG(aHmg) ) ; ON INTERACTIVECLOSE lClose PRIV oWin := ThisWindow.Object oWin:Cargo := { nStep, 0, nMax } oWin:Event( 1, {|ow,nk| nk := ow:Cargo[2] + ow:Cargo[1], ; ow:Cargo[2] := iif( nk > ow:Cargo[3], 0, nk ), ; wWait.ProgressBar.Value := ow:Cargo[2], ; iif( ow:Cargo[2] == 0, ow:PostMsg(1), ), ; wWait.tWait.Enabled := .T., DoEvents() } ) oWin:Event( 2, {|| lClose := .T., wWait.Release } ) oWin:Event( 3, {|| wWait.tWait.Enabled := .F., DoEvents() } ) oWin:Event( 4, {|| wWait.tWait.Enabled := .T., DoEvents() } ) @ y, x PROGRESSBAR ProgressBar RANGE 0, nMax ; WIDTH ThisWindow.ClientWidth ; HEIGHT ThisWindow.ClientHeight DEFINE TIMER tWait INTERVAL nTime ACTION ( wWait.tWait.Enabled := .F., oWin:PostMsg(1) ) This.tWait.Enabled := .F. y := App.Row + int((App.Height - h) / 2) x := App.Col + int((App.Width - w) / 2) h += nY MoveWindow( oWin:Handle, x, y, w, h ) END WINDOW ACTIVATE WINDOW wWait Save_Rest_HMG(aHmg) RETURN NIL [/pre2] как то хватает. В твоем случае нет прорисовки

Andrey: SergKis пишет: В твоем случае нет прорисовки А почему ? Простой же код. Не смертельно, но просто некрасиво. В цикле с базой работает, а на тяжёлых операциях нет прорисовки и всё тут. Делал даже так: [pre2] // создаём окно ожидания с потоком WaitThreadCreate( 'Расчёт по отчёту ...' ) InkeyGui(100) DO EVENTS [/pre2] Всё равно нет прорисовки иногда.

Haz: Не видно всего кода, но такое ощущение что do events лишь бы впихнуть куда. Зачем он после запуска потока,? здесь самое нагруженное место в коде? А в цикле формирования массива данных он есть? Кажется что нет. Могу ошибаться не видя код. Но что то мне подсказывает что не ошибаюсь

PSP: Haz пишет: такое ощущение что do events лишь бы впихнуть куда У меня тоже. Андрей, DO EVENTS нужно ставить в "долгих циклах", чтобы приложение "не зависало".

Andrey: Haz пишет: Могу ошибаться не видя код. Но что то мне подсказывает что не ошибаюсь Буду тогда пробовать написать отдельный тест.

Andrey: Возвращаюсь опять к нерешённому вопросу. У меня в проктах (некоторых) каталог по русски. При компиляции проекта (через hbmk2.bat) файл error.log (и на экране) получается с кракозябами и сердечками... И ошибок толком не видно !!! Вопрос - куда поставить (в какой файл) определение кодировки: chcp 65001 чтобы файл error.log создавался читаемым ? Да и в поставку МиниГуи не плохо бы внести такое усовершенствование. Пробовал поставить в hbmk2.bat , сердечки пропадают, но пути все равно нет: Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland Error: Unresolved external '_HB_FUN_SHOW2TSB' referenced from W:\HB_PROJECT\ABON4PRJ\└┴╬═┼═╥\TBRW_TABLE3.LIB|form_AbonYearCalc hbmk2[form_Sprav_List]: Error: Running linker. 2

Pasha: Как я понял, вывод на stdout компилятора и линкера переадресовывается в error.log, и есть проблема его прочесть ? Так линкер не переделать, чтобы он в нужной кодовой странице выдавал свой лог. Разве что писать в спортлото Эмбаркадеро Текнолоджиз Инк. Есть проблема прочесть текстовый файл в желаемой кодировке ? Так это умеет делать например всем известный фар.

Andrey: Pasha пишет: Как я понял, вывод на stdout компилятора и линкера переадресовывается в error.log, и есть проблема его прочесть ? Да. До этого были вообще кракозябы и сердечки. Поставил в hbmk2.bat второй строкой chcp 65001, сердечки пропадают, но пути все равно нет. Наверное это BCC линковщик выдаёт такую кракозябу. Тем более он такой древний... MS VC2017 берет кодировку заданной в файле сборки и по русски пишет правильно. Понял, что никак. Спасибо ! Но хоть от сердечек избавился....



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