Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
gfilatov2002
|
| moderator
|
Пост N: 1515
Зарегистрирован: 11.02.10
|
|
Отправлено: 01.07.19 14:06. Заголовок: SergKis пишет: Може..
SergKis пишет: Принято с благодарностью
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1516
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.07.19 09:33. Заголовок: Всем кому это интересно
Адаптировал свежую версию библиотеки для работы с Microsoft Visual C++ 2019 (32- и 64-бит). По шагам: 1) скачал полный дистрибутив MSVC 2019 (примерно 22 ГБ) и установил его. 2) сделал консольную версию MSVC 2019 из вышеуказанного дистрибутива (около 454 МБ). 3) собрал компилятор Харбор из сырцов с помощью консольной версии MSVC 2019. 4) собрал и успешно протестировал библиотеку Минигуи с этим компилятором Ваши комментарии приветствуются
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6321
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.07.19 13:46. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Адаптировал свежую версию библиотеки для работы с Microsoft Visual C++ 2019 (32- и 64-бит) |
| Отличная новость ! Теперь надо будет нужные проги переводить на MSVC. Надеюсь будет работать лучше, чем на BCC.
|
|
|
Dima
|
| |
Пост N: 7059
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.07.19 13:47. Заголовок: Andrey пишет: Надею..
Andrey пишет: цитата: | Надеюсь будет работать лучше, чем на BCC. |
| скорее всего разницы и не заметишь
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1517
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.07.19 14:22. Заголовок: Dima пишет: разницы..
Dima пишет: Если сравнивать по скорости выполнения простых операций, то разница есть (см. ниже) цитата: | 2019-07-02 14:17:48 Windows 10 10.0 Harbour 3.2.0dev (r1904111533) Borland C++ 5.5.1 (32-bit) x86 THREADS: 0 N_LOOPS: 1000000 [ T000: empty loop overhead ]...................................0.02 ==================================================================== [ T001: x := L_C ]..............................................0.03 [ T002: x := L_N ]..............................................0.03 [ T003: x := L_D ]..............................................0.03 [ T004: x := S_C ]..............................................0.03 [ T005: x := S_N ]..............................................0.05 [ T006: x := S_D ]..............................................0.03 [ T007: x := M->M_C ]...........................................0.05 [ T008: x := M->M_N ]...........................................0.03 [ T009: x := M->M_D ]...........................................0.03 [ T010: x := M->P_C ]...........................................0.05 [ T011: x := M->P_N ]...........................................0.03 [ T012: x := M->P_D ]...........................................0.03 [ T013: x := F_C ]..............................................0.03 [ T014: x := F_N ]..............................................0.02 [ T015: x := F_D ]..............................................0.03 [ T016: x := o:Args ]...........................................0.09 [ T017: x := o[ 2 ] ]...........................................0.08 [ T018: Round( i / 1000, 2 ) ]..................................0.11 [ T019: Str( i / 1000 ) ].......................................0.31 [ T020: Val( s ) ]..............................................0.11 [ T021: Val( a [ i % 16 + 1 ] ) ]...............................0.22 [ T022: DToS( d - i % 10000 ) ].................................0.25 [ T023: Eval( {|| i % 16 } ) ]..................................0.19 [ T024: Eval( bc := {|| i % 16 } ) ]............................0.13 [ T025: Eval( {| x | x % 16 }, i ) ]............................0.17 [ T026: Eval( bc := {| x | x % 16 }, i ) ]......................0.13 [ T027: Eval( {| x | f1( x ) }, i ) ]...........................0.22 [ T028: Eval( bc := {| x | f1( x ) }, i ) ].....................0.19 [ T029: Eval( bc := &( "{| x | f1( x ) }" ), i ) ]..............0.19 [ T030: x := &( "f1(" + Str( i ) + ")" ) ]......................1.30 [ T031: bc := &( "{| x | f1( x ) }" ), Eval( bc, i ) ]..........1.59 [ T032: x := ValType( x ) + ValType( i ) ]......................0.20 [ T033: x := StrZero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........0.38 [ T034: x := a[ i % 16 + 1 ] == s ].............................0.17 [ T035: x := a[ i % 16 + 1 ] = s ]..............................0.19 [ T036: x := a[ i % 16 + 1 ] >= s ].............................0.17 [ T037: x := a[ i % 16 + 1 ] <= s ].............................0.19 [ T038: x := a[ i % 16 + 1 ] < s ]..............................0.19 [ T039: x := a[ i % 16 + 1 ] > s ]..............................0.17 [ T040: AScan( a, i % 16 ) ]....................................0.16 [ T041: AScan( a, {| x | x == i % 16 } ) ]......................1.36 [ T042: iif( i % 1000 == 0, a := {}, ), AAdd(a,{i,1,.T.,s, ]....0.44 [ T043: x := a ]................................................0.03 [ T044: x := {} ]...............................................0.06 [ T045: f0() ]..................................................0.03 [ T046: f1( i ) ]...............................................0.08 [ T047: f2( c[1...8] ) ]........................................0.05 [ T048: f2( c[1...40000] ) ]....................................0.05 [ T049: f2( @c[1...40000] ) ]...................................0.05 [ T050: f2( @c[1...40000] ), c2 := c ]..........................0.06 [ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.20 [ T052: f2( a ) ]...............................................0.06 [ T053: x := f4() ].............................................0.44 [ T054: x := f5() ].............................................0.11 [ T055: x := Space( 16 ) ]......................................0.08 [ T056: f_prv( c ) ]............................................0.17 ==================================================================== [ total application time: ]....................................11.72 [ total real time: ]...........................................11.75 2019-07-02 14:18:48 Windows 10 10.0 Harbour 3.2.0dev (r1904111533) Microsoft Visual C++ 19.21.27702 (32-bit) x86 THREADS: 0 N_LOOPS: 1000000 [ T000: empty loop overhead ]...................................0.02 ==================================================================== [ T001: x := L_C ]..............................................0.00 [ T002: x := L_N ]..............................................0.02 [ T003: x := L_D ]..............................................0.00 [ T004: x := S_C ]..............................................0.02 [ T005: x := S_N ]..............................................0.00 [ T006: x := S_D ]..............................................0.02 [ T007: x := M->M_C ]...........................................0.00 [ T008: x := M->M_N ]...........................................0.02 [ T009: x := M->M_D ]...........................................0.02 [ T010: x := M->P_C ]...........................................0.00 [ T011: x := M->P_N ]...........................................0.02 [ T012: x := M->P_D ]...........................................0.02 [ T013: x := F_C ]..............................................0.00 [ T014: x := F_N ]..............................................0.00 [ T015: x := F_D ]..............................................0.02 [ T016: x := o:Args ]...........................................0.05 [ T017: x := o[ 2 ] ]...........................................0.02 [ T018: Round( i / 1000, 2 ) ]..................................0.06 [ T019: Str( i / 1000 ) ].......................................0.14 [ T020: Val( s ) ]..............................................0.08 [ T021: Val( a [ i % 16 + 1 ] ) ]...............................0.13 [ T022: DToS( d - i % 10000 ) ].................................0.20 [ T023: Eval( {|| i % 16 } ) ]..................................0.11 [ T024: Eval( bc := {|| i % 16 } ) ]............................0.08 [ T025: Eval( {| x | x % 16 }, i ) ]............................0.09 [ T026: Eval( bc := {| x | x % 16 }, i ) ]......................0.06 [ T027: Eval( {| x | f1( x ) }, i ) ]...........................0.09 [ T028: Eval( bc := {| x | f1( x ) }, i ) ].....................0.08 [ T029: Eval( bc := &( "{| x | f1( x ) }" ), i ) ]..............0.08 [ T030: x := &( "f1(" + Str( i ) + ")" ) ]......................0.69 [ T031: bc := &( "{| x | f1( x ) }" ), Eval( bc, i ) ]..........0.75 [ T032: x := ValType( x ) + ValType( i ) ]......................0.09 [ T033: x := StrZero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........0.19 [ T034: x := a[ i % 16 + 1 ] == s ].............................0.08 [ T035: x := a[ i % 16 + 1 ] = s ]..............................0.09 [ T036: x := a[ i % 16 + 1 ] >= s ].............................0.08 [ T037: x := a[ i % 16 + 1 ] <= s ].............................0.09 [ T038: x := a[ i % 16 + 1 ] < s ]..............................0.09 [ T039: x := a[ i % 16 + 1 ] > s ]..............................0.08 [ T040: AScan( a, i % 16 ) ]....................................0.13 [ T041: AScan( a, {| x | x == i % 16 } ) ]......................0.83 [ T042: iif( i % 1000 == 0, a := {}, ), AAdd(a,{i,1,.T.,s, ]....0.27 [ T043: x := a ]................................................0.00 [ T044: x := {} ]...............................................0.03 [ T045: f0() ]..................................................0.02 [ T046: f1( i ) ]...............................................0.03 [ T047: f2( c[1...8] ) ]........................................0.02 [ T048: f2( c[1...40000] ) ]....................................0.03 [ T049: f2( @c[1...40000] ) ]...................................0.02 [ T050: f2( @c[1...40000] ), c2 := c ]..........................0.03 [ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.11 [ T052: f2( a ) ]...............................................0.03 [ T053: x := f4() ].............................................0.13 [ T054: x := f5() ].............................................0.06 [ T055: x := Space( 16 ) ]......................................0.05 [ T056: f_prv( c ) ]............................................0.08 ==================================================================== [ total application time: ].....................................6.34 [ total real time: ]............................................6.35 |
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2615
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.07.19 16:48. Заголовок: gfilatov2002 Добавь..
gfilatov2002 Добавьте в CLASS TWndData ACCESS Title INLINE GetWindowText ( ::nHandle ) ASSIGN Title( cVal ) INLINE SetWindowText ( ::nHandle, cVal ) ACCESS Enabled INLINE IsWindowEnabled( ::nHandle ) ASSIGN Enabled( xVal ) INLINE iif ( Empty( xVal ), DisableWindow ( ::nHandle ), EnableWindow ( ::nHandle ) ) Пример для проверки на базе BASIC\ChildAsModal Скрытый текст
/* */ #define _HMG_OUTLOG #include "hmg.ch" PROCEDURE main LOCAL cActiveFormName := 'Form_2' SET OOP ON DEFINE WINDOW Form_1 ; AT 0, 0 ; WIDTH 640 HEIGHT 480 ; TITLE 'Main Window'; MAIN DEFINE MAIN MENU POPUP 'Child Window' ITEM 'Open Win 2' ACTION {|| DoWindow2() } END POPUP END MENU DEFINE BUTTON B_OK ROW 20 COL 30 WIDTH 100 HEIGHT 28 ACTION Msgbox( 'OK' ) CAPTION "OK" END BUTTON // DEFINE TIMER T_1 INTERVAL 250 ACTION SetProperty( ThisWindow.Name, "Enabled", ( _IsWindowActive( cActiveFormName ) == .F. ) ) END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 RETURN ***************************************************************************** PROCEDURE DoWindow2() // LOCAL cActiveFormName := 'Form_3' LOCAL cOwnerFormName := ThisWindow.Name, cOwnerFormTitle := ThisWindow.Title LOCAL oWnd := ThisWindow.Object LOCAL cTit := oWnd:Title DEFINE WINDOW Form_2 ; AT App.Row + 30, App.Col + 30 ; WIDTH 600 HEIGHT 400 ; TITLE 'Win 2' ; CHILD ; ON INIT ( oWnd:Title := cTit + " - Disabled", oWnd:Enabled := .F. ) ; ON RELEASE ( oWnd:Enabled := .T., oWnd:Title := cTit, oWnd:SetFocus() ) /* ON INIT ( SetProperty( cOwnerFormName, "Title", cOwnerFormTitle + " - Disabled" ) ) ; ON RELEASE ( SetProperty( cOwnerFormName, "Title", cOwnerFormTitle ) ) ; */ @ 20, 40 BUTTON Button_2 caption 'Child Win 3' WIDTH 100 HEIGHT 28 ACTION {|| DoWindow3() } // DEFINE TIMER T_1 INTERVAL 250 ACTION SetProperty( ThisWindow.Name, "Enabled", ( _IsWindowActive( cActiveFormName ) == .F. ) ) END WINDOW ACTIVATE WINDOW Form_2 RETURN ***************************************************************************** PROCEDURE DoWindow3() // LOCAL cOwnerFormName := ThisWindow.Name, cOwnerFormTitle := ThisWindow.Title LOCAL oWnd := ThisWindow.Object LOCAL cTit := oWnd:Title DEFINE WINDOW Form_3 ; AT App.Row + 60, App.Col + 60 ; WIDTH 600 HEIGHT 400 ; TITLE 'Win 3' ; CHILD ; ON INIT ( oWnd:Title := cTit + " - Disabled", oWnd:Enabled := .F. ) ; ON RELEASE ( oWnd:Enabled := .T., oWnd:Title := cTit, oWnd:SetFocus() ) /* ON INIT ( SetProperty( cOwnerFormName, "Title", cOwnerFormTitle + " - Disabled" ) ) ; ON RELEASE ( SetProperty( cOwnerFormName, "Enabled", .T. ), SetProperty( cOwnerFormName, "Title", cOwnerFormTitle ), ; DoMethod( cOwnerFormName, "setFocus" ) ) */ @ 50, 100 BUTTON Button_2 caption 'OK' WIDTH 100 HEIGHT 28 ACTION {|| MsgBox( 'OK' ) } END WINDOW ACTIVATE WINDOW Form_3 RETURN
|
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1518
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.07.19 17:32. Заголовок: SergKis пишет: Доба..
SergKis пишет: цитата: | Добавьте в CLASS TWndData |
| Спасибо, добавил
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1519
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.07.19 09:45. Заголовок: Обновил сборку 19.06..
Обновил сборку 19.06 (Update 2) с учетом последних наработок Базовый дистрибутив находится по адресу http://hmgextended.com/files/CONTRIB/hmg-19.06-setup.exe Что нового: Скрытый текст
* New: Added the useful function HMG_GetForms( [ cFormTypes ] [, lObj ] ) for retrieving of an array of the form's names (or handles). Contributed by Sergej Kiselev (see demo in folder \samples\Basic\MAINDEMO_(SYNTAX_I)) * Modified: The local OS detecting functions were replaced with a native [x]Harbour implementation (instead of using the MiniGUI function WindowsVersion()). NOTE: The C-functions IsWinXPorLater() and IsVistaOrLater() are defined as pseudo-functions now. It was a postponed modification. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see i_pseudofunc.ch in folder Include\) * Modified: The function IsExe64() is replaced with a native Harbour implementation. The compatibility with xHarbour compiler is provided also. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see i_pseudofunc.ch in folder Include\) * Updated: Header file i_hmgcompat.ch for compatibility with Official HMG: - added pseudo-function IsMaximized( hWnd ). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\ImageFromWeb) * Updated: Pacified the warnings in the C-code for compatibility with MS Visual C++ 2019 (32-bit) compiler. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: OpenSSL wrapper for using of the version 1.0.2s. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: 'MiniGUI DataBase Utility' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\mgDBU)
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2627
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.07.19 09:47. Заголовок: gfilatov2002 Думает..
gfilatov2002 Думается функция _hmg_OnHideFocusManagement ( i ) для окна STANDART работает не точно. Подправленный пример (был выше) тут https://TransFiles.ru/b0lgp Нажатие кнопок на окнах CHILD и MODAL работает нормально, а на окне STANDART на передний план выводится окно MAIN и потом окно AlertInf(...). Если, в ф-ии _DO_BTN_( oBtn ), убрать строку (выделено цветом) Скрытый текст
STATIC FUNC _DO_BTN_( oBtn ) LOCAL cBtn := oBtn:Name //This.Name LOCAL cCapt := This.Caption LOCAL cWnd := ThisWindow.Name LOCAL cTitl := ThisWindow.Title LOCAL cType := ThisWindow.Type LOCAL lStbP := 'Export' $ cBtn LOCAL cText := iif( lStbP, CRLF+CRLF+'Start ProgressBar', '' ) LOCAL aThis := _ThisInfo() _OUT_(.T., cWnd, cType) AlertInfo(cBtn + CRLF + cCapt + CRLF + cTitl + CRLF + cType + cText, cWnd) _OUT_(.F.) _ThisInfo(aThis) This.Chk_Lock.Value := .F. // oBtn:SetFocus() If lStbP; StbProgressBar() EndIf This.Chk_Lock.Value := .T. RETURN Nil
| окно MAIN так и останется на переднем плане в фокусе.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1520
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.07.19 11:54. Заголовок: SergKis пишет: на о..
SergKis пишет: цитата: | на окне STANDART на передний план выводится окно MAIN |
| Да, это верно Но это плата за то, что у этого окна нет родительского окна-хозяина (в отличие от CHILD). SergKis пишет: цитата: | Если, в ф-ии _DO_BTN_( oBtn ), убрать строку |
| Поэтому и требуется предложенный Вами костыль. Как это победить по-другому, я не нашел...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2630
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.07.19 13:05. Заголовок: gfilatov2002 пишет К..
gfilatov2002 пишет цитата: | Как это победить по-другому, я не нашел... |
| Получается при первом STANDART надо убирать MAIN в hide (костыль в придачу), тогда, вроде, похоже на правду Скрытый текст
STATIC FUNC Main_Btn_Run( oBtn, nEvent ) ... LOCAL nY, nX, nW, nH, nN, aYX LOCAL nTypW := 0 LOCAL cTypW := '' ... DEF WINDOW &cForm AT 0,0 WIDTH 1100 HEIGHT 650 ; ... ON RELEASE Nil cTypW := This.Type nTypW := Len( HMG_GetForms('S') ) If cTypW == 'S' .and. nTypW == 1 do_obj( _HMG_MainHandle, {|ow| ow:Hide() } ) EndIf DEFINE STATUSBAR ... CENTER WINDOW &cForm ACTIVATE WINDOW &cForm If cTypW == 'S' .and. nTypW == 1 do_obj( _HMG_MainHandle, {|ow| ow:Show() } ) EndIf If Len(HMG_GetForms()) == 1; oChk:Value := .T. EndIf RETURN Nil
|
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6337
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.07.19 17:11. Заголовок: Заметил такую неприя..
Заметил такую неприятность. В функциях пользуюсь определением имени формы ? ThisWindow.Name, _HMG_ThisFormName, cStaticGlobalForm возвращает: Form_Main Form_Main Form_AYC cStaticGlobalForm - делаю определение сразу под созданием окна. Т.е. должно всегда возвращаться Form_AYC !!! Значит - ThisWindow.Name, _HMG_ThisFormName нельзя использовать ? Правда у меня на форме Form_Main включён таймер на каждую секунду (для тестирования). Может он влияет на псевдо-функции ThisWindow.Name, _HMG_ThisFormName ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2643
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.07.19 18:03. Заголовок: Andrey пишет Значит ..
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2644
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.07.19 18:08. Заголовок: PS т.е. в TIMER блок..
PS т.е. в TIMER блоке на Form_Main ставишь aThis := _ThisInfo() // в начале ... _ThisInfo(aThis) // в конце
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2645
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.07.19 18:11. Заголовок: PPS Наврал, на TIMER..
PPS Наврал, на TIMER не получится, там ставится среда This для Form_Main, sory
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6338
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.07.19 18:24. Заголовок: Понял, что с TIMER н..
Понял, что с TIMER нужно аккуратно работать. Всё таки решение через STATIC переменную типа cStaticThisForm более простое. SergKis пишет: цитата: | Лучшее решение, по мне, функция aThis := _ThisInfo(), работаешь как с Alias(), сохраняешь\восстанавливаешь |
| Буду иметь ввиду. Уже кое где применил.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2646
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.07.19 18:30. Заголовок: Andrey пишет Всё так..
Andrey пишет цитата: | Всё таки решение через STATIC переменную типа cStaticThisForm более простое. |
| Теряется универсальность. Надо каждое окно делать в отдельном prg файле, иначе для каждого окна свою переменную, что фактически означает работу по имени окна, т.е. Form_Main.Btn1.Value и т.д.
|
|
|
PSP
|
| постоянный участник
|
Пост N: 1536
Зарегистрирован: 27.01.07
|
|
Отправлено: 16.07.19 19:38. Заголовок: SergKis пишет: Теря..
SergKis пишет: цитата: | Теряется универсальность. Надо каждое окно делать в отдельном prg файле, иначе для каждого окна свою переменную, что фактически означает работу по имени окна, т.е. Form_Main.Btn1.Value и т.д. |
| hash-массив не поможет в этом случае?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6339
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.07.19 21:45. Заголовок: PSP пишет: hash-мас..
PSP пишет: цитата: | hash-массив не поможет в этом случае? |
| Да зачем усложнять то код написания. Нужно проще писать код, чтобы когда нужно править так лет через 10, понимать что и как написано. А то открываешь свой код написанный 12 лет назад и думаешь, кто так фигово написал то.... и почему до сих пор работает ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2647
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.07.19 22:21. Заголовок: PSP пишет Как это м..
PSP пишет [quote]` Как это может помочь при плавающем cForm WHILE _IsWindowDefined( cForm := cFrm+'_'+hb_ntos(++nFrm) ) ENDDO
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|