Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание отчета в HTML, какие компоненты использовать? 
:(
    Опции темы
Нитонисе
Дата 9.6.2011, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Нужно сгенерировать отчет о выполненном инженерном расчете. Возможностей мемо и ричэдита не хватает. Генерация в ворд происходит медленно. Решил делать в HTML используя компонент CppWebBrowser. На данный момент это выглядит лучшим вариантом, хотя есть и определенные неудобства. 

Есть ли какие-то еще компоненты, куда можно выводить HTML-отчет? Есть ли какие-то специальные классы облегчающие работу с HTML?
PM MAIL   Вверх
Alca
Дата 10.6.2011, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



У тебя только таблицы?

Добавлено через 3 минуты и 5 секунд
FastReport кажись может делать HTML 


--------------------
PM WWW ICQ Skype Jabber   Вверх
Нитонисе
Дата 10.6.2011, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Таблицы, картинки, формулы, текст... 
FastReport что-то мне совсем не понравился... точнее сказать я не разобрался как он работает  smile  Вообще имел ввиду стандартные компоненты, там есть что-нибудь кроме CppWebBrowser, способное отображать текст HTML?
PM MAIL   Вверх
Alca
Дата 10.6.2011, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



глянь здесь http://jvcl.delphi-jedi.org/


--------------------
PM WWW ICQ Skype Jabber   Вверх
Нитонисе
Дата 10.6.2011, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(Alca @  10.6.2011,  11:14 Найти цитируемый пост)
глянь здесь http://jvcl.delphi-jedi.org/

А что это такое?
PM MAIL   Вверх
Alca
Дата 10.6.2011, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

he JEDI Visual Component Library (JVCL) consists of a large collection (currently ca 500) visual and non-visual components which can be instantly reused in your Delphi, Kylix and C++ Builder projects.


Это сообщение отредактировал(а) Alca - 10.6.2011, 12:58


--------------------
PM WWW ICQ Skype Jabber   Вверх
artsb
Дата 13.6.2011, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Зачем какие-то компоненты?
Я делал так:
Добавлял в проект форму, на которой лежит только CppWebBrowser.
В коде формировал страницу динамически или же брал шаблон и делал соответствующие замены.
Далее, сохранял готовую страницу во временную папку %Temp%
Скармливал этот файл CppWebBrowser.
Вызывал метод "Предпросмотр" (для печати).


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Нитонисе
Дата 14.6.2011, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(artsb @  13.6.2011,  22:24 Найти цитируемый пост)
Зачем какие-то компоненты?Я делал так:Добавлял в проект форму, на которой лежит только CppWebBrowser.В коде формировал страницу динамически или же брал шаблон и делал соответствующие замены.Далее, сохранял готовую страницу во временную папку %Temp%Скармливал этот файл CppWebBrowser.Вызывал метод "Предпросмотр" (для печати).

Так я так и делаю. Только есть всякие неудобства, потому и спросил об альтернативных вариантах. Кстати, а как печать можно повесить на отдельную кнопу, а не из контекстного меню вызывать?
PM MAIL   Вверх
artsb
Дата 14.6.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(Нитонисе @  14.6.2011,  09:30 Найти цитируемый пост)
Так я так и делаю. Только есть всякие неудобства, потому и спросил об альтернативных вариантах. Кстати, а как печать можно повесить на отдельную кнопу, а не из контекстного меню вызывать? 

Судя по последнему предложению, вы делаете не так как я smile
Говоря, вызываю предпросмотр, я имел ввиду, не отображение окна с CppWebBrowser, а вызов его метода, который создаёт стандартное окно предпросмотра с различными опциями:
Код

    OleVariant vaIn, vaOut;

    try {
        CppWebBrowser1->ControlInterface->ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
    }
    catch(...) { ; }



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Нитонисе
Дата 14.6.2011, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



А где можно посмотреть возможные параметры такого вызова?
PM MAIL   Вверх
Нитонисе
Дата 14.6.2011, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



С параметрами немного разобрался. Вот какой вопрос появился.

У меня CppWebBrowser лежит на отдельной форме. На главной форме кнопка - предварительный просмотр. По нажатию на нее CppWebBrowser заполняется актуальным отчетом и нужно чтобы раскрылась форма предварительного просмотра на весь монитор. Ваша команда в этом случае не срабатывает. Похоже ей надо чтобы форма с отчетом была видна.
PM MAIL   Вверх
artsb
Дата 14.6.2011, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Странно. У меня всё работало. Правда, я не помню точно как делал. Весь код у меня на работе. А я сейчас в отпуске. Если получится, позвоню другу: может он глянет.

Это сообщение отредактировал(а) artsb - 14.6.2011, 17:40


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
ZVano
Дата 14.6.2011, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 258
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: 1
Всего: 4



Цитата(artsb @  13.6.2011,  22:24 Найти цитируемый пост)
Далее, сохранял готовую страницу во временную папку %Temp%

Можно текст HTML гнать напрямую в TWebBrowser без временного файла.
Функция, которая делает это 3мя разными способами. Способ задается в method (1, 2, 3)
Код

#include "Mshtml.hpp"
#include "UTILCLS.H"
#include "DateUtils.hpp"

bool SetWbrHtml(TWebBrowser * wbr, UnicodeString fNotify, int method) {
    bool result = false;
    try {
        wbr->Navigate("about:blank");
        // WebBrowserReadyState::Uninitialized;
        // wbr->ReadyState
        TDateTime timeStat = Now();
        //DateUtils::SecondsBetween
        //SecondsBetween
        do {
            Application->ProcessMessages();
            __int64 timeLeft = SecondsBetween(Now(), timeStat);
            if (timeLeft > 10)
                return false;
        }
        while (wbr->ReadyState != tagREADYSTATE::READYSTATE_COMPLETE);

        switch(method) {
        case 1: {
                IHTMLDocument2 * document = NULL;
                wbr->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*) & document);
                document->body->Set_innerHTML(fNotify);
                result = true;
                break;
            }
        case 2: {
                if (!wbr->Document)
                    return false;

                TComInterface<IHTMLDocument2>pDocument;
                wbr->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*) & pDocument);

                if (!pDocument)
                    return false;

                pDocument->body->innerHTML = fNotify;

                result = true;
                break;
            }
        case 3: {
                // wbr->OleObject.Document.body.innerHTML = fNotify;
            }
        }
    }
    catch(...) {
    }
    return result;
}






--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
Нитонисе
Дата 15.6.2011, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



А где можно посмотреть управляющие команды для формирования колонтитулов в отчете при выполнению функции предпросмотра? Вот например номер страницы задается последовательностью &p. А как выровнять этот номер страницы по правому краю?

Это сообщение отредактировал(а) Нитонисе - 15.6.2011, 13:25
PM MAIL   Вверх
artsb
Дата 16.6.2011, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Удалось дозвониться. В целом всё как я и говорил. Единственное, CppWebBrowser лежит на главной форме и он не скрыт, а убран за левый край формы.

Цитата(Нитонисе @  15.6.2011,  13:25 Найти цитируемый пост)
А где можно посмотреть управляющие команды для формирования колонтитулов в отчете при выполнению функции предпросмотра? Вот например номер страницы задается последовательностью &p. А как выровнять этот номер страницы по правому краю?

Нужно на MSDN'е поискать. По идее, всё это Microsoft'овские фишки. Так что я думаю, что можно и в справке по Word это поискать.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.