Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

XML Engine -тупик

6.0K
10 декабря 2010 года
spyrytus
51 / / 14.07.2006
Здравствуйте.

К средине проекта, сложилась ситуация, когда нужно выбрать нужную концепцию для продолжения работы.
Проблема в следующем:
  1. Есть проект (расскажу только проблемную часть), в нем есть модуль преобразования некоторой структуры XML кода в готовую программу.
  2. Т.е. – при запуске программа считывает XML файл и создает по его описанию форму с готовыми элементами управления (ComboBox, ListBox, Button и др. в общей сложности около 15). Создание формы с элементами управления – создается «на лету», т.е. во время исполнения программы.
  3. Всего 10 XML файлов с разными формами, вот тут то и начинается проблема:[LIST=1]
  4. Как теперь сделать так, чтобы при запуске файла, в зависимости от его содержимого «на лету» создавались разные обработчики событий для тех элементов управления, которые были описаны в текущем открытом XML файле.
  5. Т.е. у меня в одном XML файле есть кнопка, которая выводит сообщение «Hello World !» по нажатию на нее, а в другом файле есть тоже кнопка, которая выводит сообщение «Goodbye World !» при нажатии на нее.
  6. Т.е. описание формата XML абсолютно одинаково, только должны выводиться разные сообщения по нажатию на эти кнопки.
  • Формат файла следующий (приблизительный), две кнопки но нужно, чтобы они выводили разные надписи по нажатию на них:
    <interface>
    <button name=”button1” caption=”click here”
    onclick=”как сделать так, чтобы выводилось <Hello World !>” />
    <button name=”button2” caption=”click here”
    onclick=”как сделать так, чтобы выводилось <Goodbye World !>” />
    </interface>
  • Я начал использовать FastScript - но сейчас понимаю, что это ошибочное решение и для моих целей, оно не применимо !!! Т.е. любой скриптовый движок – для меня не применим !!! AngelScript, FastScript и др.[/LIST]Я придумал следующие концепции, пожалуйста, помогите выбрать правильное решение для моей задачи или посоветуйте какую-то технологию, т.к. я не знаю, что делать.
    1. Написать много обработчиков и в зависимости от аргумента XML файла подставлять той или иной по средствам switch.
    2. Написать все обработчики для всех элементов управления (т.е. OnClick, OnDbClick, OnChanging и др.) и в каждом с них в зависимости от аргументов XML файла вызывать соответствующий обработчик внутри COM объекта, который будет выполнять необходимые действия и возвращать результат в каком-то виде (например, тот-же XML).
    3. Или какой еще вариант придумать … я просто не знаю …
    Вроде все изложил …
    ---
    Заранее благодарен: Евгений.
  • 535
    11 декабря 2010 года
    Нездешний
    537 / / 17.01.2008
    Изложили все, кроме языка, на котором пишется программа :)
    И ОС - хотя о последней можно предположить, что Windows - судя по COM.

    Не совсем понятно, где должен располагаться код обработчика сообщения, допустим, того же OnClick для кнопки. Задан ли он сразу в программе (тогда в чем смысл динамически создавать форму из XML?) или описывается каким-то скриптом, который тоже подгружается динамически?

    Или по событиям должны быть доступны только какие-то стандартные действия (типа - по клику кнопки всегда выводить сообщение)?
    242
    11 декабря 2010 года
    Оlga
    2.2K / / 04.02.2006
    не совсем понимаю какие проблемы сохранять для каждой кнопки и если нужно для каждого ее события нужный message и затем также динамически его вытягивать и подставлять его куда надо. возможно мое не понимание вызвано не знанием языка, на котором вы пишите.
    использовала ХМЛ файлы для сохранения языков интерфейса программы, включая содержание различных сообщений для пользователя, все хорошо работало, проблем не наблюдалось.
    6.0K
    11 декабря 2010 года
    spyrytus
    51 / / 14.07.2006
    Цитата: Нездешний
    Изложили все, кроме языка, на котором пишется программа :)
    И ОС - хотя о последней можно предположить, что Windows - судя по COM.


    Язык С++, а ОС - Windows.:)

    Цитата: Нездешний
    Не совсем понятно, где должен располагаться код обработчика сообщения, допустим, того же OnClick для кнопки. Задан ли он сразу в программе (тогда в чем смысл динамически создавать форму из XML?) или описывается каким-то скриптом, который тоже подгружается динамически?


    Изначально - делал через FastScript, но потом когда дошел до обработки DevExpress Grid - понял, что это ошибочный выбор ... :mad:
    Да, обработчики записаны в программе, а смысл создавать форму из XML - это задача, которая стоит передо мной (такое ТЗ на работе).
    Смысел в том, чтобы как-то "на лету" создавать содержимое обработчиков, т.е. в зависимости от аргументов XML - делать некие действия ...

    Цитата: Нездешний
    Или по событиям должны быть доступны только какие-то стандартные действия (типа - по клику кнопки всегда выводить сообщение)?


    Нет, действия могут быть совсем разные, от вывода сообщения до какого-то глубокого алгоритма (образно говоря) ...

    А вообще смысл данного топика - выбрать приемлемый метод для реализации, или какую-то технологию ...

    Заранее благодарен.

    6.0K
    11 декабря 2010 года
    spyrytus
    51 / / 14.07.2006
    Цитата: Оlga
    не совсем понимаю какие проблемы сохранять для каждой кнопки и если нужно для каждого ее события нужный message и затем также динамически его вытягивать и подставлять его куда надо. возможно мое не понимание вызвано не знанием языка, на котором вы пишите.


    Пример на счет MessageBox - просто образно говоря пример для попытки объяснить смысл и суть проблемы ...

    242
    11 декабря 2010 года
    Оlga
    2.2K / / 04.02.2006
    Цитата: spyrytus
    Пример на счет MessageBox - просто образно говоря пример для попытки объяснить смысл и суть проблемы ...


    в любом случае должна быть логика в определении того или иного действия. если есть набор операций/алгоритмов, которые нужно выполнить в зависимости от выбора той или иной кнопки на различных формах, то возможно стоит продумать какую то комбинацию меток, кодов и т.д., которые обозначают запуск той или иной функции, которые уже заранее описаны в коде, а запускать ее можно через промежуточную функции, в которой можно через тот же switch в зависимости от метки вызывать нужную функцию .... хотя допускаю что возможно есть более умные методы решения. я ничего критического не писала, у меня такие трюки проходили.

    6.0K
    11 декабря 2010 года
    spyrytus
    51 / / 14.07.2006
    Цитата: Оlga
    в любом случае должна быть логика в определении того или иного действия. если есть набор операций/алгоритмов, которые нужно выполнить в зависимости от выбора той или иной кнопки на различных формах, то возможно стоит продумать какую то комбинацию меток, кодов и т.д., которые обозначают запуск той или иной функции, которые уже заранее описаны в коде, а запускать ее можно через промежуточную функции, в которой можно через тот же switch в зависимости от метки вызывать нужную функцию .... хотя допускаю что возможно есть более умные методы решения. я ничего критического не писала, у меня такие трюки проходили.


    На счет switch - я писал в первом посте, я тоже к этому дошел ... Написать набор предопределенных функций, которые затем вызывать в зависимости от обработчика и элемента управления ...

    Просто я подумал, что есть может какой-то другой выход, или технология, чтобы это реализовать ...

    +1 в сторону switch ! - у кого какие еще будут предложения, очень нужно до понедельника до 09:00 - выбрать решение ...

    Заранее благодарен, жду ответа.

    297
    11 декабря 2010 года
    koodeer
    1.2K / / 02.05.2009
    Сложно посоветовать что-то конкретное. не зная язык, на котором вы пишете это дело, и не зная, какие требования выдвигаются к получающемуся из XML коду.

    Например, можно динамически компилировать код. На C# я бы так и сделал. Это выгодно, если от готового кода нужна высокая производительность. На Си можно заюзать Tiny C, например.

    Если скорость не шибко нужна, то да - switch или if решает. Выбираем из заранее заготовленных кусков кода.

    Цитата:
    <button name=”button1” caption=”click here”
    onclick=”как сделать так, чтобы выводилось <Hello World !>” />


    Это ж вылитый html + javascript! Ну, близко к ним. Как вариант, кинуть на форму WebBrowser, а в него этот код (c добавками) - готово!
    Добавил:
    Впрочем, вам кроме кнопок нужны и комбобоксы и листбоксы - видимо не пойдёт это предложение.

    6.0K
    11 декабря 2010 года
    spyrytus
    51 / / 14.07.2006
    Цитата: koodeer
    Сложно посоветовать что-то конкретное. не зная язык, на котором вы пишете это дело ...


    Я писал - язык С++.
    Tiny - это что такое ? - это какой-то скриптовый язык ?!

    5
    11 декабря 2010 года
    hardcase
    4.5K / / 09.08.2005
    Цитата: koodeer
    Например, можно динамически компилировать код. На C# я бы так и сделал.

    Зачем, если есть XAML? ;)

    5
    11 декабря 2010 года
    hardcase
    4.5K / / 09.08.2005
    Цитата: spyrytus

    Вроде все изложил …


    Я бы в ваших жестоких реалиях C++ использвоал XSLT трансформацию интерфейса на XML в HTML + JavaScript и отображение на стандартной компоненте WebBrowser.

    297
    11 декабря 2010 года
    koodeer
    1.2K / / 02.05.2009
    Цитата: spyrytus
    Я писал - язык С++.


    А, да, во втором вашем посте. Где были мои глаза?..

    Цитата: spyrytus
    Tiny - это что такое ? - это какой-то скриптовый язык ?!


    Ну Гугл же! Соизвольте поискать! Первые же ссылки.
    Это компилятор языка Си. Годится для динамической генерации кода. Впрочем, не уверен, что будет простым вариантом.

    297
    11 декабря 2010 года
    koodeer
    1.2K / / 02.05.2009
    Цитата: hardcase
    Зачем, если есть XAML? ;)


    Я думал о WPF/XAML, но не стал заикаться о том, что сам пока знаю плохо.

    6.0K
    11 декабря 2010 года
    spyrytus
    51 / / 14.07.2006
    Цитата: hardcase
    Я бы в ваших жестоких реалиях C++ использвоал XSLT трансформацию интерфейса на XML в HTML + JavaScript и отображение на стандартной компоненте WebBrowser.


    Да, такой вариант я предлагал, очень прост в реализации (по крайней мере для моей задачи), но - руководство отказалось от WEB интерфейса, захотелось Desktop-ное приложение ... :(

    6.0K
    12 декабря 2010 года
    spyrytus
    51 / / 14.07.2006
    У кото есть еще придложение - Tiny, это как вариант - что еще можно придумать ?

    Заранее благодарен, жду ответа.
    5
    12 декабря 2010 года
    hardcase
    4.5K / / 09.08.2005
    Цитата: spyrytus
    Да, такой вариант я предлагал, очень прост в реализации (по крайней мере для моей задачи), но - руководство отказалось от WEB интерфейса, захотелось Desktop-ное приложение ... :(


    Что плохого в использовании веб-интерфейса в десктоп приложении, тем более что это наиболее быстрый способ получить то, что вам нужно.

    Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
    Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог