Clarion 11-12

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Clarion 11-12

Сообщение kreator »

Губин Игорь писал(а): 06 Ноябрь 2022, 16:09
Губин Игорь писал(а): 06 Ноябрь 2022, 16:05 Чего сидят, ничего не делают?
Хочешь поржать? Под AnyScreen всё идеально работает.
РжуНимагу!!! Ещё один повод перейти.
В принципе мне не к спеху. Отказался от красивой идеи пока, нашёл некую замену. Над FreeImage подумаю. Хотя ради такого? Я нигде его не использую. Можно наверно самому перевести картинку в GrayScale. Другое дело - нужны ли эти пляски с бубном.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Clarion 11-12

Сообщение Игорь Столяров »

kreator писал(а): 06 Ноябрь 2022, 16:32 нашёл некую замену
Надеюсь, что это не чёрная рамка. ;)
Я показал вариант красивого технологического решения с графикой, а использовать или нет - это уже смотрите сами по задаче. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

Clarion 11-12

Сообщение Губин Игорь »

kreator писал(а): 06 Ноябрь 2022, 16:32 РжуНимагу!!! Ещё один повод перейти.
А чего ржать? Всё, наоборот, вполне объяснимо.

Как работает оконная система или система отчётов в Clarion? Осуществляются вызовы некоторых функций рантайма, которые, в свою очередь обращаются к системе Windows API или генерят WMF.

Именно такой подход позволяет создать тот же AnyScreen, т.к. для самой программы ничего не меняется, по большому счёту. Хорваты, фактически, с нуля написали свой вариант этих функций. И, как водится, сделали это правильно, без ошибок, без разбора многих тысяч строк исторически накопившегося кода...
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Clarion 11-12

Сообщение Дед Пахом »

Вот пример с GDI+. Львиную долю кода занимает заполнение матрицы 5x5.

Код: Выделить всё

                     
  PROGRAM

  INCLUDE('gdiplus.inc'), ONCE

  MAP
    GetImageBits(STRING pImageFile, STRING pImageFormat), *STRING
    GetGrayScaleBits(STRING pImageFile, STRING pImageFormat), *STRING
  END

Window                        WINDOW('Image to GrayScale'),AT(,,206,138),CENTER,GRAY,SYSTEM, |
                                FONT('Segoe UI',9)
                                IMAGE,AT(13,13,126,103),USE(?IMAGE1)
                                BUTTON('Grayscale'),AT(151,33,42),USE(?btnGrayScale)
                                BUTTON('Colored'),AT(151,58,42),USE(?btnColored)
                                BUTTON('Exit'),AT(151,102,42),USE(?btnExit),STD(STD:Close)
                              END

imageFile                     STRING(FILE:MaxFilePath), AUTO
imageFormat                   STRING('image/png')
sourceBits                    &STRING   !- original image bits
grayScaleBits                 &STRING   !- grayscaled image bits
  
  CODE
  OPEN(Window)
  
  imageFile = '.\Photo2743.png'
  sourceBits &= GetImageBits(imageFile, imageFormat)
  grayScaleBits &= GetGrayScaleBits(imageFile, imageFormat)
  
  ?IMAGE1{PROP:ImageBits} = sourceBits
  
  ACCEPT
    CASE ACCEPTED()
    OF ?btnGrayScale
      ?IMAGE1{PROP:ImageBits} = grayScaleBits
    OF ?btnColored
      ?IMAGE1{PROP:ImageBits} = sourceBits
    END
  END
  
  IF NOT sourceBits &= NULL
    DISPOSE(sourceBits)
  END
  IF NOT grayScaleBits &= NULL
    DISPOSE(grayScaleBits)
  END
  
  
GetImageBits                  PROCEDURE(STRING pImageFile, STRING pImageFormat)
bmp                             TGdiPlusBitmap
sBits                           &STRING
  CODE
  IF bmp.FromFile(pImageFile) = GpStatus:Ok
    sBits &= bmp.ToString(pImageFormat) 
  END
  RETURN sBits
  
GetGrayScaleBits PROCEDURE(STRING pImageFile, STRING pImageFormat)
bmpSrc              TGdiPlusBitmap
bmpDst              TGdiPlusBitmap
g                   TGdiPlusGraphics
matrix              LIKE(typColorMatrix)
attr                TGdiPlusImageAttributes
rc                  LIKE(GpRectF)
sBits               &STRING
  CODE
  IF bmpSrc.FromFile(pImageFile) = GpStatus:Ok
    
    rc.width = bmpSrc.GetWidth()
    rc.height = bmpSrc.GetHeight()
  
    bmpDst.CreateBitmap(rc.width, rc.height, PixelFormat16bppRGB555)  !- format PixelFormat16bppGrayScale (and some others) returns status 3 (OutOfMemory)
    g.FromImage(bmpDst)

    !- gray scale conversion
    attr.CreateImageAttributes()

!   {
!     .3f, .3f, .3f,   0,   0,
!     .6f, .6f, .6f,   0,   0,
!     .1f, .1f, .1f,   0,   0,
!       0,   0,   0,   1,   0,
!       0,   0,   0,   0,   1
!   };
  
    matrix.m[1][1] = 0.3
    matrix.m[1][2] = 0.3
    matrix.m[1][3] = 0.3
    matrix.m[1][4] = 0
    matrix.m[1][5] = 0
  
    matrix.m[2][1] = 0.6
    matrix.m[2][2] = 0.6
    matrix.m[2][3] = 0.6
    matrix.m[2][4] = 0
    matrix.m[2][5] = 0
  
    matrix.m[3][1] = 0.1
    matrix.m[3][2] = 0.1
    matrix.m[3][3] = 0.1
    matrix.m[3][4] = 0
    matrix.m[3][5] = 0
  
    matrix.m[4][1] = 0
    matrix.m[4][2] = 0
    matrix.m[4][3] = 0
    matrix.m[4][4] = 1
    matrix.m[4][5] = 0
  
    matrix.m[5][1] = 0
    matrix.m[5][2] = 0
    matrix.m[5][3] = 0
    matrix.m[5][4] = 0
    matrix.m[5][5] = 1
  

    attr.SetColorMatrix(matrix, ColorMatrixFlagsDefault, ColorAdjustTypeBitmap)

    g.DrawImage(bmpSrc, rc, rc, UnitPixel, attr)
    sBits &= bmpDst.ToString(pImageFormat)
  END
  
  RETURN sBits
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Clarion 11-12

Сообщение kreator »

Игорь Столяров писал(а): 06 Ноябрь 2022, 16:37 Надеюсь, что это не чёрная рамка.
Нет. :mrgreen: У нас производство. Это фильтр по сотрудникам в бригаде для аналитики, в бригаде их конечное число. И поскольку это нужно отображать не на компе, а на вертикальном мониторе (типа как стоят в MCDonald's и KFC), то заказчику удобнее отмечать сотрудников так. Пока навесил ещё Image (типа "Blocked").
Игорь Столяров писал(а): 06 Ноябрь 2022, 16:37 Я показал вариант красивого технологического решения с графикой, а использовать или нет - это уже смотрите сами по задаче.
Спасибо. И ДП спасибо. Дали пендель посмотреть варианты. Вроде как алгоритм преобразования цветных пикселей в GrayScale несложный (во всяком случае Интернет говорит об этом), можно попробовать без внешних средств.
Игорь Губин, а что насчёт срабатывания prop:Disable в рантайме? Наверно через prop:Hide тоже неправильно? В AS как?
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Clarion 11-12

Сообщение finsoftrz »

Губин Игорь писал(а): 06 Ноябрь 2022, 17:13
kreator писал(а): 06 Ноябрь 2022, 16:32 РжуНимагу!!! Ещё один повод перейти.
А чего ржать? Всё, наоборот, вполне объяснимо.

Как работает оконная система или система отчётов в Clarion? Осуществляются вызовы некоторых функций рантайма, которые, в свою очередь обращаются к системе Windows API или генерят WMF.

Именно такой подход позволяет создать тот же AnyScreen, т.к. для самой программы ничего не меняется, по большому счёту. Хорваты, фактически, с нуля написали свой вариант этих функций. И, как водится, сделали это правильно, без ошибок, без разбора многих тысяч строк исторически накопившегося кода...
Ммм... Речь про виндового клиента или только про веб? Со стороны веба работает джаваскриптовый фреймворк, там про кларионовский рантайм не занют. :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

Clarion 11-12

Сообщение Губин Игорь »

finsoftrz писал(а): 06 Ноябрь 2022, 19:41 Речь про виндового клиента или только про веб? Со стороны веба работает джаваскриптовый фреймворк, там про кларионовский рантайм не занют.
Рекомендую разобраться, вначале, как там всё устроено, а уж потом писать...
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

Clarion 11-12

Сообщение Губин Игорь »

kreator писал(а): 06 Ноябрь 2022, 19:33 Игорь Губин, а что насчёт срабатывания prop:Disable в рантайме? Наверно через prop:Hide тоже неправильно? В AS как?
Не совсем понял вопрос.
Prop:hide отрабатывает нормально (и там и там)
Рrop:disable в AS отрабатывает полностью корректно.

Я, вероятно, был не прав критикуя применение prop:disable на Image. Его применение может быть вполне оправдано с точки зрения интерфейса.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Clarion 11-12

Сообщение finsoftrz »

Губин Игорь писал(а): 07 Ноябрь 2022, 8:18
finsoftrz писал(а): 06 Ноябрь 2022, 19:41 Речь про виндового клиента или только про веб? Со стороны веба работает джаваскриптовый фреймворк, там про кларионовский рантайм не занют.
Рекомендую разобраться, вначале, как там всё устроено, а уж потом писать...
Спасибо за рекомендацию. Я всего лишь задал вопрос человеку, который в этом уже глубоко разобрался. :-)
Как я понимаю, в данном случае на клиента передается файл с картинкой и проперти контрола. А дальше, в зависимости от клиента, вывод осуществляется либо средствами рантайма клариона (с учетом подмены некоторых стандартных функций) при виндовом клиенте, либо средствами джаваскрипт фреймворка при веб клиенте. Поэтому я и спросил уточнения, что ты имеешь ввиду под "переписали все правильно".
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

Clarion 11-12

Сообщение Губин Игорь »

finsoftrz писал(а): 07 Ноябрь 2022, 9:06 Поэтому я и спросил уточнения, что ты имеешь ввиду под "переписали все правильно".
То, что серверный кусок на основании полученных из программы данных формирующий "джаваскрипт фреймворк + файлы" + сам фреймворк на клиенте отрабатывают всё правильно. Количество мелких и не очень мелких глюков в оконной системе/системе отчётов клариона, которые отсутствуют при работе AnyScreen HTML5 , колоссально. Не спорю, там есть свои заморочки и глюки, но жить стало намного проще.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Clarion 11-12

Сообщение finsoftrz »

Игорь, ты не понял, видимо, вопроса. Сказано было, что проблема при выводе картинки, возникшая у Критора, при работе с anyscreen не возникает. И что хорваты переписали какие-то функции, что эту проблему пофиксило. Правильно? Я спросил, речь о веб или вин клиенте. Так как отрисовкой в первом случае занимается джаваскрипт, а во втором кларионовский рантайм. Соответственно, на каком уровне была устранена проблема. Как я понял, речь идет именно про джаваскрипт, а не про кларионовский рантайм. Чтобы это понять точно, надо проверить, проявляется ли проблема в вин клиенте. Если тебе лень проверить, то и фик с ним. Я чисто для понимания спросил.

Про колоссальное количество глюков - имеется ввиду рантайм с11? Насколько я знаю по итогам тестирования, там есть ряд глюков, которых не было в с6. Это одна из причин, почему я не хочу переходить на него. В с6 тоже есть, но у меня все работает достаточно корректно. Крайне редко может что-то вылезти, но это явно не "колоссально". :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

Clarion 11-12

Сообщение Губин Игорь »

finsoftrz писал(а): 07 Ноябрь 2022, 13:08 Я спросил, речь о веб или вин клиенте
Я говорю только о HTML-клиенте. Виндовый клиент не использую по ряду причин.

А проверить всё просто. У всех, у кого стоит C11 если AnyScreen

Java и HTML отрабатывают без вопросов. На Windows, как и ожидалось - глюк
Это я только кажусь дураком! На самом деле я полный идиот!
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Clarion 11-12

Сообщение kreator »

Губин Игорь писал(а): 07 Ноябрь 2022, 8:30
kreator писал(а): 06 Ноябрь 2022, 19:33 Игорь Губин, а что насчёт срабатывания prop:Disable в рантайме? Наверно через prop:Hide тоже неправильно? В AS как?
Не совсем понял вопрос.
Prop:hide отрабатывает нормально (и там и там)
Рrop:disable в AS отрабатывает полностью корректно.

Я, вероятно, был не прав критикуя применение prop:disable на Image. Его применение может быть вполне оправдано с точки зрения интерфейса.
Я имел ввиду, что prop:Disable не срабатывает. Если посмотреть эмбедсы в моём примере, то там картинка сначала хайдится, потом дизейблится, потом опять анхайд.
We are hard at work… for you. :)
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

Clarion 11-12

Сообщение Губин Игорь »

kreator писал(а): 07 Ноябрь 2022, 18:52 Я имел ввиду, что prop:Disable не срабатывает. Если посмотреть эмбедсы в моём примере, то там картинка сначала хайдится, потом дизейблится, потом опять анхайд.
А фиг его знает... Воспринимай как фичу...
Это я только кажусь дураком! На самом деле я полный идиот!
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Clarion 11-12

Сообщение kreator »

В продолжение темы. Что-то вот так не работает:

Код: Выделить всё

LOC:Image = ?IMAGE4{prop:ImageBits}
, где LOC:Image - банальный String большого размера. Не сказать, что совсем не работает. При относительно больших размерах картинки строка заполняется пробелами. При небольших размерах всё ОК. :shock: Может и некорректный синтаксис.
А вот так вроде работает:

Код: Выделить всё

M:Image{prop:Handle} = ?IMAGE4{prop:ImageBlob}
, где M:Image - blob таблицы tps.
Чем String отличается от Memo и Blob, непонятно.
We are hard at work… for you. :)
Ответить