Выше, я, упоминал про возможность использовать в качестве ассоциативного массива на основе Type: code_34388.txtА теперь о скорости: Для теста взял метод извлечения по индексу из StrList и извлечение по имени из Типа. Из времени измерения, исключен показ результата на визуальных компонентах. Результаты теста Схема теста: Add(StrList,11799956,357,84) { Strings=#34:actArrangeCascade.Caption=Каскадом|50:actArrangeTileHoriz.Caption=Плиткой по горизонтали|47:actArrangeTileVert.Caption=Плиткой по вертикали|30:actArrangeTile.Caption=Плиткой|31:actAbout.Caption=О программе...|21:actExit.Caption=Выход|24:actClose.Caption=Закрыть|31:actCloseAll.Caption=Закрыть все|29:actHelp.Caption=Справка IcoFX|26:actTutorials.Caption=Уроки|22:actForum.Caption=Форум|43:actHomePage.Caption=Домашняя страница IcoFX|35:actBuy.Caption=Купить полную версию|42:actObjectPacks.Caption=Покупка изображений|34:actTip.Caption=Окно приветствия...|41:actUpdate.Caption=Проверить обновления...|35:actPreferences.Caption=Настройки...|53:actDeleteWorkspace.Caption=Удалить рабочую область...|38:actToolbar.Caption=Панель инструментов|53:actSaveWorkspace.Caption=Сохранить рабочую область...|46:actDownloadLanguage.Caption=Загрузить языки...|53:actLocalToolbar.Caption=Локальная панель инструментов|37:actStatusbar.Caption=Статусная строка|40:actDefaultWorkspace.Caption=По умолчанию|28:actPanelColors.Caption=Цвета|31:actPanelPalette.Caption=Палитра|30:actPanelSwatches.Caption=Набор|33:actPanelPreview.Caption=Навигатор|31:actPanelInfo.Caption=Информация|33:actPanelTools.Caption=Инструмeнты|27:actPanelLayers.Caption=Слои|37:actPanelHistogram.Caption=Гистограмма|31:actPanelHistory.Caption=История|35:actPanelGradients.Caption=Градиенты|29:actPanelBrushes.Caption=Кисти|51:actPanelToolProperties.Caption=Свойства инструмента|34:actPanelExplorer.Caption=Проводник|39:actShortcuts.Caption=Горячие клавиши...|34:actRegister.Caption=Регистрация...|34:actNewIcon.Caption=Новая иконка...|31:actNewIcon.Hint=Новая иконка...|40:actNewImage.Caption=Новое изображение...|37:actNewImage.Hint=Новое изображение...|36:actNewCursor.Caption=Новый курсор...|33:actNewCursor.Hint=Новый курсор...|21:actGrid.Caption=Сетка|34:actGrid.Hint=Показать/Скрыть сетку|26:actOpen.Caption=Открыть...|23:actOpen.Hint=Открыть...|25:actSave.Caption=Сохранить|22:actSave.Hint=Сохранить|34:actSaveAs.Caption=Сохранить как...|28:actCapture.Caption=Захват...|29:actExtract.Caption=Извлечь...|25:actClear.Caption=Очистить|41:actSelectLanguage.Caption=Выбрать язык...|24:actUndo.Caption=Отменить|21:actUndo.Hint=Отменить|25:actRedo.Caption=Повторить|22:actRedo.Hint=Повторить|25:actDelete.Caption=Удалить|23:actCut.Caption=Вырезать|20:actCut.Hint=Вырезать|26:actCopy.Caption=Копировать|23:actCopy.Hint=Копировать|25:actPaste.Caption=Вставить|22:actPaste.Hint=Вставить|50:actPasteNew.Caption=Вставить как новое изображение|45:actPasteLayer.Caption=Вставить как новый слой|30:actSelAll.Caption=Выделить все|37:actSelNone.Caption=Отменить выделение|44:actSelInvert.Caption=Инвертировать выделение|33:actSelFit.Caption=По размеру окна|34:actSelOrig.Caption=Исходный размер|38:actSelToFront.Caption=На передний план|35:actSelToBack.Caption=На задний план|37:actHue.Caption=Оттенок и насыщение...|27:actLevels.Caption=Уровни...|27:actCurves.Caption=Кривые...|38:actLast.Caption=Последний эффект (нет)|59:actBatchIcon.Caption=Пакетное создание иконок и курсоров...|54:actBatchImage.Caption=Пакетное создание изображений...|64:actBatchExtract.Caption=Пакетное извлечение иконок и курсоров...|49:actResEditIcl.Caption=Редактор ресурсов иконок...|27:actZoomIn.Caption=Увеличить|24:actZoomIn.Hint=Увеличить|28:actZoomOut.Caption=Уменьшить|25:actZoomOut.Hint=Уменьшить|34:actFitScreen.Caption=На весь экран|40:actActualPixels.Caption=Активные пиксели|33:actSideBar.Caption=Боковая панель|39:actAutoZoom.Caption=Автомасштабирование|41:actContrast.Caption=Яркость и контраст...|40:actColBalance.Caption=Цветовой баланс...|50:actCustomFilter.Caption=Пользовательский фильтр...|31:actEmbossColor.Caption=Тиснение|39:actEmbossLight.Caption=Светлое тиснение|34:actEmboss.Caption=Среднее тиснение|37:actEmbossDark.Caption=Темное тиснение|29:actAverage.Caption=Усреднение|42:actGaussBlur.Caption=Размытие по Гауссу...|34:actBevel.Caption=Фаска и рельеф...|24:actBlur.Caption=Размытие|35:actBlurSoft.Caption=Мягкое размытие|36:actBlurMore.Caption=Сильное размытие|41:actMotionBlur.Caption=Размытие в движении|27:actSharpen.Caption=Резкость|38:actSharpenLess.Caption=Слабая резкость|39:actSharpenMore.Caption=Сильная резкость|43:actSharpenDir.Caption=Направленная резкость|50:actFindEdgesVert.Caption=Найти края (по вертикали)|53:actFindEdgesHoriz.Caption=Найти края (по горизонтали)|38:actEnhanceEdges.Caption=Расширить края|38:actDetectEdges.Caption=Определить края|34:actEdgesStrong.Caption=Резкие края|32:actEdgesWeak.Caption=Мягкие края|25:actContour.Caption=Контур|32:actNoise.Caption=Добавить шум...|24:actGlow.Caption=Свечение|28:actWaggle.Caption=Раздвоение|23:actPattern.Caption=Узор|41:actPaintDark.Caption=Затемненное смещение|43:actPaintBright.Caption=Осветленное смещение|25:actShake.Caption=Дрожание|36:actShakeLess.Caption=Слабое дрожание|31:actPale.Caption=Сильная яркость|22:actScene.Caption=Сцена|35:actGrayscale.Caption=Оттенки серого|31:actInvert.Caption=Инвертировать|22:actRed.Caption=Красный|24:actGreen.Caption=Зеленый|21:actBlue.Caption=Синий|24:actYellow.Caption=Желтый|23:actCyan.Caption=Голубой|28:actMagenta.Caption=Пурпурный|40:actSwapRG.Caption=Замена Красный-Зеленый|38:actSwapRB.Caption=Замена Красный-Синий|38:actSwapGB.Caption=Замена Зеленый-Синий|38:actHotSpot.Caption=Активная область...|43:actTestCursor.Caption=Тестировать курсор...|32:actAuthor.Caption=Автор и Имя...|38:actFrameRate.Caption=Счётчик кадров...|42:actDuplicateFrame.Caption=Дублировать кадр|42:actFrameUp.Caption=Переместить кадр вперёд|43:actFrameDown.Caption=Переместить кадр назад|38:actFrameReverse.Caption=Обратить кадры|35:actDropShadow.Caption=Наложить тень|44:actNew.Caption=Добавить новое изображение...|41:actNew.Hint=Добавить новое изображение...|42:actDel.Caption=Удалить текущее изображение|39:actDel.Hint=Удалить текущее изображение|48:actDelMore.Caption=Удалить другие изображения...|51:actImportImage.Caption=Импортировать изображение...|48:actImportImage.Hint=Импортировать изображение...|37:actNext.Caption=Следующее изображение|38:actPrev.Caption=Предыдущее изображение|32:actDuplicate.Caption=Дублировать|64:actCreateWinIco.Caption=Создать Windows иконку из изображения...|61:actCreateWinIco.Hint=Создать Windows иконку из изображения...|66:actCreateMacIco.Caption=Создать Macintosh иконку из изображения...|63:actCreateMacIco.Hint=Создать Macintosh иконку из изображения...|53:actCreateCur.Caption=Создать курсор из изображения...|50:actCreateCur.Hint=Создать курсор из изображения...|37:actSnapshot.Caption=Сделать снимок...|33:actProperties.Caption=Свойства...|36:actOpacity.Caption=Непрозрачность...|28:actFade.Caption=Затухание...|25:actShadow.Caption=Тень...|36:actTransp.Caption=Прозрачный цвет...|37:actSize.Caption=Размер изображения...|38:actCanvasSize.Caption=Размер холста...|32:actRotate.Caption=Произвольно...|44:actRotateLeft.Caption=Повернуть влево на 90°|46:actRotateRight.Caption=Повернуть вправо на 90°|38:actRotate180.Caption=Повернуть на 180°|44:actFlipHoriz.Caption=Отразить по горизонтали|41:actFlipVert.Caption=Отразить по вертикали|42:act32Bits.Caption=Цветной + Альфа (32 бит)|34:act24Bits.Caption=Цветной (24 бит)|52:act8Bits.Caption=Оптимизированный 256 цветов (8 бит)|51:act4Bits.Caption=Оптимизированный 16 цветов (4 бит)|37:actWin4Bits.Caption=16 цветов (4 бит)|48:act1Bit.Caption=Оптимизированный 2 цвета (1 бит)|34:actWin1Bit.Caption=2 цвета (1 бит)|44:actNewIcl.Caption=Новая библиотека иконок...|46:actNewCul.Caption=Новая библиотека курсоров...|51:actResEditCul.Caption=Редактор ресурсов курсоров...|60:actAntialiasing.Caption=Использовать сглаживание изображений|57:actAntialiasing.Hint=Использовать сглаживание изображений|57:actSelTrans.Caption=Использовать прозрачность в выделении|54:actSelTrans.Hint=Использовать прозрачность в выделении|59:actFilterAlpha.Caption=Использовать фильтр для Альфа-канала|56:actFilterAlpha.Hint=Использовать фильтр для Альфа-канала|36:actExpand.Caption=Растянуть холст...|38:actLocalSidebar.Caption=Боковая панель|51:actLocalSidebar.Hint=Показать/Скрыть боковую панель|54:actIconCustomization.Caption=Настроить значок папки...|51:actIconCustomization.Hint=Настроить значок папки...|48:actSaveSelection.Caption=Сохранить выделенное...|48:actLoadSelection.Caption=Загрузить выделенное...|21:dlgOpen.Title=Открыть|27:dlgSave.Title=Сохранить как|24:dlgExtract.Title=Извлечь|35:dlgImport.Title=Открыть изображение|68:actCreateAndroidIco.Caption=Создать Android значок из изображения...|65:actCreateAndroidIco.Hint=Создать Android значок из изображения...|63:actCreateiPhoneIco.Caption=Создать iOS значок из изображения...|60:actCreateiPhoneIco.Hint=Создать iOS значок из изображения...|64:actAdjustAll.Caption=Использовать коррекцию для всех изображений|61:actAdjustAll.Hint=Использовать коррекцию для всех изображений|48:actUndoAll.Caption=Отменить на всех изображениях|49:actRedoAll.Caption=Повторить на всех изображениях|23:frmColors.Caption=Цвета|18:lblAlpha.Caption=A|59:btnDefault.Hint=Цвета переднего и заднего фона по умолчанию|54:btnSwitch.Hint=Поменять цвета переднего и заднего фона|52:btnTransparent.Hint=Сделать выбраный цвет прозрачным|21:GraySliders.Caption=K|18:HSBSliders.Item1=H|18:HSBSliders.Item2=S|18:HSBSliders.Item3=B|20:colBG.Hint=Цвет фона|24:colFG.Hint=Передний цвет|18:RGBSliders.Item1=R|18:RGBSliders.Item2=G|18:RGBSliders.Item3=B|34:actGraySlider.Caption=Шкала серого|31:actRGBSliders.Caption=RGB шкала|31:actHSBSliders.Caption=HSB шкала|44:actCopyHtml.Caption=Копировать цвет как HTML|68:actDefaultColors.Caption=Цвета переднего и заднего фона по умолчанию|63:actSwitchColors.Caption=Поменять цвета переднего и заднего фона|64:actFGTransparent.Caption=Сделать прозрачным цвет переднего плана|61:actBGTransparent.Caption=Сделать прозрачным цвет заднего фона|55:actTransparent.Caption=Сделать выбраный цвет прозрачным| Point(doGetString) Point(onGetString) Point(Index) link(onGetString,13350891:doStop,[(396,97)(396,76)(298,76)(298,139)]) } Add(Type_CreateFromList,7077322,357,245) { link(VarsList,11799956:Text,[]) } Add(Type_RW,16078725,357,294) { link(GType,7077322:FType,[]) link(onRead,14675561:doStop,[(494,300)(494,209)]) } Add(MainForm,12311840,266,231) { Width=595 Height=515 Caption="Associative Array Test" link(onCreate,7077322:doCreate,[]) } Add(TimeCounter,14675561,504,196) { Precision=1 link(onStart,11067981:In,[]) link(onStop,13148875:doAdd,[]) } Add(ArrayEnum,10371688,371,196) { link(onItem,5812667:doSplit,[]) link(onEndEnum,5102839:In,[]) link(Array,11799956:Array,[]) } Add(MultiStrData,5812667,455,196) { Char="=" link(onPart1,14675561:doStart,[]) } Add(Plotter,15403322,203,133) { Left=545 Top=245 Align=5 Name="Plott" GridX=0 GridY=20 MaxW=234 } Add(PlotPoints,13148875,553,203) { Grapher="Plott" Color=16711680 Size=2 Shape=2 link(ValueX,10371688:Index,[(566,187)(412,187)(412,236)(384,236)]) } Add(ChildPanel,4226264,154,126) { link(onEvent1,15022404:doFor,[]) link(onEvent2,15403322:doClear,[]) } BEGIN_SDK Add(EditMulti,14365196,7,7) { EventCount=2 WorkCount=1 Width=454 Height=263 link(doWork1,16161322:doWork2,[(81,13)(81,188)]) } Add(Panel,13268776,42,161) { Left=35 Top=105 Width=547 Height=39 Align=2 Color=-16777214 BevelInner=0 } Add(Label,5937623,42,35) { Left=10 Top=10 Width=113 Height=17 Color=-16777214 Caption="Количество проходов" } Add(UpDown,9988057,147,35) { Left=135 Top=6 Height=25 Min=1 Position=1 Point(doEnabled) link(onPosition,4174072:doText,[]) } Add(Edit,4174072,203,35) { Left=165 Top=8 Width=40 Font=[MS Sans Serif,8,1,0,1] Text="1" Alignment=1 DataType=1 Point(doEnabled) link(onChange,10294789:doCompare,[]) } Add(Button,16104950,42,105) { Left=220 Top=8 Caption="Старт" Point(doEnabled) link(onClick,4646026:doEvent1,[]) } Add(VisualShape,764894,385,91) { Left=300 Top=10 Width=16 Height=16 Color2=255 } Add(Label,15565354,406,91) { Left=325 Top=10 Width=60 Height=17 Color=-16777214 Caption="по индексу" } Add(VisualShape,14726524,378,133) { Left=395 Top=10 Width=16 Height=16 Color2=16711680 } Add(Label,15472952,406,133) { Left=420 Top=10 Width=49 Height=17 Color=-16777214 Caption="по ключу" } Add(Button,14453657,378,14) { Left=480 Top=8 Caption="Стереть" Point(doEnabled) link(onClick,14365196:onEvent2,[]) } Add(If_else,10294789,252,35) { Type=3 Op2=Integer(10) link(onFalse,12046729:doData,[]) } Add(DoData,12046729,301,42) { Data=Integer(10) link(onEventData,9988057:doPosition,[(340,48)(340,27)(137,27)(137,41)]) } Add(For,12527065,196,112) { Start=1 link(onEvent,14365196:onEvent1,[(361,118)(361,13)]) link(End,4174072:Text,[]) } Add(Thread,4902049,147,105) { Delay=1 FastStop=0 Point(doStopFlag) link(onSyncExec,12527065:doFor,[]) } Add(Hub,4646026,98,105) { OutCount=3 link(onEvent1,4902049:doStart,[]) link(onEvent2,4902049:doStopFlag,[(130,118)(130,125)]) link(onEvent3,16161322:doWork1,[(130,125)(130,181)]) } Add(ChanelToIndex,16161322,189,175) { link(onIndex,14134448:doEvent1,[]) } Add(Hub,14134448,231,175) { OutCount=4 link(onEvent1,9988057:doEnabled,[(260,181)(260,167)(137,167)(137,48)]) link(onEvent2,4174072:doEnabled,[(263,188)(263,160)(186,160)(186,55)]) link(onEvent3,14453657:doEnabled,[(368,195)(368,20)]) link(onEvent4,16104950:doEnabled,[(256,202)(256,216)(32,216)(32,111)]) } END_SDK Add(For,15022404,252,126) { End=234 link(onEvent,13350891:doStart,[]) link(onStop,10371688:doEnum,[(291,139)(291,202)]) } Add(TimeCounter,13350891,308,126) { Precision=1 link(onStart,11799956:doGetString,[]) link(onStop,6839743:doAdd,[]) } Add(LineBreak,16143432,294,294) { Caption="Read" link(Out,16078725:doRead,[]) Primary=[11067981,301,-98] } Add(PlotPoints,6839743,413,133) { Grapher="Plott" Size=2 Shape=2 link(ValueX,11799956:Index,[(426,124)(454,124)(454,173)(384,173)]) } Add(LineBreak,12963786,105,126) { link(Out,4226264:doWork1,[]) Primary=[5102839,315,77] } Add(Label,4283802,203,231) { Left=350 Top=355 Align=4 Caption="Индекс" Alignment=2 } Add(ChildPanel,5236222,161,231) { } BEGIN_SDK Add(EditMulti,6738250,21,21) { Width=216 Height=186 } Add(Panel,9650527,56,84) { Left=35 Top=105 Width=20 Height=125 Align=1 BevelInner=0 Point(onResize) Point(Handle) Point(Height) link(onResize,7416401:doRefresh,[]) } Add(Img_Text,14823966,161,91) { Orientation=90 Text="Время (микосекунд)" Point(Y) Point(Transform) link(Bitmap,7416401:Bitmap,[(167,82)(153,82)(153,131)(111,131)]) link(Y,11662847:reCalc,[(181,82)(202,82)(202,187)(76,187)]) link(Transform,7446959:Transform,[]) } Add(Img_UseRotate,7446959,182,35) { Angle=0 } Add(MathParse,11662847,63,147) { MathStr="(%1 + %2)/2" Point(reCalc) link(X1,9650527:Height,[]) link(X2,14823966:TextWidth,[(76,141)(167,141)]) } Add(PaintBox,7416401,105,91) { Left=1 Top=1 Width=25 Height=123 Align=5 ClearBeforeDraw=0 link(onBeforeDraw,14823966:doDraw,[]) } END_SDK Add(StatusBar,14940164,504,371) { Panels=#13:Индекс: 0=100|18:Время (мкс): 0=200| } Add(PlotMouseValues,15992085,203,357) { Grapher="Plott" link(onMouseMove,9507566:doSplit,[]) } Add(MT_Part,9507566,259,371) { link(onSplit,11953855:doStrCat,[]) link(onPart,4112489:doCalc,[(319,384)(319,426)]) } Add(StrCat,11953855,329,371) { Str1="Время (мкс): " link(onStrCat,16360120:doAdd,[]) } Add(MT_Add,16360120,371,371) { Data=Integer(1) link(onAdd,10166719:doWork2,[]) } Add(StrCat,15358732,378,420) { Str1="Индекс: " link(onStrCat,13402865:doAdd,[]) } Add(MT_Add,13402865,420,420) { Data=Integer(0) link(onAdd,10166719:doWork3,[(480,426)]) } Add(HubEx,10166719,476,371) { link(onEvent,14940164:doText,[]) } Add(MathParse,4112489,329,420) { MathStr="trunc(%1)" link(onResult,15358732:doStrCat,[]) }
|